From 82d87c2edef91bb6b97d0f7aeefe9c699dd817b9 Mon Sep 17 00:00:00 2001 From: Christopher Date: Fri, 14 Apr 2017 09:16:02 +0200 Subject: [PATCH 01/17] Html Purifier --- .gitignore | 4 + composer.json | 30 + composer.lock | 1661 +++++++ composer.phar | Bin 0 -> 1836198 bytes index.php | 4 +- oc-includes/htmlpurifier/CREDITS | 9 - .../htmlpurifier/HTMLPurifier.auto.php | 11 - .../htmlpurifier/HTMLPurifier.autoload.php | 26 - .../htmlpurifier/HTMLPurifier.composer.php | 4 - .../htmlpurifier/HTMLPurifier.func.php | 23 - .../htmlpurifier/HTMLPurifier.includes.php | 222 - .../htmlpurifier/HTMLPurifier.kses.php | 30 - .../htmlpurifier/HTMLPurifier.path.php | 11 - oc-includes/htmlpurifier/HTMLPurifier.php | 237 - .../HTMLPurifier.safe-includes.php | 216 - .../HTMLPurifier/AttrCollections.php | 128 - .../htmlpurifier/HTMLPurifier/AttrDef.php | 123 - .../htmlpurifier/HTMLPurifier/AttrDef/CSS.php | 87 - .../HTMLPurifier/AttrDef/CSS/AlphaValue.php | 21 - .../HTMLPurifier/AttrDef/CSS/Background.php | 87 - .../AttrDef/CSS/BackgroundPosition.php | 133 - .../HTMLPurifier/AttrDef/CSS/Border.php | 43 - .../HTMLPurifier/AttrDef/CSS/Color.php | 78 - .../HTMLPurifier/AttrDef/CSS/Composite.php | 38 - .../AttrDef/CSS/DenyElementDecorator.php | 28 - .../HTMLPurifier/AttrDef/CSS/Filter.php | 54 - .../HTMLPurifier/AttrDef/CSS/Font.php | 149 - .../HTMLPurifier/AttrDef/CSS/FontFamily.php | 197 - .../HTMLPurifier/AttrDef/CSS/Ident.php | 24 - .../AttrDef/CSS/ImportantDecorator.php | 40 - .../HTMLPurifier/AttrDef/CSS/Length.php | 47 - .../HTMLPurifier/AttrDef/CSS/ListStyle.php | 78 - .../HTMLPurifier/AttrDef/CSS/Multiple.php | 58 - .../HTMLPurifier/AttrDef/CSS/Number.php | 69 - .../HTMLPurifier/AttrDef/CSS/Percentage.php | 40 - .../AttrDef/CSS/TextDecoration.php | 38 - .../HTMLPurifier/AttrDef/CSS/URI.php | 61 - .../HTMLPurifier/AttrDef/Clone.php | 28 - .../HTMLPurifier/AttrDef/Enum.php | 65 - .../HTMLPurifier/AttrDef/HTML/Bool.php | 28 - .../HTMLPurifier/AttrDef/HTML/Class.php | 34 - .../HTMLPurifier/AttrDef/HTML/Color.php | 33 - .../HTMLPurifier/AttrDef/HTML/FrameTarget.php | 21 - .../HTMLPurifier/AttrDef/HTML/ID.php | 80 - .../HTMLPurifier/AttrDef/HTML/Length.php | 41 - .../HTMLPurifier/AttrDef/HTML/LinkTypes.php | 53 - .../HTMLPurifier/AttrDef/HTML/MultiLength.php | 41 - .../HTMLPurifier/AttrDef/HTML/Nmtokens.php | 52 - .../HTMLPurifier/AttrDef/HTML/Pixels.php | 48 - .../HTMLPurifier/AttrDef/Integer.php | 73 - .../HTMLPurifier/AttrDef/Lang.php | 73 - .../HTMLPurifier/AttrDef/Switch.php | 34 - .../HTMLPurifier/AttrDef/Text.php | 15 - .../htmlpurifier/HTMLPurifier/AttrDef/URI.php | 77 - .../HTMLPurifier/AttrDef/URI/Email.php | 17 - .../AttrDef/URI/Email/SimpleCheck.php | 21 - .../HTMLPurifier/AttrDef/URI/Host.php | 101 - .../HTMLPurifier/AttrDef/URI/IPv4.php | 39 - .../HTMLPurifier/AttrDef/URI/IPv6.php | 99 - .../HTMLPurifier/AttrTransform.php | 56 - .../HTMLPurifier/AttrTransform/Background.php | 23 - .../HTMLPurifier/AttrTransform/BdoDir.php | 19 - .../HTMLPurifier/AttrTransform/BgColor.php | 23 - .../HTMLPurifier/AttrTransform/BoolToCSS.php | 36 - .../HTMLPurifier/AttrTransform/Border.php | 18 - .../HTMLPurifier/AttrTransform/EnumToCSS.php | 58 - .../AttrTransform/ImgRequired.php | 43 - .../HTMLPurifier/AttrTransform/ImgSpace.php | 44 - .../HTMLPurifier/AttrTransform/Input.php | 40 - .../HTMLPurifier/AttrTransform/Lang.php | 28 - .../HTMLPurifier/AttrTransform/Length.php | 27 - .../HTMLPurifier/AttrTransform/Name.php | 21 - .../HTMLPurifier/AttrTransform/NameSync.php | 27 - .../HTMLPurifier/AttrTransform/Nofollow.php | 45 - .../HTMLPurifier/AttrTransform/SafeEmbed.php | 15 - .../HTMLPurifier/AttrTransform/SafeObject.php | 16 - .../HTMLPurifier/AttrTransform/SafeParam.php | 64 - .../AttrTransform/ScriptRequired.php | 16 - .../AttrTransform/TargetBlank.php | 38 - .../HTMLPurifier/AttrTransform/Textarea.php | 18 - .../htmlpurifier/HTMLPurifier/AttrTypes.php | 91 - .../HTMLPurifier/AttrValidator.php | 162 - .../htmlpurifier/HTMLPurifier/Bootstrap.php | 109 - .../HTMLPurifier/CSSDefinition.php | 328 -- .../htmlpurifier/HTMLPurifier/ChildDef.php | 48 - .../HTMLPurifier/ChildDef/Chameleon.php | 48 - .../HTMLPurifier/ChildDef/Custom.php | 90 - .../HTMLPurifier/ChildDef/Empty.php | 20 - .../HTMLPurifier/ChildDef/List.php | 120 - .../HTMLPurifier/ChildDef/Optional.php | 26 - .../HTMLPurifier/ChildDef/Required.php | 117 - .../ChildDef/StrictBlockquote.php | 88 - .../HTMLPurifier/ChildDef/Table.php | 227 - .../htmlpurifier/HTMLPurifier/Config.php | 710 --- .../HTMLPurifier/ConfigSchema.php | 164 - .../ConfigSchema/Builder/ConfigSchema.php | 44 - .../HTMLPurifier/ConfigSchema/Builder/Xml.php | 106 - .../HTMLPurifier/ConfigSchema/Exception.php | 11 - .../HTMLPurifier/ConfigSchema/Interchange.php | 42 - .../ConfigSchema/Interchange/Directive.php | 77 - .../ConfigSchema/Interchange/Id.php | 37 - .../ConfigSchema/InterchangeBuilder.php | 180 - .../HTMLPurifier/ConfigSchema/Validator.php | 206 - .../ConfigSchema/ValidatorAtom.php | 66 - .../HTMLPurifier/ConfigSchema/schema.ser | Bin 14880 -> 0 bytes .../schema/Attr.AllowedClasses.txt | 8 - .../schema/Attr.AllowedFrameTargets.txt | 12 - .../ConfigSchema/schema/Attr.AllowedRel.txt | 9 - .../ConfigSchema/schema/Attr.AllowedRev.txt | 9 - .../schema/Attr.ClassUseCDATA.txt | 19 - .../schema/Attr.DefaultImageAlt.txt | 11 - .../schema/Attr.DefaultInvalidImage.txt | 9 - .../schema/Attr.DefaultInvalidImageAlt.txt | 8 - .../schema/Attr.DefaultTextDir.txt | 10 - .../ConfigSchema/schema/Attr.EnableID.txt | 16 - .../schema/Attr.ForbiddenClasses.txt | 8 - .../ConfigSchema/schema/Attr.IDBlacklist.txt | 5 - .../schema/Attr.IDBlacklistRegexp.txt | 9 - .../ConfigSchema/schema/Attr.IDPrefix.txt | 12 - .../schema/Attr.IDPrefixLocal.txt | 14 - .../schema/AutoFormat.AutoParagraph.txt | 31 - .../ConfigSchema/schema/AutoFormat.Custom.txt | 12 - .../schema/AutoFormat.DisplayLinkURI.txt | 11 - .../schema/AutoFormat.Linkify.txt | 12 - .../AutoFormat.PurifierLinkify.DocURL.txt | 12 - .../schema/AutoFormat.PurifierLinkify.txt | 12 - ...rmat.RemoveEmpty.RemoveNbsp.Exceptions.txt | 11 - .../AutoFormat.RemoveEmpty.RemoveNbsp.txt | 15 - .../schema/AutoFormat.RemoveEmpty.txt | 46 - ...utoFormat.RemoveSpansWithoutAttributes.txt | 11 - .../schema/CSS.AllowImportant.txt | 8 - .../ConfigSchema/schema/CSS.AllowTricky.txt | 11 - .../ConfigSchema/schema/CSS.AllowedFonts.txt | 12 - .../schema/CSS.AllowedProperties.txt | 18 - .../ConfigSchema/schema/CSS.DefinitionRev.txt | 11 - .../schema/CSS.ForbiddenProperties.txt | 13 - .../ConfigSchema/schema/CSS.MaxImgLength.txt | 16 - .../ConfigSchema/schema/CSS.Proprietary.txt | 10 - .../ConfigSchema/schema/CSS.Trusted.txt | 9 - .../schema/Cache.DefinitionImpl.txt | 14 - .../schema/Cache.SerializerPath.txt | 13 - .../schema/Cache.SerializerPermissions.txt | 11 - .../schema/Core.AggressivelyFixLt.txt | 18 - .../schema/Core.CollectErrors.txt | 12 - .../schema/Core.ColorKeywords.txt | 29 - .../schema/Core.ConvertDocumentToFragment.txt | 14 - .../Core.DirectLexLineNumberSyncInterval.txt | 17 - .../schema/Core.DisableExcludes.txt | 14 - .../ConfigSchema/schema/Core.EnableIDNA.txt | 9 - .../ConfigSchema/schema/Core.Encoding.txt | 15 - .../schema/Core.EscapeInvalidChildren.txt | 10 - .../schema/Core.EscapeInvalidTags.txt | 7 - .../schema/Core.EscapeNonASCIICharacters.txt | 13 - .../schema/Core.HiddenElements.txt | 19 - .../ConfigSchema/schema/Core.Language.txt | 10 - .../ConfigSchema/schema/Core.LexerImpl.txt | 34 - .../schema/Core.MaintainLineNumbers.txt | 16 - .../schema/Core.NormalizeNewlines.txt | 11 - .../schema/Core.RemoveInvalidImg.txt | 12 - .../Core.RemoveProcessingInstructions.txt | 11 - .../schema/Core.RemoveScriptContents.txt | 12 - .../ConfigSchema/schema/Filter.Custom.txt | 11 - .../Filter.ExtractStyleBlocks.Escaping.txt | 14 - .../Filter.ExtractStyleBlocks.Scope.txt | 29 - .../Filter.ExtractStyleBlocks.TidyImpl.txt | 16 - .../schema/Filter.ExtractStyleBlocks.txt | 74 - .../ConfigSchema/schema/Filter.YouTube.txt | 16 - .../ConfigSchema/schema/HTML.Allowed.txt | 25 - .../schema/HTML.AllowedAttributes.txt | 19 - .../schema/HTML.AllowedComments.txt | 10 - .../schema/HTML.AllowedCommentsRegexp.txt | 15 - .../schema/HTML.AllowedElements.txt | 23 - .../schema/HTML.AllowedModules.txt | 20 - .../schema/HTML.Attr.Name.UseCDATA.txt | 11 - .../ConfigSchema/schema/HTML.BlockWrapper.txt | 18 - .../ConfigSchema/schema/HTML.CoreModules.txt | 23 - .../schema/HTML.CustomDoctype.txt | 9 - .../ConfigSchema/schema/HTML.DefinitionID.txt | 33 - .../schema/HTML.DefinitionRev.txt | 16 - .../ConfigSchema/schema/HTML.Doctype.txt | 11 - .../schema/HTML.FlashAllowFullScreen.txt | 11 - .../schema/HTML.ForbiddenAttributes.txt | 21 - .../schema/HTML.ForbiddenElements.txt | 20 - .../ConfigSchema/schema/HTML.MaxImgLength.txt | 14 - .../ConfigSchema/schema/HTML.Nofollow.txt | 7 - .../ConfigSchema/schema/HTML.Parent.txt | 12 - .../ConfigSchema/schema/HTML.Proprietary.txt | 12 - .../ConfigSchema/schema/HTML.SafeEmbed.txt | 13 - .../ConfigSchema/schema/HTML.SafeIframe.txt | 13 - .../ConfigSchema/schema/HTML.SafeObject.txt | 13 - .../schema/HTML.SafeScripting.txt | 10 - .../ConfigSchema/schema/HTML.Strict.txt | 9 - .../ConfigSchema/schema/HTML.TargetBlank.txt | 8 - .../ConfigSchema/schema/HTML.TidyAdd.txt | 8 - .../ConfigSchema/schema/HTML.TidyLevel.txt | 24 - .../ConfigSchema/schema/HTML.TidyRemove.txt | 8 - .../ConfigSchema/schema/HTML.Trusted.txt | 9 - .../ConfigSchema/schema/HTML.XHTML.txt | 11 - .../schema/Output.CommentScriptContents.txt | 10 - .../schema/Output.FixInnerHTML.txt | 15 - .../schema/Output.FlashCompat.txt | 11 - .../ConfigSchema/schema/Output.Newline.txt | 13 - .../ConfigSchema/schema/Output.SortAttr.txt | 14 - .../ConfigSchema/schema/Output.TidyFormat.txt | 25 - .../ConfigSchema/schema/Test.ForceNoIconv.txt | 7 - .../schema/URI.AllowedSchemes.txt | 17 - .../ConfigSchema/schema/URI.Base.txt | 17 - .../ConfigSchema/schema/URI.DefaultScheme.txt | 10 - .../ConfigSchema/schema/URI.DefinitionID.txt | 11 - .../ConfigSchema/schema/URI.DefinitionRev.txt | 11 - .../ConfigSchema/schema/URI.Disable.txt | 14 - .../schema/URI.DisableExternal.txt | 11 - .../schema/URI.DisableExternalResources.txt | 13 - .../schema/URI.DisableResources.txt | 15 - .../ConfigSchema/schema/URI.Host.txt | 19 - .../ConfigSchema/schema/URI.HostBlacklist.txt | 9 - .../ConfigSchema/schema/URI.MakeAbsolute.txt | 13 - .../ConfigSchema/schema/URI.Munge.txt | 83 - .../schema/URI.MungeResources.txt | 17 - .../schema/URI.MungeSecretKey.txt | 30 - .../schema/URI.OverrideAllowedSchemes.txt | 9 - .../schema/URI.SafeIframeRegexp.txt | 22 - .../HTMLPurifier/ConfigSchema/schema/info.ini | 3 - .../htmlpurifier/HTMLPurifier/ContentSets.php | 155 - .../htmlpurifier/HTMLPurifier/Context.php | 82 - .../htmlpurifier/HTMLPurifier/Definition.php | 50 - .../HTMLPurifier/DefinitionCache.php | 108 - .../DefinitionCache/Decorator.php | 62 - .../DefinitionCache/Decorator/Cleanup.php | 43 - .../DefinitionCache/Decorator/Memory.php | 46 - .../DefinitionCache/Decorator/Template.php.in | 47 - .../HTMLPurifier/DefinitionCache/Null.php | 39 - .../DefinitionCache/Serializer.php | 191 - .../DefinitionCache/Serializer/README | 3 - .../HTMLPurifier/DefinitionCacheFactory.php | 91 - .../htmlpurifier/HTMLPurifier/Doctype.php | 60 - .../HTMLPurifier/DoctypeRegistry.php | 103 - .../htmlpurifier/HTMLPurifier/ElementDef.php | 195 - .../htmlpurifier/HTMLPurifier/Encoder.php | 545 --- .../HTMLPurifier/EntityLookup.php | 44 - .../HTMLPurifier/EntityLookup/entities.ser | 1 - .../HTMLPurifier/EntityParser.php | 144 - .../HTMLPurifier/ErrorCollector.php | 209 - .../htmlpurifier/HTMLPurifier/ErrorStruct.php | 60 - .../htmlpurifier/HTMLPurifier/Exception.php | 12 - .../htmlpurifier/HTMLPurifier/Filter.php | 46 - .../Filter/ExtractStyleBlocks.php | 289 -- .../HTMLPurifier/Filter/YouTube.php | 39 - .../htmlpurifier/HTMLPurifier/Generator.php | 254 -- .../HTMLPurifier/HTMLDefinition.php | 425 -- .../htmlpurifier/HTMLPurifier/HTMLModule.php | 244 -- .../HTMLPurifier/HTMLModule/Bdo.php | 31 - .../HTMLModule/CommonAttributes.php | 26 - .../HTMLPurifier/HTMLModule/Edit.php | 38 - .../HTMLPurifier/HTMLModule/Forms.php | 119 - .../HTMLPurifier/HTMLModule/Hypertext.php | 31 - .../HTMLPurifier/HTMLModule/Iframe.php | 38 - .../HTMLPurifier/HTMLModule/Image.php | 40 - .../HTMLPurifier/HTMLModule/Legacy.php | 159 - .../HTMLPurifier/HTMLModule/List.php | 43 - .../HTMLPurifier/HTMLModule/Name.php | 21 - .../HTMLPurifier/HTMLModule/Nofollow.php | 19 - .../HTMLModule/NonXMLCommonAttributes.php | 14 - .../HTMLPurifier/HTMLModule/Object.php | 47 - .../HTMLPurifier/HTMLModule/Presentation.php | 36 - .../HTMLPurifier/HTMLModule/Proprietary.php | 33 - .../HTMLPurifier/HTMLModule/Ruby.php | 27 - .../HTMLPurifier/HTMLModule/SafeEmbed.php | 34 - .../HTMLPurifier/HTMLModule/SafeObject.php | 52 - .../HTMLPurifier/HTMLModule/SafeScripting.php | 37 - .../HTMLPurifier/HTMLModule/Scripting.php | 54 - .../HTMLModule/StyleAttribute.php | 24 - .../HTMLPurifier/HTMLModule/Tables.php | 69 - .../HTMLPurifier/HTMLModule/Target.php | 23 - .../HTMLPurifier/HTMLModule/TargetBlank.php | 19 - .../HTMLPurifier/HTMLModule/Text.php | 71 - .../HTMLPurifier/HTMLModule/Tidy.php | 207 - .../HTMLPurifier/HTMLModule/Tidy/Name.php | 24 - .../HTMLModule/Tidy/Proprietary.php | 24 - .../HTMLPurifier/HTMLModule/Tidy/Strict.php | 21 - .../HTMLModule/Tidy/Transitional.php | 9 - .../HTMLPurifier/HTMLModule/Tidy/XHTML.php | 17 - .../HTMLModule/Tidy/XHTMLAndHTML4.php | 161 - .../HTMLModule/XMLCommonAttributes.php | 14 - .../HTMLPurifier/HTMLModuleManager.php | 418 -- .../HTMLPurifier/IDAccumulator.php | 53 - .../htmlpurifier/HTMLPurifier/Injector.php | 239 - .../HTMLPurifier/Injector/AutoParagraph.php | 345 -- .../HTMLPurifier/Injector/DisplayLinkURI.php | 26 - .../HTMLPurifier/Injector/Linkify.php | 46 - .../HTMLPurifier/Injector/PurifierLinkify.php | 45 - .../HTMLPurifier/Injector/RemoveEmpty.php | 54 - .../Injector/RemoveSpansWithoutAttributes.php | 60 - .../HTMLPurifier/Injector/SafeObject.php | 91 - .../htmlpurifier/HTMLPurifier/Language.php | 163 - .../Language/classes/en-x-test.php | 12 - .../Language/messages/en-x-test.php | 11 - .../Language/messages/en-x-testmini.php | 12 - .../HTMLPurifier/Language/messages/en.php | 63 - .../HTMLPurifier/LanguageFactory.php | 198 - .../htmlpurifier/HTMLPurifier/Length.php | 115 - .../htmlpurifier/HTMLPurifier/Lexer.php | 326 -- .../HTMLPurifier/Lexer/DOMLex.php | 243 - .../HTMLPurifier/Lexer/DirectLex.php | 490 --- .../HTMLPurifier/Lexer/PEARSax3.php | 139 - .../htmlpurifier/HTMLPurifier/Lexer/PH5P.php | 3904 ----------------- .../HTMLPurifier/PercentEncoder.php | 98 - .../htmlpurifier/HTMLPurifier/Printer.php | 176 - .../HTMLPurifier/Printer/CSSDefinition.php | 38 - .../HTMLPurifier/Printer/ConfigForm.css | 10 - .../HTMLPurifier/Printer/ConfigForm.js | 5 - .../HTMLPurifier/Printer/ConfigForm.php | 368 -- .../HTMLPurifier/Printer/HTMLDefinition.php | 272 -- .../HTMLPurifier/PropertyList.php | 86 - .../HTMLPurifier/PropertyListIterator.php | 32 - .../htmlpurifier/HTMLPurifier/Strategy.php | 26 - .../HTMLPurifier/Strategy/Composite.php | 23 - .../HTMLPurifier/Strategy/Core.php | 18 - .../HTMLPurifier/Strategy/FixNesting.php | 346 -- .../HTMLPurifier/Strategy/MakeWellFormed.php | 532 --- .../Strategy/RemoveForeignElements.php | 188 - .../Strategy/ValidateAttributes.php | 39 - .../htmlpurifier/HTMLPurifier/StringHash.php | 39 - .../HTMLPurifier/StringHashParser.php | 110 - .../HTMLPurifier/TagTransform.php | 36 - .../HTMLPurifier/TagTransform/Font.php | 98 - .../HTMLPurifier/TagTransform/Simple.php | 35 - .../htmlpurifier/HTMLPurifier/Token.php | 57 - .../HTMLPurifier/Token/Comment.php | 22 - .../htmlpurifier/HTMLPurifier/Token/Empty.php | 11 - .../htmlpurifier/HTMLPurifier/Token/End.php | 19 - .../htmlpurifier/HTMLPurifier/Token/Start.php | 11 - .../htmlpurifier/HTMLPurifier/Token/Tag.php | 57 - .../htmlpurifier/HTMLPurifier/Token/Text.php | 33 - .../HTMLPurifier/TokenFactory.php | 94 - oc-includes/htmlpurifier/HTMLPurifier/URI.php | 242 - .../HTMLPurifier/URIDefinition.php | 103 - .../htmlpurifier/HTMLPurifier/URIFilter.php | 67 - .../URIFilter/DisableExternal.php | 23 - .../URIFilter/DisableExternalResources.php | 12 - .../URIFilter/DisableResources.php | 11 - .../HTMLPurifier/URIFilter/HostBlacklist.php | 25 - .../HTMLPurifier/URIFilter/MakeAbsolute.php | 114 - .../HTMLPurifier/URIFilter/Munge.php | 53 - .../HTMLPurifier/URIFilter/SafeIframe.php | 35 - .../htmlpurifier/HTMLPurifier/URIParser.php | 70 - .../htmlpurifier/HTMLPurifier/URIScheme.php | 95 - .../HTMLPurifier/URIScheme/data.php | 98 - .../HTMLPurifier/URIScheme/file.php | 32 - .../HTMLPurifier/URIScheme/ftp.php | 42 - .../HTMLPurifier/URIScheme/http.php | 19 - .../HTMLPurifier/URIScheme/https.php | 13 - .../HTMLPurifier/URIScheme/mailto.php | 27 - .../HTMLPurifier/URIScheme/news.php | 22 - .../HTMLPurifier/URIScheme/nntp.php | 19 - .../HTMLPurifier/URISchemeRegistry.php | 68 - .../HTMLPurifier/UnitConverter.php | 254 -- .../htmlpurifier/HTMLPurifier/VarParser.php | 154 - .../HTMLPurifier/VarParser/Flexible.php | 103 - .../HTMLPurifier/VarParser/Native.php | 26 - .../HTMLPurifier/VarParserException.php | 11 - oc-includes/htmlpurifier/INSTALL | 374 -- oc-includes/htmlpurifier/LICENSE | 504 --- oc-includes/htmlpurifier/NEWS | 1056 ----- oc-includes/osclass/core/Params.php | 2 - oc-includes/osclass/install-functions.php | 4 +- oc-includes/osclass/install.php | 8 +- oc-load.php | 3 + vendor/.keep | 0 369 files changed, 1709 insertions(+), 27851 deletions(-) create mode 100644 composer.json create mode 100644 composer.lock create mode 100755 composer.phar delete mode 100644 oc-includes/htmlpurifier/CREDITS delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.auto.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.autoload.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.composer.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.func.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.includes.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.kses.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.path.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier.safe-includes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrCollections.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Background.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Border.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Composite.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Font.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Ident.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Length.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Percentage.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/URI.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Clone.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Enum.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Class.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Color.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/ID.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Length.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Pixels.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Integer.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Lang.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Switch.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Text.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Email.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv4.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv6.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Background.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BdoDir.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BgColor.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BoolToCSS.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Border.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/EnumToCSS.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgRequired.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgSpace.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Input.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Lang.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Length.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Name.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/NameSync.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Nofollow.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/SafeEmbed.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/SafeObject.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/SafeParam.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ScriptRequired.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/TargetBlank.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Textarea.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrTypes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/AttrValidator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Bootstrap.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/CSSDefinition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Chameleon.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Custom.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Empty.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/List.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Optional.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Required.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/StrictBlockquote.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Table.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Config.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Exception.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Validator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedClasses.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedFrameTargets.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRel.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRev.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.ClassUseCDATA.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultImageAlt.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImage.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImageAlt.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultTextDir.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.EnableID.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.ForbiddenClasses.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklist.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklistRegexp.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefix.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefixLocal.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.AutoParagraph.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/info.ini delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ContentSets.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Context.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Definition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Memory.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Null.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Serializer.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Serializer/README delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DefinitionCacheFactory.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Doctype.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/DoctypeRegistry.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ElementDef.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Encoder.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/EntityLookup.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/EntityLookup/entities.ser delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/EntityParser.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ErrorCollector.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/ErrorStruct.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Exception.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Filter.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Filter/YouTube.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Generator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLDefinition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Bdo.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/CommonAttributes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Edit.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Forms.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Hypertext.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Iframe.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Image.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Legacy.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/List.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Name.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Nofollow.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Object.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Presentation.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Proprietary.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Ruby.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeEmbed.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeObject.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Scripting.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/StyleAttribute.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tables.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Target.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/TargetBlank.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Text.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Name.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Proprietary.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Strict.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/XHTML.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/HTMLModuleManager.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/IDAccumulator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/AutoParagraph.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/DisplayLinkURI.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/Linkify.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/PurifierLinkify.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/RemoveEmpty.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Injector/SafeObject.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Language.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Language/classes/en-x-test.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Language/messages/en-x-test.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Language/messages/en-x-testmini.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Language/messages/en.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/LanguageFactory.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Length.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Lexer.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Lexer/DOMLex.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Lexer/DirectLex.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Lexer/PEARSax3.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Lexer/PH5P.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/PercentEncoder.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Printer.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Printer/CSSDefinition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Printer/ConfigForm.css delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Printer/ConfigForm.js delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Printer/ConfigForm.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/PropertyList.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/PropertyListIterator.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy/Composite.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy/Core.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy/FixNesting.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy/MakeWellFormed.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy/RemoveForeignElements.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Strategy/ValidateAttributes.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/StringHash.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/StringHashParser.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/TagTransform.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/TagTransform/Font.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/TagTransform/Simple.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token/Comment.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token/Empty.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token/End.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token/Start.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token/Tag.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/Token/Text.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/TokenFactory.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URI.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIDefinition.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/DisableExternal.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/DisableExternalResources.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/DisableResources.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/HostBlacklist.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/MakeAbsolute.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/Munge.php delete mode 100644 oc-includes/htmlpurifier/HTMLPurifier/URIFilter/SafeIframe.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIParser.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/data.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/file.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/ftp.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/http.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/https.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/mailto.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/news.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URIScheme/nntp.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/URISchemeRegistry.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/UnitConverter.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/VarParser.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/VarParser/Flexible.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/VarParser/Native.php delete mode 100755 oc-includes/htmlpurifier/HTMLPurifier/VarParserException.php delete mode 100644 oc-includes/htmlpurifier/INSTALL delete mode 100644 oc-includes/htmlpurifier/LICENSE delete mode 100644 oc-includes/htmlpurifier/NEWS create mode 100644 vendor/.keep diff --git a/.gitignore b/.gitignore index aee99119b0..88abc0d744 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,7 @@ node_modules # test oc-includes/osclass/t/config.php oc-includes/simpletest/test/osclass/custom_config.php + +# vendor +/vendor/* +!/vendor/.keep \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000000..e1f56dc46c --- /dev/null +++ b/composer.json @@ -0,0 +1,30 @@ +{ + "name": "osclass/platform", + "description": "OSclass platform", + "license": "Apache-2.0", + "type": "project", + "autoload": { + "psr-0": { + "": "src/" + }, + "exclude-from-classmap": [ + "**/Test/**" + ] + }, + "require": { + "php": ">=5.6.3", + "ext-mbstring": "*", + "ext-gd": "*", + "ext-curl": "*", + "ext-mysqli": "*", + "ezyang/htmlpurifier": "dev-master" + }, + "require-dev": { + "phpunit/phpunit": "~4.2", + "squizlabs/php_codesniffer": "1.5.3", + "phpmd/phpmd": "@stable", + "pdepend/pdepend": "2.4.0" + }, + "minimum-stability": "alpha", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000000..a4b4ae547b --- /dev/null +++ b/composer.lock @@ -0,0 +1,1661 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "25474aa1286401822b5f436f31d57994", + "packages": [ + { + "name": "ezyang/htmlpurifier", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "65d5cdee50ebd9a11b3d1bb907f27144b734cea9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/65d5cdee50ebd9a11b3d1bb907f27144b734cea9", + "reference": "65d5cdee50ebd9a11b3d1bb907f27144b734cea9", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "require-dev": { + "simpletest/simpletest": "^1.1" + }, + "type": "library", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "time": "2017-03-22 00:50:26" + }, + { + "name": "gettext/gettext", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/oscarotero/Gettext.git", + "reference": "9f8b05914581173725b256157e15ee14c42d3865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oscarotero/Gettext/zipball/9f8b05914581173725b256157e15ee14c42d3865", + "reference": "9f8b05914581173725b256157e15ee14c42d3865", + "shasum": "" + }, + "require": { + "gettext/languages": "2.*", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/view": "*", + "symfony/yaml": "~2", + "twig/extensions": "*", + "twig/twig": "^1.31|^2.0" + }, + "suggest": { + "illuminate/view": "Is necessary if you want to use the Blade extractor", + "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", + "twig/extensions": "Is necessary if you want to use the Twig extractor", + "twig/twig": "Is necessary if you want to use the Twig extractor" + }, + "type": "library", + "autoload": { + "psr-4": { + "Gettext\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oscar Otero", + "email": "oom@oscarotero.com", + "homepage": "http://oscarotero.com", + "role": "Developer" + } + ], + "description": "PHP gettext manager", + "homepage": "https://github.com/oscarotero/Gettext", + "keywords": [ + "JS", + "gettext", + "i18n", + "mo", + "po", + "translation" + ], + "time": "2017-03-04 16:39:13" + }, + { + "name": "gettext/languages", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/49c39e51569963cc917a924b489e7025bfb9d8c7", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "bin": [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ], + "type": "library", + "autoload": { + "psr-4": { + "Gettext\\Languages\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michele Locati", + "email": "mlocati@gmail.com", + "role": "Developer" + } + ], + "description": "gettext languages with plural rules", + "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules", + "keywords": [ + "cldr", + "i18n", + "internationalization", + "l10n", + "language", + "languages", + "localization", + "php", + "plural", + "plural rules", + "plurals", + "translate", + "translations", + "unicode" + ], + "time": "2017-03-23T17:02:28+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "pdepend/pdepend", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "64ba7e6d0507729e2bb482cf20cd12c4d96d99bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/64ba7e6d0507729e2bb482cf20cd12c4d96d99bc", + "reference": "64ba7e6d0507729e2bb482cf20cd12c4d96d99bc", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3", + "symfony/dependency-injection": "^2.3.0|^3", + "symfony/filesystem": "^2.3.0|^3" + }, + "require-dev": { + "phpunit/phpunit": "^4.4.0,<4.8", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer", + "time": "2017-01-10T13:45:16+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25T06:54:22+00:00" + }, + { + "name": "phpmd/phpmd", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "9298602a922cd8c46666df8d540a60bc5925ce55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/9298602a922cd8c46666df8d540a60bc5925ce55", + "reference": "9298602a922cd8c46666df8d540a60bc5925ce55", + "shasum": "" + }, + "require": { + "pdepend/pdepend": "^2.0.4", + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "bin": [ + "src/bin/phpmd" + ], + "type": "project", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "time": "2016-11-23T20:33:32+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-03-02T20:05:34+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03T07:40:28+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.35", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-02-06T05:18:07+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "1.5.3", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "396178ada8499ec492363587f037125bf7b07fcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/396178ada8499ec492363587f037125bf7b07fcc", + "reference": "396178ada8499ec492363587f037125bf7b07fcc", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.1.2" + }, + "suggest": { + "phpunit/php-timer": "dev-master" + }, + "bin": [ + "scripts/phpcs" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-phpcs-fixer": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/CommentParser/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2014-05-01T03:07:07+00:00" + }, + { + "name": "symfony/config", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "8444bde28e3c2a33e571e6f180c2d78bfdc4480d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/8444bde28e3c2a33e571e6f180c2d78bfdc4480d", + "reference": "8444bde28e3c2a33e571e6f180c2d78bfdc4480d", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/filesystem": "~2.8|~3.0" + }, + "require-dev": { + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-04-04T15:30:56+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "923bb014708b666e4092c9ba39993895c9c8fcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/923bb014708b666e4092c9ba39993895c9c8fcd7", + "reference": "923bb014708b666e4092c9ba39993895c9c8fcd7", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "symfony/yaml": "<3.2" + }, + "require-dev": { + "symfony/config": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/yaml": "~3.2" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2017-04-04T07:26:27+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "64421e6479c4a8e60d790fb666bd520992861b66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/64421e6479c4a8e60d790fb666bd520992861b66", + "reference": "64421e6479c4a8e60d790fb666bd520992861b66", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-03-26T15:47:15+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/62b4cdb99d52cb1ff253c465eb1532a80cebb621", + "reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-03-20T09:45:15+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "alpha", + "stability-flags": { + "ezyang/htmlpurifier": 20, + "gettext/gettext": 20, + "phpmd/phpmd": 0 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=5.6.3", + "ext-mbstring": "*", + "ext-gd": "*", + "ext-curl": "*", + "ext-mysqli": "*" + }, + "platform-dev": [] +} diff --git a/composer.phar b/composer.phar new file mode 100755 index 0000000000000000000000000000000000000000..357793176e3b45854af3c8e201bcd3e1b169bbef GIT binary patch literal 1836198 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�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

$mnv-0$YUbqgGDaOzTUDD38=z@cC%`18B+x@ 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

xt zE#iOj2u-G?bjehXM@zBg$DjPJ)f;Ll&K0=jAyJN+rp6(irez$ArC5?}ngyhdY6oS5 zEXu#MVXM~EvQ}s*%@B|uIh>!?@WX2U(sn`nqa*6|W(RG(LvBlEgDbo@iMz!ufI5d^QOg>g%eeAv z`b85J!^=D|(X4WKM!}#eRq{0!OjB)7)LP2K z3XKCm;I?*lI?RWKI76LTF_7qPz;*~C?Z$FlqhMPcDtsph)FSeeCp<_Uf+p>yyg{52 zdgHR+h3D|RbxYHqTd>)w?X|V+27(Qw3Wz@;>8)J1H=*2rSU-$+GR;0-KM%G zKeo)xCFkYs`QUmk*%>^KwtggKOE@t0@kMJYRh=nLlPt&)V~2!pWKhY$r5cF2s6qv1 z9WorGqhg?My&$@KEK=ypfa7&Az97O0qc{YE7}rWRfnX)>xf^bzEgFlgTjIlB3f~Z( zKm^dM(Z9NxAkB^xJZy{3g$zm*0?Cf<>uXq(ay#31bRKTKJMH7TWMl(uZ;eJ!;gM(@ z>E;b=uFc}wtTYaL6|1(un418|-F_kY(=WPUja^()&mgm2A4ap>*~P5rkaRjICdfrP zc1g8Pvv*bR&j^}|BT=@J!CD+Gzw^YI${YeHBos|OYlPoHI#0wJgUR-tWd=?e%<`B= zGaw}-&U9@8C%NQ4HNh3mx(Eq7wuC4VoDBr_aDr}l34wQx+*haHb3DE{s!B^ToQu)$ zEjlGN)syr;K(`8nrn=HUkj|10{~2UvxOFNsU6RVM1lL9>bVowd>XFVqR6OnK4*4uY z%|m!$Gy2aU2eR$5`-!d@w%%y?S8$naJvo5XZBtKAa~HvP^KG$H?@RX4iZI~hOH>JH z+Z4By=8`BLV|dgmP=eU|D`B&yt;C{WxoW8))|?kvCGbJ>IXa^LgY!T7U#fUPSt(#9 z@9yDd&Wb9754i>E!UWQ~9MCM0_K%KZlcOjOZwajPZKr}dC&cWG5cJR`NGBRAlT@>P zmsFASRCU)IrFW&Jtci7kq+NwWJk~ZHoM?b$nNtBOfL?S&I4rNG=^nOn6t?cfh#>G3Y=fgu!qGBgHsdg3<-YDZU9B z9xy;B1-kef~`gG{(a z1k+edA^N3eAu~6zfe(rz030;@a!T6Cw?ilBH&`eYAZ5gev`Z4I8js8kuQ6D~_2dk> zY#+kV)T`ddZidn5!t2h%@iLrxS>Lw8-W0EGjg_x$mAzT8)Eg<==IWZy%k&43E7%z| zZvNcIMLSpBBN*QUxXOI%X1{;gJL2aT7?=FmWddj0*vY^03&t3X)WS<8dih@e3U{zS z54+VxnW;j;HDlNf2fR9s_m(7`87oxoPmtLQn7sx_zF7a$@&3lQTQAqK1U{2Xvyr%M z|6p%>;~;+c90<|!f7su7b^Q9(*8ax&?$+k<{)_efZ@2bQ_t#%|WhsKxZwCi|MhL_9 zs{^+D`ERq&v4z*Kwl{V*8Cm)HuYOH2;&ufcuZh_(IzvXn@X=FX%HT?NnMxik5#Fy} z;ul)%8GYeg=a~-^L{5nmn2M4!8^K#?3@`=`AtzSZ5^vzkuBv4=I#Qh)UiD3?IzsS@$vks9X4Mt4Nh%`mqLLDMQO_$Hg zQ=Ja2Rh6rDDST25Dl;uTcUrT$$^fOua?Y@Jd(x|3twIdPQ3!|pD@d1fpfiF&2}|8z z(rCGjHO>@8x}+=8xeurBJ<2F)9Qa7?sR7esw#k#*^DGr_=?dQitm0|Ijz!Xw3~$N6 ztK##F(5u;9DCs*nhU;I|2JPa;8;lFyiIs%EdIkC)MBt{wjBP)(CWj2gP zd5dDX6dRqa$UnlUNBBMAi$uD4T#IQoVmI25t8Ep!(*5tvCPY2GCE0Aj!bF|fW4NtS zx|W{xf=f;jJg=virb)l&ePdxl)k0*Q1j+vE?-tZA%zadOxw0YvjNU`m3pVP4JaxVJ zM0)oBd@7cC=*FkzmxvAG#j{nG{|t9oBHBpub6{rV-p^^YDQnVTC8W3G%YOf+^Q$NP zLj#$Tp$o&^uFjLHTnX{D6xw~2;hm+i$a0X6LY+xDAujd;Zh{iC*6$Mc%}|cZ{kYdZ zm3tDbI>0SNgcJs&X;ZGW<(fHclSp42tb!AueSbaazC+BT7N}W3HjwAwF#zG15lP3# zvVFR``dI%DnaksLvyOX}u)^DAX}*Ll>Xq+y@q!j(t8k7%bXk&|_!^zHi5Pw(?~7l= zc(LbA#Y|^-LRSk6h|#F~zS9OJo|&yA)4+ZlQ(TFgTEaYIxnf zgf|D*OHGvK)svQ$ za(IN>cke@E6dux&36DPaXX1uC>I9Wsx!f{0T}`bNZZ5kNZgWX>8N4_&8jk|42sa6l`Z|d}69CF@S|Rw)`Ho@Tc})-jWEBjL#bz^a zr#{}^Y(4#|^{XdefKiZENamPWS(){10VqQkLpT#164ExG(;i>T{JTi6ks z9LumIsGV#_^5qqsOzBzAV*j+pW_UzPjNfMbtAYTF?U& z3!Enz^*ac_uveWn;S|^QXRH6Z`fGZ+zr-R=u_9XPsDE>bt9d)^$47@p<4=#?NT9&s z8_t_x0;_=k0*ht&A6fn!sM?Z^1=IYX0$}#i zI^@(=@ebyHdr6G^0hoU-mt|ukb!`p&2MagoWd#N>nf}IG2XNlHwkh+z%kI0u)$J88;6D8x zd(k&A!ur_%Mu2q>a?Es!vJspQJlHyZxxN2#{a_<$?e%pJH&S0>zZQI-oa+i;jayfP zu`sjd1~(3H2h+y4>w6KhsJ&r7{d$6}W8A8a+j35UW(3yWUQdDV^}+Ms#+F`oFF7la zQFy=d+t>{5-9cdKcyMz09*&aJ;fNa+_^li*X&=m@i`kA%`lX`6sxT}p&B*MJDwc#W z8EuwEjc$iSc&u_7K%V4t_Se9$s~SI*1k9jY(PXy#o%33yEOt<(xrFJVhjety4gj4_*s%;q!eiDijx_FqIVvg7{MK zUyGoGKq75JDaZm&s1I;vSD^`*6(mHnt~7`bp|lRD7uPP>xqTfb9bg*e3>(trS-vDTMRf&~mdeflYhZ~*~d zV10z^_5>e;bQ$P1*QO*vnbg%Ug|T**uB|uGPIBlTq|nMjB&la_rIvxe3a=2G<*?%r zxYeI@`3w>@d|fjHkg)77FmVpCo3`0!+PJT?ifF{pmje1Q?wA+x=t%P*QaiFn!Wcp` zu5|ztuK4;v*7ns2y+%;#pl(tL#R^eV47d(mri$4ykIgY|2^wAJ2!Ee0-*yh4to&Pd zSO-q>IH{Oc|Ap9Eb)%RZr_sgSqdBrjB*#=2Zt0l{G! ze%Pp|f1<|LfY8;CMp&T==DvMcyj0KtoXG?Z)Yh`tkC?o_+H(9Wmm}c7TKuc7#k5l3 z3Z%VoA#H5fqhzd(amT=Z;+g`c)Xr%?O0Xbk!H5D*@d=N5N#aJI^}$w7fw6jla&bFRyQ}PWq##cvyLc=dW6apRN4co4-HlJbQ4|TW&44 zj(VTsP~R&4Sw?}w{??n;;ioHap78_Tq;1hKLg+RdBWK4UcJ=;Py8W~$);RbLOSTr# z>R%SgPu_gObMN?T9m?~`+4X30^!Saxy=^7jrnUSDs-|s<^F^9$9UXFTYy8hIMS!)A z#-GTWNBJu>(!wa@^U<5Exts1l@B$FE@-G!=pagBL740M_RgaVaa`a<_gY7NrqX1#g z83aFN5D;=ULxE1*|CeriffGP8l#4<%G>L<%bKP~-YOwR9BOQ(DD{?`GlGoo0$u&t|G>`21n-Mwxp!djgle_B@E z(l#j!F91&InmhNvIygui%_C?+JOR55hnfBYshD!4y9f>_nh8KF4lrWoo(9hfJ3ihe z(p2E%TC4$~pw0FAv>3KUJHwKqrVnmZ&J*^CHf(lkcHIIQX*j2wwn)jITvixc9-5MDWpv>ZWhWWZ=ApH-w7u{WENos*UIauRFz-aw&Hs45f+g#zdS8yX2n5TtRDf@+*(y0;>JY`ROS z`{<>RnM(w=9-D`#-=lDFG(v zvY~3*_?V%Nrau8G(0^4|a;`jA$KOxB*!&DC_2TjYgmDM%sgIyuAc7`z_`N3YRNLV3 zF8+V{qc4`ntGA$dH$QVv>VxsB*i@ReIupQMh(vf98LSQBGV5YNay5P6s!U$t0Qv)P z|F83(AS7)O(GFoCN`m5r7(UavNQ#k87+OYK(n?Tjz1a3x+NVEPTAE=8xHAmtR!|)f z7yw4>mqt|(D%-ANxl+-8!KXkEuf;J*h{$(yCI%a{F-%-K#&)rUl!2RKy~z2IgU4|K z34P>#o#E_RVYDufI2VV50F+Yam29PUht67-9Q7yLYI(H{EP)}5{@e?L5RsFJeoGzjHQ;eul3$ck|!7Hrg!X35H4lHMm)?fcp2vNpv- z+l&yn4V$Y+5wgPWDX5A8tx8E0;xBqnm^iBhS7-WKSquzfnq_+o{Ui#bcFKtDnyrtt zSS-3B>U#8lT$HJdRD;W1say;l&ZwzV?V{tPBdILhEeK7zM)ca+=F|08NKf%B^m!t*h71xu=cL zRaj9osA%l6(wZx)HXGB7?{$0KX0+U3OTE3>5Y)G@{X^5rv6A_)+Yox6TG2j-o@kwc zjx?I;Hc|DZY^Apso3@MF?EvM(9coH)#P|G@-jOht6JI!VmwCgqMC_;(LO)9=|3r=n zUG5BgGSFkayN{kh*`SV# z86A`{#-4+JjG&~%I)(vQgnRPGBD_5CX|nODQl!UXcLdc))QIlqXgC%;1vrp=fXh$7 zhiY};XtPR+*d2Ps;Gh2sf|TQ?tV**BWV$_WW=p?i(Wz|=4Ru}>V&xHrOt=%4^c@VS ztv5D53!_7{mebhW{bKo7U&a~L3G10SIsy_H6Yn)1&D4_4r1!vI(CDm|3NXPIa45Fs zF>P!@j#flj2{Y^=#!8iL61GBS_pdI#-J_qspt->hgHvp_GK|tBSnFGN9F~3)owB3_ zw!QW5I97rlY+?DAFSJk;T_+S4WL&?i!OF2-dEn--by9X1a&a?Zxju8U6Ol@#FX2(QFW8cU;d+;I@O zwUZ%I3@0ZdP&?UQR#bqUl0u~hz$8a97$Ukp?-V2MMDJC>(f~B3lMj7}+=)f#A7H%Z zKCX^I4Oqm#%gU3i4Uv?P166I!;m_D`fi9Pb`O4F~Q7k@xTk^Emuda)4uzr2d-g3m6 ztHC&K*#{Hni>Oq5ap4pT>U@cwkt~Q_g3bec2{KnsKa_@gE^Zr&TehSC(-)Q(O~#vB zTx!Uez$MS4gD$*}|9fnNd^qBNvx#6fYTHH#;q=CK$qxD7V});vo${SVgZjM66#=H@ z(#M+^-m2tTSmQox(Nx-YjG6Jz19p-gVRD5abB}@%-6NCTE&>oHEt`7)EM{4C)vM73 zORF*2nlpUq^>lvujCPkzx0oWPd-!Fs4Ac4c{qN*ZrB2ai5W%LG$c9vV8GGjbQcF?; z7SMH0R(+c$NXdLv&ywSxxtCDdm$@a(nT)!Sn=YMpcSkD-34q@P$9bSQIYoWqrvdni zxOmx~Ci|NME_c7cf4a>Is0G@t1&UKnHmhpH5~glV=)~}w+g*lzGQLQ)($FgHBF0O= zmZM>2d~Ppbj@m?>zUXfnbmgp84fXXCD_Ik~YSy}f#YkJr#Wbr$<78{bh2xDGHyIS% zTx_^+Y5SHKa~?L~ZrX(HRe+Cavi+}4MZdU7Piy77pi@9XZ8mtC>iL`uF3SYhV!|J_ zA_APas;heQf%GSAQeWMidC}zE6_({LCoVB0!t0Sj)VN4Vz(%Xft!+F#TZI98y_&ZD{>hh~q zw9BKBwA>!f9P@8!Ki{{r*=bvJS>2YNaV`udw1`Ys)o*`~z4!09@hOoXoXblEDJ!ydujoz$u>PJg`J*Fz#89IISW?SjsVS9dh4t7r}O#9#2og zrg=CKsz+d2s7f6<{E3ANBXt;lT_}x!Euyto!=6>4>{aJk%|$vZeOZ-EfZAV7ONEw1 z!-AbegcM(Z#RAxhUl)2dQn;)Bguqe+u?=UB00OEOzky$F35j4Hy?nm@^fzd)1m&%kZ;Q5@TUj5}-@C z;HSV0>qyZNZ0AO2;23e4QUY+j77sXltJw=;)&S@S1VtRob0sL`tPL$K007lSL6Nk{ zG8J%ssgfw%&44BH>Fw<7iZiMoH8s7Ts-*@IzJUn%wY7FTOr8TxDbRE;f!<|8e;&92<^aO{#b~aK_Yj~^@f*FLJZ>KmwiF>B(U!JFA60$r@>&LUb zxs^_1^Ciw*`@4|mcLNy(juEtOpPnGR<>C-KoaG1tMK;M~Ts|9vOoVt{4dxC|;yu2A%~HQB8Cb@$u0{RN2bT0&Mx3~Lc=e~j3FEyzOQ*hQ)cYYnH4QdT^J_v@x5YFka9ahOND-8=V zm0M@KSXBin15z|KQ8V>y-T~g|Yy~z!i~2dO->wliQ4)4i0zyXtf5me+=#2OPQpQsM z;$eu3D37p}Y-enL=vkbrVxg|#6PH)I)q{wwZkq!?8;rbUL|A_A7JCcS2^FD+TnA-}FZkhj=vDvOVm5U7lx}L4l9dp-!xsIg_&HzKPL|~9XX0OUNaRXD7#TI3y-dfFO zFmkN0^=9vr4JK-wU!7c|`ntuNfPw!j&!qiAGtf@V60vNA1N_vg>R3BDPXZuscv0TFpsZ<}B^{dOX z<1@=kU9O{|%Ff050KvG=g@&aomh1!fM6c7{L`v=JNL3c?1Bj(dI^%Z@(aNIz0FiEF zK7EMXyVt@CCHugA$%|~c`W|MnT&xe!U#9PVJi9o!4p1)E2k0R(WnIklBEDgyijsZc zzCJs_nRMpy9^{T(tPjwZ-K}s9pj@mE5cu^Cve#Y%Cza|0v!z!AT>~bS>I3uq>~eNE z+ZUVk`iZksx(}>fK??siucyDZvwClAF5Lt>o3Fn{nsD4*uKDbH^hQyv2?*L1!p1zU zJacZo#cK%Js?Y?!yL)-IC7FIA#O#U8Uy(_8BHC_rc9^rmNBx(4RXCL>Te*vEFj$Xv zY!K+RrZ*f}N8omTg8$FAZEPaJ7IX=6GFo;et;4G)nWSW{b&`9#1ObWi)Jsg}Uaat2 z-nYGd-mocTk!*+AHHZ;;a(bGP<1Lj4+T*?gjdj_HJp?{-ivU-15^A7cMz*XOoZ$_? zK_ldTW>NIW7$irr+lv%WQLh*grT2(8hjPK_l!2cYG{UldF5Ux4^pjWX83kFgvthZ9 zL42lXNFK*PN%Rw_rBome3BJ=i_wK;yN=HMg36C!ulw{lqnWbZgB@_IjJ54=|z}<*5 z>}KqAE-o}SnaKsgrAK$pfA7O-SL^ zl4BWi4y21h?M&E91Ny?Yy z^ycB&?RIAS3;I%w&Rx%lL}6F=$yeGsb;=rViCc- z?bV9erJgI6a4JPLvbp>4#j7o{NE$eYy7B-U1Tz>m zG%7x5ns*sbSKUHI`$bmmTW@`uuz%C;bkELs*s16%+MHMtVhlu+o4v>oAO`>9OfWSx z#lA>-zPjg=43sBpDs@*T8V}_QiIoE8iI?yb!iH3*Hhe>P5a>aio3(Q}vJjl0e zr*3!I#F>{Y(m^1oB)_9dhC$Ml5Iaq1T-GBdfg*Kkm5E<>IevZy*1@qa=r6q%f)TWa zH1E7rtSQ@0YheNzFE!ywqmE6_G0M34;EIW6-M7Kc_Qj^Eouu1b0g&r_d)ME2We2Q` zsa&L3tvrB#_3B~@?m~*wvx|3+M%1k1qwq1igM_nToQ<7?77@p2V*{6+lBlq!aCzs+@k$AwYnA{OK1U2 zQ|fH_Um67M8^|+uT9;%fsJ3sba#}~$+0bCXUT+)IdFj9G^qDcUhxju$udeYO8o7pr z>Fhyad47yRTX_JAirFaxZ2HMdZjYT(-yuN>T?fE7p~sk8CxqHx;m{9spzn z{!eI#Hg!n{ylyybAHdnERpD+|R!;a*E5R9K^FtUBP6P=^(ldBSgux_H6NVuq#RS1| zi2@0imq?y9NPO6k2!Cdr+uq1R0#w33f%GQr;)^-91Ms*ordt?lAoY_dbY=Rz*DEq3 zBY;PvVMj)-i)8t#v&ZJ`zB${*gw6z|6CQlhvb{xP-E2^H#sR#S7N*u-$4GC?i7M5c z2Zef{eSy@NUY-APFg2G^TK(93QF~|mJZDriw{Gq60uWq+G}3hv!;DSXAjBY_5-Kcq zvbs?K;gb;qLyn547J*w6x8XGt9?6TH+yeDU{>AA@?uf10K`9vxUE)fw^gnge;6NbO z>-Yc$7+p(I(Qb*+Q|H<}Dk07yn$XW)f>4^A~G_elle> z3jWM{!o{nEgYfuX<18oKf(@Wo9Y=>wni0ba#Ty55gszI-hzZ>c@i>qW<77ZwT#me=sSBpd581V{KgG4!2KEn8zmoia8PFdPWVPvpqw^}sy zq^HaY!)(su+j@yX0;N6`DFeVsEYMZGumz*Y@xKNtE=VQ&SPw_MN#^@|*Z~`WD`M6K zjhkW$1|!kIV15H@Y@xpaoMBnXvdl(=VmAS-woYiyNTa^=ov)71UazfPp1owo1|#;} z(Whuv&YdEi{^v`-+>=`@Z1`1|W)f-Qwxrj5GW!5$qOiZtH$Hhiikk~*ho)yX>dc=# zb4tA#^U@^=x(eG&)xn}X(Lfq{XPUMY;gEr;No_+_=zC7urX7?(^~TG!v{{rm)F{`} zL1c=STUvuD;|Ms+rc~3u}L7yb#O6zDPR^U9fx737SNmWqei8S{V z>U=DlB6_LGFpAKn7qizm0z1D3O`Vl+LLG4(Jv;#Qzi?k-yM6sxPq=xXL>W`8^{=*K zx`eP95CiHOTrun@Xqzanhg~9-;X^B^_f)Kk`8f`JAsqqkmz69823~kZjxKUJj`B=U zJNi^qy!=Lf5Y_QWdW_8KE6zcAVs1;Bfx{G0%vV0OzV~8*o72NqvTq|)yQG7{D0@$% zufN)T^40SfFCXnnN_YeA7= zL$0AY!VLP09GySM)gW~Ikk`7Gc_!A8&tu?>pXYI9`<-4y_c_i4(B2ez04>efE?vEcB(? zXA2#P1VB&V&CAHJFT!jW=|1lXGAi==9{w%kHXZ)^#qu9yr(x%lolo(cMD-fY;Xk`eYN4 z5b&?Wm#@}e>dV!mzqjAN{`;q$4;;oW26R~B9>MuzaZ^W3&}aq!tG`;a75Fdz`l-aN zkSz6lYz{RyWqu=X5k){vEn=LU)BcWK)$?qHJ~nqA#rf(KV!?aG+`|Xn)m*gViKG9B zn%>+CT1qz6ATPRP_IJL~A@_!+b~US-4)fZYxP=3ix2;mT!AgOl#oRhlLa*Yrrjn7^ zG<@dHiEsw}D~>(R(8(5<{x`L$zPNdA3vy3#kYa?RTpL0T8P65R$!vBGna*5~#Y4o~ zqZH7KQ(WKO15ABM(jLoeY~AZCWYVV=^ze*H2832@L<{&;Kpx=~CB>Y&8MUeW;mHLg zL_6-Ca*@Tc!Qz-gdEIC&v`w~wtNl*T;5Iba+$HPZ9lJH^u%qZj#c*--g!_!8JG>-W zH1q*`2=ovJs{xmW$=GKnuPtcxNMBm%R^RL^2%{`_cH1^YQ2q zBQ8&CAi^Ck5u{B#*ofmvZ)|vmanPu7itrGrmqJDj*#y_i9>5#w64tq>)<(mw3?v`;65he}nanq24Nx14D{`G26hdqO*%AB1_kk$+h~+*-ms zX{slag)VNy?NPz;`^tl}bGp!6Q|E$fYa1^gt-pGN@?r@}9jwCWMH3ePt@I=q$2{f= zksfkBu@P0GFn$;wiD`v?Yo#`al`{y;O-T{B>2~vjxI=*WV&P z8Rur(w()@fv@~d!%^FNphP$Q4e@*H}Z<)Q30XV;35$P?Z8qDki;B)(rIyfH8x)v5R#bgY+!v(389_ za<^zGZ}lF#8YvOOASC!VG<63BFM`S+2nz-|v-AvtvNDoTCPGT@3CLDVgMh3|2T*#i zfFym*3NmzD15DH0z$t%rF+%C-@!2^K_AJ*u4!J&fttKRjx7owRgT!H9K6(1&)qgUD z*q2WqL3`bI_fP)zas%)GvHSkZN3YiL<&#F0^{1O(%eO|ghmXERtxr*_!#$P<2InJChz zn-Ly>z;^YtouC}}$1q5^acxgCLq{iijv+e|roWVe#bR53|N3M}UMTa1BMVna`s znOH=3|3H-nyq779&wIeLSy~X<2g9*4W47m)OFlO(#p$;n~qd)=~ z$ja>+2z^4gj9Vx9F-;A;TGhW3aPar#4>I$HpS*F(hAY1%?Sq~0^z3N1kL@@dsKYEh z8Ly8l>&F)wyMIG7%A&4&Y9@J=`;#SQQIH3cF6>gzLD<7I->pw>bVy2tE0 zRIkO|@k#13nINsa0KzE@znnl;evv&!L#9B^=r_Qy2~WvI|e2g<&!MEDqcvL3P>iW-P@ zL=Q-b7l(?6@VRs3jCpS~$g=~+%b<08>;g;Tm4aGGgTUU~_7^b}qYjh(?#&@_j~-&zW|5yEF~=c`bY z=H8MRehtp{V+rFoM>L195sbZ64q&O``Vf|2?Tik>Kd?ZQc#x{K;=}+WL;fKi$IEmt zJIeIdWBd;}t=+>Z8W-qjCjwaUdj7L2{OgcUU~|JAczvUe<(a0)+`O3KZsyB(QRLP1 zLC~0%frYjmn(&&K44cqlj~qi23qY%uwIu{lw@B?vFfwksN)ls8eKlMxh0LRAD|Az% z*5k6KDw^gnFki6362j>Fzs3(p{mIlI=!ROX7^zSVbGGD%C|>SqDum))SPB*I-&i7t z;-#*dvXxV|>Bj-u80~p70bpzaP^4QepqN}dD~io2)@YbhG8#+v=!&U^M#k>V#8TC5 z;*w?(Chf?xHGTzr;uuk{$KL~(6|f1e6tfnTCXSx|#pq>>5%9~b0y9#$W&kUP)93=qLT!qZGM8A99kEds%{gP zm_h~jGAIMWo($N8x5Oy?9H3Ez+r_K_qlsNg%Ch9bAMo;5M9QBBFiNnx=+w2FxNKRv z71sg!GvJezjeCCvuyJTzWDHDS-6FY3me9%Tvol=3VKYb4Y<*C8V#BrHWGNL7y-Dwc z3%#tv>rx1u2<f~H9fE3?Q2q!~#9V`dF!_cV;ESHx!`S^>uD=y)D=D)Z+;9`#tvKTvNN{O>mwTZQSe7`c6 z6$Fc87LiPCe1`uIyrDnoK1v_OM~ed3X^zRH6mWdGa&>X6NJx?rZZ2V4mY`;ud2NMT zHz)x^POlPz{t=bSWu@LNG^XPRSDHibpNA9Qy0FltSSpIsq0Fe?SK8NG8Mal}O{rWC zx^+V>_2)!1)EkyJu@2-AobLRs;9O-FT&N-XH7=cHEv%!Y%Q;zkD@+?B9L$q3?hqta zO9aW4I1)W|BoA1l%7tew?W-78Yvx8c(fp(JU@2}Xy_7xV=N5 z1H2sfk|$S5J@pDr(y)9<7%x6R7FH^VVl3=cafBYJHM`_wy)yacFg;nmMNMz#CbYD0 z01NepGdYZoMN^Qf7L?P)y;EPfIyr=cI!1(xnLBZ#j9b&>XsQKz=5l@@x}2%-vfS$> z1gq%^0v6x)U9RtzaTx)TPi>3ST66CtceV(VG>F?+n@;WgR&~rq$UDxy{V>O#gx-<{ zX8vqX98hBB4zt=31J^cpLZ}m#zG5EQd#8`o6vM+e$^fr{?s+ z((;x)xo1?d(J;HfE*Vjam5+pDI-+c*7h>oJdBGLN16?b8^u=1*nW^|D4o=Hpk%2jx zoz70KPLgA+5J7PAv+6tNYUxN_G4P~)T5(SrZek_ax&}GWP)w_lM0Bf9z{%G^JT>( zyid)i`|6_m@QytpCBu!3RzlgqON#)iv|>DPdKR>l`&qJT)S?&}y@{e2!zHc6ag*lg zht$i{<<<)BPu(UCYKhsc7ksOSH*I93tU8yK`so%(`C>y^)AdHCKJY7S{GofD(qN#H z{HfLb6q5)@kH6rZRI^A6hSzGgbzV!*fLuJ$`4n_g=i52De)%rX9$G+gtF8ZH=UTCY zdR2VxhHENPC*{Ijtgv|<2F6xHaHF?|93dx<5maz_#t5t$AFCF;0NOC#18~|3*Oz1@ zoe&hMs*t|Sg)+%dkXP**stHOU97}|ssYnCgP9H=DIJVVl3Jm@*ySJi8->0?wbpXbe ztcx1el_&!>U)e5s_SqEV8>pEXrqOPsB=jWz8eQ+&EkJ{MMFgF@HHJ)0V(Oo;>D(8P zo73`8x)@*#yB7P;)6>z(Yz`a`XGd2T*oj8^UVJ)0NHX&<7Sb>}LN1@vRWc^|%JNgW zwoq29>-14=aPv=x3dwiVCTd`|_*!|GS$b2+Om5G}J52H|b$NBC2Svi(M=xOUK_)pJ zJcERTC5z+TK)VU?JyHvEoHJuWlU<{hA2F?NuD}Qo)!o$xKmy5*j&QbLuKt^hU%i>i z2I21R^Yv$swl>!{9_{XOe{ZL%YN;`>ZH)_tkvs|8rw4aOH^hrx5afa&8$R0oX6w<* z-G`5G@#+Sw;)k3a@u$;B-MC-Q*z8r@Wh*I{^fv_ZMl<0~3FrC|$iz==-h|j?a|s0O zM_3!Y%5Zcu!Z*+nTl5;@=jQql@_}eH@VnFa+12soEH|9Fy!vnx!dF$_i_2>m3v+p0 z(TS^EUVjZ2UiOU6?>++SmM13I-vnw`HeqgvMA2h7Qk1zZnA~ zQEcztM9+4J@(5-9SG)$pebgqig*yF<$a+ce`uw)gyW)0HCTZc7wt@cg!P9lp8`0%)RZbf zg_bijut}~Y`WkXQ9A_+G(n2-cy1<%i9Icg>H)Ufuyb`(s)4uKuzfa7curC%iEN7J_ ztn}z;lQR-#VoKKj5C?>$9M%tWWGRSk+guUv!Xk$M*l)%@w|F8N{!oV8qk$cUJl?SS zVLvmW;4ZFIL*fGFCgg$urY!%D6cU0~h#0vn+u%aDSYK%%m)(KUYQLvxx+w-0 zFt}s}A#(`_OlR&h2F=1(4Yv-SG93D^(IWQb7YII`Z= z9WNzX(XxEyE?L4-S6fzr9d1E|&c-fg?PYcB{Hyr?Vsnq=?#9%Vm+NbVTc_%(HO6$u zmp7CPd?;V;jImChosQt^8_nOy;Z=rhpX#P30ybCan&UVn?6q;Qv@Mv0JF+LSz)>RY z37dNvN^HB6?ilMXBxyq-v?{0hpt&Luzx1o3DopyQ*xFE5sup0MFgUo_kIr3f zgXn8em(JzL6};^Qe8+TI187SD$c1DZ@R~AV?{8t9>4%kX-PtsyiL=S`kv3d$Ldx{a zk^Fh*4q0L6&e~{ob@lFO=MGQ|zY;R`?$^6Jr|`unpYXV|kGv_1TMezeJ$3@%WMZLs zkQ3UYa$gk;=@k-LF{MSu*%GH2_f8W6xr!3GStDyqo*N=Y|a1$b*B^F3J8owp=tyW}}9qQtnV)2-qo0vqC@JFB(`X%P0VJlf980V^bDp+js1a|i!arC`mLXl!B=f8 z_+cU*B|2bm2>8lH!EeuV}RS&RSbMfN-X z@~=E^GXCb(29Etixx#qI01yGlQBKKM(%C}GwvuMQy5F7nz6NEVmw|zqXpPFf1a1W% zb*J&8QgPRl7qJ9Rmf?rjrGJdZG9 zSVnhF3I#e%{>88EO-+WVk3Geb3)JU0=7mcvH`F+0^mUoJrwhjedJje1hhoW+Aw%f|gD}nAo`*lEqdI{z?#I zd17c5%F-T>=RRi$AMc-JdIIx0!Y=v}c@y^Eh)dX+IW1Pay{PtDp5aJ2n|EqIa|{Qp z(19A@OlUhKlkv}!oz;K&`JaDX{+PFKjaPr-oLJS70Z;BT6HaSd`eNGo_h>eeRb6$# z6{{Qu4dIl;qSw<>gr=IhUFF2UQmT3v})CI6vzW5!~ z7k(YnfR<1n%~Pdv2d$dzRVh;2s1Qu3Ge#MaB}5z{=0U^xSAJf|J4RC;`RN=iIFSxq z#a^Qw0_J#u!vZ+{E=DeX1*aK3mQeC{M@L9_S31rdDLEHB;d$e?dx$WQyv8z;R=_fd zve{>y7nN2jwlREXV#4z#D`Sa6^wZ&J zEqdFravLEx|38T0A8V!{CeIiszVZ*aq_yFKF`w}E7+!5?%N5Z^P|8-e_5k-5C)+Cx zr2AQ#9QB@>B4^49s;|Z5({a!jgsizl8$FE$acKZLiPC8Da&~%!^g5U(klz+zm@_UM z4ql1$cso8-RGgZQz-YON6SZuLS0kV`b-^_dYqr^kA=OD_Qm2_=#u;9QH}G*JS*z0o z>5Ppf@Zs#IVbOekg|zaseVt*Xyw|o-SiS`V%X9g?FT_Yg@FO9j-!p94m5?EB+Cgnd zyMG_viF$Nh?3(1}`15}^IaBvkHej*f#Gmde+Ud&?#2 zl0*T-xaKC$}T#?dtzjC!qEM^s>p^IE!9hh+*)i^MRBm+GK_^ZmydB79Bv1#iaJ!Y z`aNRjE1cGXhi0+Dn-Y;wm2KkCzD-;b2X9`S?W4^{KTY>>Vi+y^pAKQ@wX#Gyj=#=B z(fUrg!;jtI+J;k{`!P`It+J@XPcO}0NZszpcvKy^Yt|oL86i!{K?~TM?uNZv#`bsw z49`JwuVOeTy@4I*3E2OU4h+)NHSq1qZK504QH^@!5-N^& zcP|hFx4SEG?aZNaX5AIXh~@gB;;g|Mt;`pr#x`{D^z`jyyz%1M<_iXdzkKoH)$X^C zUT!^k@!akyvU+Iyn$oZ_;6y!{`4JsxspR4?Ae{0!ZUx1Sg%G_@Nw(hPQ4@+`WYIck zheNMuC*$OggdC!QA}(bSMRBY-tb|VfU1pXHdHl)h{nh)tm#rppN(5;P8ro&&41}&4 zj3i;!%0UPyEVIDGG8u4Hg!Iw3#@yyjKl0A4teO;mIp3L@*Nx8)1t$(StflvkP1CY7 z=N83*{T{Oww;(vujk-H4pukh#V)?J3lP{zA!6pEilaCMU)zK7wof z1M_*~W^Er~__=WD4(9_L-I%~#CQPq0z|(_D87UXP+nU0|B`%`sMC-`oL)Bkw59x9u)P=39AS zU?;gN!Z=d>+N1Cr$<;MkZX7D2`4z^)w3+xm_BA@0=f|Zf2nhTV*d&re@15}~t0sn! z;mi=qY5-ZV9H`b|IZ=`Y3zRLr^kf$S&s-e*Bf20Ay3tLiJD-kpb>CbU2cB8x%=qF z)6wd!@k8voy*s-a?d|U)yZ0$0?cV9O9o}AyI8Uaw_6~V)7_o<3(aR2=X|^w9Qa0C{ zPrW1nWhkja-LlY;L{h0dq;;8k49l@o$t60NKgAGhfOL9|yo*%guB(j4xkE6^YmX2`61E13>&VUJBgSogs6=RnCW1by{Je_I9TLOxYVV5lu%7D!00d z*_592vx_ZWs)=@m&FqHFpK%xA&M!N^e1U(-OYrC-qB=7aWhA5FFv!Yh7tj{gn20P6 zN;g}WeDT@s?|<2w|FZr0gU?2H;Sm3buU3|~?~cBke1QkPxP6yJmX?K~3)m5X)CMuY zj|zp*eZ82vC_=WN1I=Uvl(2PG?qC2Q`Y8Wy%jov^fBx>HFaC_vBJMpM{{kusQ|%%o z0TXc;&aDrfwL-DC3Kz+IVU zrU}q>l~+vira^tQa#{WGn>nv5Pwu9AD+XNJdNdLz27N{fk3GOlDBa(zR!3DfnTzjw zFJMyV@VBr$u)~E-!u9M79zGl@x@)xY^`niy?5;n33Nru6@9EK(-#q{F#W&9%?rywz zzV+(m`jh9cwooYD@vMdL<;ljYstj*?b{jTr9ii+`x3?; zULMkKK^&@#HqnJ$ZL9be7be3D65Zttah(r)N!mkU>@xrCo@n~BptOAah&9s0cq1dSEs`@WJHd9tgNp$xH8$`Kxx-kmu1zJGUH$EGm zv_)y)Wskidu?&`{SAKlBp>rY}_;$8?) zCi#!e?zdL9Bo=Do&2Z>hT5SW5pwuebgW#c+1&>`qYf$5f>te~$2ZEUSJ)X(QVWH$k z5T(1=mcC3v0O;&gVi*vhg&c!r>YXz52j(A+p{~{!c0%jm76QcQ4PZt(v`0k_8x^Cn z^4-Ub1gnZWc{PwjPOWweiTavY>fP>V7YM4WaTmujf zO6B~B-G%}tDfE{_*g60C`LFoT(_crcyG97%bK8z7NgQHz!S(7dNs)m=MXNrUfH=5f zG(KJ(!QZGu(#QItH`l{xutFMJrp*Mg*ps%z*zpYtxrqzrt=74WH#1x!>T;&F2G42S zNOlNs0m0E`ZzeU?K`IVkR+Ri_Eb3v?V!*d)i?Z)3nYcT6UfW zebvuTG)1Hf83GbId^&n_d3k=1|Cx`zdHHnFp2tqHPMhP~fPLNYr7tLZo4cg5jWY^HUrH%FT;Z%FPr2#2DN5lzONJ zr2EFhkFy`>x$?vIcv6DlVRo_4F9&D)Qsn|fSN#ATRw;&(nh6P`CfB-AMGTh?0u^T|f3c~~dHc;+?&?6V7W}Mz(#T`O~#)?)w%iKx5kunASZh`{Cc5>nAJg?!Sukj z=p?X7_Iis(*3E?LLNJs)xT_x{JRDhDf2sYO0zE`SwX|6(QOytr&Xxwbl$gJ^y=XB_ z?v3*~;CAIxPkw~m)q7YWsc+pt^coAPMJRaipcOA{KukM0zh^N{^rp{~JxD(eLiu@m z>k|89c-EU|v*SW=fzhCob)1b*2i4^uS&)t}^(=sz_z1c)P{e011vBLadyJUWAk2E} zuN>SI4-0LL>KvF{)0?5P7q$u{(`=;v(MzQ2q3{;2JdnMMTn_tN0UBs_0|!dNy?-37 z@p#mZiH$Xr{xjHih_0P*Q|)Ht0m^CRgIy!i>6SZR)QyKbLvdB>+FGwCRt~^;bQN~F znUC7#j%Q=!N2b%t1KHYQ08vN92&gC-n{cvVia5#M=e4!Xr|YjCzj*m<7s-VGvi=qB zyLj}~qyK;+a%qwCH8y62zD{U$$!w@J*ljLKJP$2M9M_>d89zOsj3h<_9fwHR^;2I* zK|i}yGNv4!`(#-N4oxhiu666m1LKFGvL;=1cy^52+mToc#vFKb-{C?{iALg#$N!0eq^bWTH!lyD$B1Ey~D46m2 z{9@%kSE+pX2R_Ko%gNq3pLyO%)~?f^m_9+%Vv5+qd7rysf`g5bO014|@YmJ8y)I*AR9rWvgtH}X)9Dko zVw`Ek?H<`6mqC|llQFUu`D(?xiIZOkxEck)!pQ2ao#S-k<7%XW>ylg3cM*(xa`tvQ z3Lr1fMpx%Y7uYKWn2}s?{sC>@LbadM6=%L}Zx*HqP5(#ysKhKs2hR53{EG12IzGoUA$T6bYF zX)O_08$EJEnQmlh7;IvBea=D_w3pIKmkWl%)^vu2jjk)oY*iqfG>ha!O zj?2XNbc5l{Bm~@J%50q>E!6QtnCAX{u`~aj&?8iRv`Cf#3x-OO|1xaYAlD6k+}(AC zYnw0OT|#i+(ex+$i-j6?&~dIAeW}vzYfl}7ttKLjR99>sBY_1an>`#I1BhUSPL_sO z$4kFn!EiMWHe)owHfsWoFSeNJ*^b`rYQIAzry{^5bfLfX&)k z9`op&ehO7!VT~Qv2MIIv#(9*HC~zN!xK&{vY&+e|j)`4^daYKX>F?o3E~XwxGvYl_ zr2woZzcq`pU-lkus2VSPL zULdki+)|c=_p=5CO568|a(hF(f+l4N4>xws8@DEj%gJ!qivKK)8@Zj^D{D zZ5LS|T<+9rGEWc-A!&p($~Xv2w#An>XK>=H9cK+xhT$xE6H8Fw80(6qhNMt*KvYQI zDDw~uiX!C@(=~>0s-R%^6%JeClo|fv&#J_e7dua0q@+^%acg>fAY^92RierNtSDu77%9;OW`^57P^aq%M8#A*UR2Zlio2)Y z1VEghVWWLrzSZ?!D8}o>neHex0xiazO5qK$WH{)?9ymYs2|cS9d-1SHAk}DTc6K+V zALFqR?e*PoD&4xnHJYcPvR8LU4K4&o?Cbl5KB*)YyUHLW>V^_P)6c3p^Om`~^5^8% z?6k~MotLS20|8cOyiQd(LMU@`@Q>VsZ(y2AhQUJx-Pp!@*t*0qy$*s7G%7O|M&v`; z-cI`4Ne!DBlnG*C6{c`X#n{5iY?g_)CKzG$Fc`xdXJCl9Bbt_V3w41#RwIi8>77%Csp{kPaa=VNy_Ouol-5L#E$so|(EYpFv>vIS*CZ9EgMoF0=kDd_J) zuOMP+x{sqKv3tdio|6j(0}oll3>2fv%UdgI>Yyzzt}kfVaE`PElu@3U`neG%y9O5A zkW)}7nH_GkXl$ohKn$uM=4Th7X9h7?36vFK0l(F+>J;}ZxtGDeS{=>iPpNT{smja% zxBFf6R~}4%!fgjgW7(Wsgb*n4JX@Ux5zHTw$HiH*rE>=RvHU7R|uHi}dfV)aNfbxp-k_Gx@) zOdAM*OR)S9;b}pG)3H}{R64_AbetZ%Osame#7#b2y7F@RH%e}D$_d`2cqUOb4DQlo zwWR6-WRg&zOb^U=%906g95VBe1ysluK{iMoB9kkL)-cZaxzV}gep4_XBaBP5Q+j^Y&( z`snPLw;xwlPS4nx5$-KQDXthMG2B(Eh3cqbS8b(B|w0&h7XFDu{FJHd7=)u36C^Mbz+d4W68#5 zNW=4PMFLHslS&*r-}4al5t3W7Q_l+~C*YkZ{pc~k!?aab7zAEUMphySH(X3r2K00T z4_do1$co$3vmX(Wxaa^cfE!{Y8RA$I&v5gv*WqSD{{p+O7cj>^cx++cOWf`XVr&#* z7sE!8>qmIqGSn?NxP1fb(I_?9();T%d1^*WvVuAI63UfSSXkZ%L%8)h&D+DKbeKS& zo*m8hgVln(pX7D1Sq^z{V|Db+sl-KK%A?UMpD{uDjI0)h>yQ>wS!M{COaG7_-6qTM zPtEfPwMsM+^_e2HktU8x(`<>HG|ssOQv!?l&xdNiChw#T5=xjFOL{34NxDNc6=4O< zkbbH#rb^ykl7hr!poGqNm{3VeSWptvq$h-5VRu4}Mbc?5vA74*a|Hcham93K2!)b- zjacmd7gn4!LiR>KoSyx7ibHp>L^wIWe*L(BX{>l|MwpULM{@_Jch{p=zlk|Z+!6q`E!1vE$2I1I5DaTO47~&R9v1}Y0+F})3ccqSpw^6opX@4ul?S~W>Fk(@2c(yhF zADkH9$%nkS(Qz5nz z^|x8jF@iOWFmuHQQ=O!;gP|LVCgIu5Z;D>yd+K5TH>*pklH@^ctA37-m#b5r?C6$( zGTGd_grB6aRP&aK9fNW=Pab`LL;p!S-c&p1Jxh!iM)d@mDBoU6U$D<3RFAV}VdDz( zlrH9#2R~lSE^XltJOTx1EQ>E4O{yj4vs(&?>G)FIJ)c~u1&3GDR+zgblc1e9oH{q%`6PkYq`p-QiJG5d5id^Uq+nX5zST3C+1;fOLH668!=1?W zTNUZ9`|+loAiVR(`JEBmQ*eoRcrSe#bSh}{LJr6#C2;_Sv#nOPi^Gw+@qD_^e(A`n zlYHd?|4ljtWVH=u7EalX3jIdXGo=m_sC*7jfTX3+;+FY@_IiAg%-{lcN|PcIm54o? zLu(+tHjl8SmtfB)VTWW3P7CByv_n`LA}ldL887Rl2;KelQT_D}?LDWytjkrUyVyH;Ku*lf-Km*JOOY5qOSV!q@-b+9R3k=z7X_yAZ-o*@C z1t9SJ@?xJO1UH@fkXX#0ITpnJzRGg0NI32c%5MdOwC)O!eZpdXTL4c#0smLF;h+?4 z1tT_SN02Lm8w00(#x$lBYSBxs0{pHY?oI6PBFOPn?}@OcRkL7?2d2OQiqC0WAM?=_ zZ5#*NK@-U}z7f^y3`G@e5#FzGj)X!HSxwoCUqsjsV5@QLQOxw4aV+ovm*!n?9evg_ z<90GWl1qEXZ;sFzWh!Cam(#;`qxdkz)mg&aWYLHg@1_sm|Mk`!&Y%4^n2vJ8Y-68y z2TRLqw`}isZEYV>O{b4=Cr4%(IWnrsfHcQ0DR&Tf_Y6{%0&y%|jz%k|pNv*kV98xx zzWe--u%gGSo8@lV+8XZt-2<%*4WNi*FiWte&#w@qBjY9F3?L!7G}Hbbe2o9Qa=t1w;5J>h-d8V_j2hx0+*dJQJ|0qm<3!62-ev)+s4KIo7r1# zy&YfGeO2M=_)%jdj2N>}>&7uu@G?0VpKxA>@q!KA^7com#_=%2%&K!1w8yllDB!U` z@gjprEP^uDx~dVo5^&2s-H3iulN{~4^^3hhnsnk?34nM)6jWAUJg8B7*UUOaC*346 zYntquj8?fc%Y*;+)rB=Bby=-!P-??M7$47Y4DRAxFUA0o3DJd< z`rd~E(RXDDTgx9~NBo^o)PMBBW0$;4>BJ3_a&9Ksu>#L%a4bdu*dkt!KEfpx-~Y1B zv$FS?UwvnFXY~ud^jFC3&!5fr%OCy9`_#wxxNx%ZaV&Yi(>?RsHdq1#dh`>LvP^8* zDoQYr$CcueJPeRUp>&66upV0f(lo0h;F>nz;IBAB{ycz5g4jjoy4t|UEN)TKI*WpD zz~lj+?nEoRGb{-WxLy3Zko)=xOcgtkuo}ZW*DrusfYZe&L%J3dOle5Zav?YPxo(p6 z0zME8eCmTiG54Y(R;9X7BmkzbexgP)Dj1<RnHEkyvwt1U) zq#}!QHgQUo8hl*@c$6BW}wc!r(BYmcyfy#|KJSQkJgeIz4FCTZetgI~N$V_Up6sbi&nnL~?a zmo^BUtlqZOh`O6l;g|3FAyj6u!s(i<7^#T<=8loCl>tpXv5Qe%yNMAfoj}+c3*_}z0k81Z#?cE6 zU>Bix5ey(5Mia*;r{YZ!zl&2Y`eFi>@iozmzrBqHzZETX5p6+fV*0#vp-q-5pIX4Q z`a)!@R|ELg?Q~J@fz`x%y>wbRiKpho3P|sjC5g0`8o;)O-^I3q>#*oCt4GVUlh54l zeS!f|OxXcxGX{ukvI}gLP*h=o;>CZXHw?3Yxzl~ij#sCPvBiZcdS@mco-U?`G?!#) z!jCkU*j?H2lNE0A>tts!EO2a3^ z@Eciclp7218S1tcKKhz+TP{rJo~U|+xc{1d*f!X`uq9dQTN>hJ9Kj3UB2+3Gvas7(09`F$Y zSrN|g9byW`qWpKU`~GHjc*%=N?9KTVP7cAf%j&YWWEf*=frOC%B@Zea)R#B7FAkDc zoY{qSq9@|sg`>i0pBts+PtLm?GB2U+RizS;2KlR%2V}~_OnM7!%F3WDhQd9d;EHf` z>JnHRJUPH|$AjJyKnEpyKbt?i4?b#B^!w|xfcseoOPO=DuOW7%8z7=iy}ml^TDMMb zS5bURJZ#tYNQ+TKt_Oxv1LKq0OsmiZKt9uz_F&0}Sh!x>4;H$v7glDt4=l7;4_Gp~ zAFl1hBAxY#cxW_Kq&g+rQuP=Cw`GMT#JZhgUy?pFJB-{by~SF2fH}jqjhAYPcwXWT zl?qGFp<;OzI8-XH%!W$AvR(|gyktq>NW5BEK^WYg&uk%7Zj>y{`UJL7u(YeaWL;34 zD6a4)S@$P(9?#Yf@ma2#`%pKAj^-VhK8#T4o736fuBPQQ(16vk#QQ+*?p~f*2A82O zDCaLwuwzvBHH^NzLh{u4IgU@ikQ1AtPi`7$0$$L#ke6p?m+L&TQU{0>FPT!>4#2TO zV}h=U8TY|kRj?dpt1oE$X8Z6w`tfK5H}}V{uSt`Ie>GN=i*P=t-1srD5(<|}4M2L< zIuzFrvRixrc2a2hAX`7=y6^zpG_`Ib?S^v6v(2*CW9T{S_^ZW{^%}y>>SOLfHZ>1s)`Hg{n=+tKWXu>qL|dS396EsSt1uum$-*(3 z>{+~5Pa~;#a>Nex0YZ=}7<`D1zv^isR-)vj;sd>?l()4t_kb+X|2@rBRdLa^ombXM zLycbVOONA|tj^?BA0nNuKdmDYk<){}7Sv!L1z6A5up*9;{y^q}U<&BFS_^>jrL^ls z>jBB|9_CRrkZRkA{;=ce<<#FVU>+rpAiOQ7vy-cnGuVPnq3@glG9s8!!)4&D|B6N!P@h^%yX<>@JoOszYhw$XOZ2oKaM{F<_V2Q#ONVM-HojkwNO>qA6N{H5jWD`n zl371slV6fj`Ip0PU=<*DG3!ETVz+Kf5+jlcUBD}gp{|;yL;Ls+t&5IN z1cDSBGRmG+meVu{?{>c3pYMEq^bk3ZI|q%B3-vi%x=&tIwYR1xDC`aD;R5b9>U&#D z>+7oK_4!w&1bC6>?jFghJDzSTdL%`*-XbYEntXf8pUws5=rR<(!cEyYKBc1#f5yDeHJ=a{w^<^&3`7{Ed|3luMWmLmJ8&qRLma5RQYKOr$HQC2y+~S9jm#1|h3MVHxjq9h6 zeLV9E*sVEGG{5HF>?M;NGi`#cwCtj;`-(F0noTwN{A=8ut1@akgvrCgC#pp(NnDs1NG$Wn%cdc3mMj{8ca zhqjO+Jq%9>3CIx67xSdgN2BG@N0XfivL|O}6(|4)3r03y&AA+QDT7%z%SE9LAOdyApvSKes|$H(@=4I-T3SMn+>r5uSQMvLYnAg~S;+ zw0d<+HDlu^y36FYSNj?HQg^19@g;Wvl*Gz0HuFb+#AT5OGoCL0GArmaaz3lh_CVYn5NX0_61yj1;?M#r;#<#`I?34ZL%n7yMx<5rS84|iG!XSXy@ zF=ff+*efEz_;rcVZBJa5eJL=bPDl1aE!CjKCI#8J-dTuN4YJgLQi`XYlxNVAJH;XK zLF!Ua`g$6eW0*9wZ3XG$a|DkseWJQYpF)gw$P<1^rkpNVc9WF#P#m945 zs!o_>MTx4bru5V7IW&-F13(u(*hMmZs5fm=Vgi)#Og%~-{!OO=&!ciNx`R+}yZ2r-=Oni9+uOygXyn3JEwQz4C1=j=+DG?V`xYpG@CJO zn(k>;9-S6;{j#caLoiS2Q)ArH+q90 z-LyiZX3Sy948C+cJw1|aO`BhD?ml_`YWLatf1vL;MsQk)n5-8#W+H%=zOO(E8L!Sx zR}OUB{(DlvyMVm@d0}p@|mAOA>EK79PovAuV+9meM=5ER8_j#fX^S zjb5*g#><)jDM1p8&@vY>wn8Soo`#rHt}+}?aCzPI;uppv{_xAe^l%SG9sYegJw7}C zg&CJtS3j21I%>%9GImpEo%QIFA%U7*L#9BNuz)AnF0UCsL$*UkyWwxnXK}Vp|;NK z->M^x8i+CxR$W}e5WNptk3 znQw>Ev|sJb6$FL1JM38({f0J2{}?LoLUn!c5Z;Ikuvc-jb{`Es*k$TS@sao2FA`O8aJ+G4by!{g37HDG!CbaLFoexhGDVU&Tt+taa>SfP|? z5_Zwkf4f2`L`p;HlTj=R68!-t5e~P=Tg-{ciW_Xsr>ezTtV-ub{R7+OYH6@d7Fevk zP%^j0m$cJ(0toG3+G4`X@gF|J?+2?N-J6K|%#_At`HQ}DECoBh){>4dXVrU?)sL2! zKf6a*e_$(=Tp0tI>g1e|H5wI+d_+taCkxiFv9;Imok=P~U#LutKAgOA5%D@?;*}o- zGVJWEHE-fCgJb7Ui+IeW+y_rMZbAPp65gYHoQ&!iT$oCbsptjgV&{rxXQw>yFGT!l#I|&US1+l z{fF;~;l^KV>Q3}ZzX*Lh{?IF>t}6uDN1Kv4Zn$kR(rt9F11e>8Ka>Bh_W-3Ko}e(p zZF6si1!|gG@I!Vd&-oho$%kFJepS4L{0>E#T#A{XSVJH&>kM`7L%ql~)_At-tOeZi zzrr;+f^{k{`Qu}3EBwp^x3dez1 zD%ht&pbdH@V?brv#enr`;NTd#9G{_;=bbN*SVZLExN-`sK`jr16ae7e@fs6EvYrd0|LhNWK0;mpnbDkN1 z#DX(3znF|a|D1+&qi1PfumPCDo)+0z|Kes9*ov5sd;sBqOIz;f#}7x#BgzpTBUXYZ zBGQB+C?x(*KY1dj@l4olQiII@4Hsks1`T-bB!w4JIdl+XWR^?aDinz*6EP=m2c(IQ zwP?HZ;_iVEh^Gof#JqyZHC6#Z5CgnjO@QI(DDO_f4g@z3EsC+iYlfRhIQ>?4Gsm8*PSvHroLn! zA)!)#8Gn}McxTFtcQr*C-|}t!*HXbRaSQSZ?jJnh)v0m-%`q~~nYE;h@T( z4ya>Rici@8vpm^ZwSb9bMohSgxq6@KTVUKBt$c!Kv0A+u{Xyf^o594Ayv1V&2^ix5 z3AJ4T_Kt`(=}ptC%E*qwHX9f#Va9Xpu<>Yqnj;1WJ`OheiItPymq_NL7Fn84PjD;u zY~Q#Ble8?R++4-wUZ`eV$}XyIGt<9SnSnf`f1u4RgCp|@cUA81Jp4jJMOu~U2jIY( z=4=+ZZ_!8hVe0>!Zgy#)uTF(z9s30*t&*QIA5OD1aZDhIPZrR$10y79RpL;32$9W& z-Xs?xxFaGDnpHQ@v zK@lpIXa6Gd{%s7Ur3i;bL@dq^3%U@Fua0J?I~#lF#);%9`NJ}PdLh|m@<$;3pYr1(kZI}HwdeaH)KF}a!Bgc_E1O7rdj03{UsBeft{HfIC`I8TP3 zsfb|3kJfLisYvp@_uVa*y5r#FCnQ(3vufT7bZv-$GT?&BvT!P`P_#AZvBCb@h6_e=&PKy-1y{s^J(+K(G3^X}&1?x96+Pe&vyws%$uulOOwV z@@B=_9d6scUIz)`47d}jV4W>J=d+QV-Gwu&D7v8IPM9i8+2JusP!v78v5X2ZAC`tZ z8Apegv$NtT^wIIz>%HU52ce{yIj~PfD#Dk8*_<<}vOX2CpAHCR&ZP@MI~UEuHw~{X zj-MW6Ag0C9Kc8n{u<5SD@!ovCf$Nb`1FhXpBp9Az0y9!p?#dxdig*+#@A_z|Bn8?r zhh4k3vX)eXY<7miXdulOPI$id=k&4DOx18ISkRy7z$MnP4s9yx;J8%25i_zeBU5i$ z61y}MGEoG>wS+{wRn1|637^)vbYDr~y_F?(mQG_&dLl6uK0U*Q#rdPGQ95no@ zpg{vjNxTe8XWx3xad|WyIH`4Ea%j+g+M6A}IDLklyV>c{21QfC??eYsDi&oODR-{Z zf()W26qFSbZ2{3;D@qJmfYN^|mt$?%M+ya&Qqe0J;h9?q*1LEp5nTBLMs6es)(x!e zozD=0&b@Y)Q+y<|B-}DwA~xF2C9~!yGpFD?j6OSgyHlAE!~LxEALzOmXEGr7yowaxp$Wxl0|S;UaOy!aDVc2#M6! zwuQ~iQ)J6hUV^m+dyD=NS1hew#IixaXJ>YI@grUnGZ}yOSy;HTXA}cr=-o1Vf&$fEL9SG z()&=l{D@=8^B-pC=jh1m>HZ$=B=pgT6&!3*0P{I9^F&GRg;pLP&HNV|Ez6uI& zEYdal@eLMqdeinX)bNo81Y`xM(rs!GZqiDkT%UojR8ZdRy@l)`0}>`F9L~hfEyhbF z3o#PfDI96w5JIM|#Hw9Y|L~Gjl9_Eb-&NaGy~w$Dyr{bDFwBc~Q49w!bXL13>(kT$ z+C|y)_#bF5A+AKX$Z3Xd;&I}>bosFIVDF%?ol<9wKg`NyA4R+BW^z@jvYu|GtYn+Y z`FS}}FrqSqopaHh9$3+y`Xbade#d!a#uB8p7(IN_3p$A`VTRYjE0Y|G)Y8%Pbb7Ie zFod2l^!yuNc{!OL9cacM!17kAfA%)TT&Z3P(cIM`af{hbPKl`b9#?&rUAPO)kqIl) zVE(!C0N27>yPcZ2b2`vb&x9I#ciLErxS<-=*vZ~G$&_ejaR}>%ABgT?;FlA=(qRT` zU7eh~<93hCkFw{ZkJwHGN+O$2eVZ&cu#d^}a;l$rM)mtaGIv)qO0BJsjYmnXq!=bv@i>n&7BBy0mw^Gyiz`3!a;wBXU+i;mu^cDithp zIkmbBJ^Sm)jAOj?iM&M^n(Q=lg}!@vaz0-5;JmQ>hd2_AyMmKrRBRURs;h7pkl*fI zVBnY)Sm|hiC6+yIYLS_u0P@|%ApgxfXD z5aFC;Wq`*hwOZeIr|D=(dR7fy_D(I0V!kuSgIx3(W<1OZ_Ju(@sWI|kGGGPcQYcj# z&E_r;%gqC{no}4@Sy$vwt`?FFq$l7__lMxc)2LD$9s*;AdTB+iO`}f>qEn&?$p2l!7PV5Yctz2eBkwBl43&2M$o9>wX?v%`^i#v7h+k&6b4SDth_z(Ao4Aa#sX z^pwG-nSvE6q-? zDFOH@Y8UA3s0E4R3 z2ouarVs1|l2FnuBszHcts+;>^ubS3-Dh_e3fPsV}Vjd=vik1qk%NIR#i>yJSspC+# z1#Ez6r`h7D2%61)L%q93Lg=vERj*_4l!>p)@SWT)k2Uj%5tg6c)HY&ua_Wt&o@*rn zMPM8tYXxJHE(e2tx=27D3eWCsdrw|-QZ^KyHB!&*Rr8L%j71 z3Oeh#k!7DLMUWDT7KI`cle0psj{`FaBRzltw*~B4`a$z2KS zr8PW5xCuim>3+>5K_}sRmvvF6Gm^qhO+#$9G=}$1_8m`u!j^U3Dlv*7z+Y4Xu9%~? zmuJpfX+&PU{x5vdby9jM{eoN?5KiwJh{*tdkJDpK?ULA@xkn-i{RP7pX-7z1E=oEi zyfv1hID>^eZy5!B39t9)g57n*^t&rE{UA)D(Z++MUs&-93HMP z!zF!;##u`uks?bvD#CNtl3Jn-c#JR_69@Fh622j zaah40s^cuI^09t#v4?Yfa^N;MuJF8cZ64yUuMn4^Z_WMlldY2FA3~S+$Wd zvT{q`>HfAKqIr~c=+#jOalP&yi@JUKw^Q*`sCnwM6dNZT$+y4-_Gvmk$XA>P#U2Rd zizzTcNmLgsizouXyS;R*O2V6OsXC5yVWbJQWyOJ3bYi478VwDKV0U zwXxuhQ-pcBXL#oq9w`wkTd(A-kWM(MQ(+6gfE(8yj)=|-dD2a55-6;J;l$k98Be0k z^9FxQ&w zfJpjgY%gI8NzO0{%w^d%nlX0T^Q8dBpt05~q0Xw_t00@|{;E>9NO|>WfvSZcR1nr< zSK2XjSkxKw`Bn>OW*!7efQ(p#Q_XgWS?fT1)BPis~%1n;4R@PD5L9R>X%rY?%iFbWS*- zh;%%*!8*2F;2xxkxxcYc?mh!CSOSB+O?)F-NheH0aV}GzzRKHLoT0JDY-Ls+h=uDW zk?t*KQ`{j{>Z+hbl%;4~O6%~`z_@ZNr5+F|{^F1*mHjBI31PE=W`Uwzi>a(7{S?y) zrnKE_mYk9rz98)zc?Uyr1u~Qk^Z_JBs*%-faA^e6=t09Uv)Q7p=8g z^(moiK3rgJ_;z}2Z+>GDVN}=W4+=SWUr|wY!1)OA4!-cSX$90kOB#(}WLI%g`Kc#J zdIHjfgn=r#Yhfwz0j`kg9|Ju+99TnNRP}{3xngZFW)xH)Ue!!0-I#k3mqQjD%;v?C zaPS<_zs=81claN=6sjec(RN3}e-=nnV+Hk}q_%+%{(NnAIl~Fr5Sy2lXY19nEjh<{ z+ZXSlxw_yfncUCR08QmgV>_CUR*QGstgFt8bTZxtF9MH){%ZegF4WWIRsMqj_WMEpo ztJN#vabm~U7=1%_j$|4SXBU#|=$-2u?WGE+kA0dnsu~h8Mj6#^+eC}gNk|ppaM5kf z4m(JqafKWoZ>OonCpcrpFf%UnFW=l9Dzdir_{GzwFaCXZ>p!18ee(P-TO5^{)$g?6 zfc;;jo^Whf&ld!S7FGwjpuQXvDfa zmR{hiBJ_U_hCIDI1gl!3G)R<~VnvuCU%pfuKY24yg~KJ~Gj*_IHrQtunP8N9%bM+3GQ;p>^;l1K{yIBf$GR0#Fj@j*87{hjqZlE@%ug>4x85L*5NW@j@eDucYKF2U zhwgq~`2-RNw!s2W()fA0KD2;yE>|byj(JGi$HR_fKKafcPuMOhqbsx%;49ldIiI|C z-eHo8OC%x(A0f~_A}uFba2F78Pa?)a0CfCjg-Kai8>kC|br7RT0YcUiGbxv5qT>u7 zsPrJkY{DX6#hW7p!dBHSVBRc={C~NiHdJzPC)swxe^s(HCWm- zeI*ien+5@r%3EEkameMk;*~~()NMR4!9rr1&9WW+puAc{r?jBi^in0G=}}WVTj$4Q zF{&=ph5sLW@7f;Kk*tY+=T{W8JXK&y0_^SQY_$!I0UKtp(IddyyCtk$k_xG|bvsoh zFut7Me%?1Od0V+wl?1rEXU2P`QLU9LGcq!684(#todD{>xFTf#9>`w2qe6G5XDodl zSdlp*LNAhu!d2%b8b+f|!<@a5hw%iA-xbMBQ~*H6oU2OJgz=QwLZ;U$uN0s#=Qz4} zvU$vVs*i@XQ-g~lnxh)MD>nf}{A~+a^hdo2u?GqrPx&Q4y#`#YudO8#J0jwbzmNc$ zgI&Wia{~CB=qs|g(*ZEUu+K$nw`JGYVHeEC{5g=Gz|zHMF5I^IIFmbuJq}d z5$}i?XYiV!Zn6BPiyg|GFo|@HGf`fpPVLjpGJ_-I{8+y^9NpgG7s+><;}MH2A3}AC z!{mxp4{xYVwb_Pu`EM32KwbnT=U}_-6p&q0lNgn4EeHK?a0nG=c{qrqjGFR>)<>ClUBZ zqReo8KmZBFcl5oAuT`&fg@0y`Giu>ON~YZqI^XEG(T5-g$F&yxSbJw zF9Cz397_1wrYo{wGbEpqLRg#3k@4i@#dOT|2v1}sq#5UfOO9j>1zx5u&U&B5#@4ys zajcF#OKJp5ve@oKCdv@|BU#oZz?O z@cu!pOY9$_3wG;Am+}pRH=60Xt6Q}J1z2o<3#Y*eiVDSf#qCSZ!Br)5QloR)zz>4Pvv#CXaTG!+EpMlXWvNJVK=thU`C zo|PC#Xij-EiHN6YabnYt5wsO{vcNQj4YueBLG`5uE}99YhP@M}C?Y0cJNYD~LF-o! z#i#sha#L1aG4J%yAR5JF4VMX1FhaE?YS}dTGIC6P>dCG$PQPP)qJR^oCx)DvlMvbl zcFI`aN*2d2VWVYpc@86&W4F(7?GZErRSND4T-E*d)rUS@~iaj|}TTzri5)hHU zzuyO6%9l8!AL~!hAJ9cVT*s$Cd(eO~Qed$_vk^ZkA^MiRFV`)GRtjN?Hvoy5B-4eg z6zKvi1IE+$ zGT}~AEA(5fZ8A%nGbR)X#+R`7neGK@U6}YcK91kk+GfK=PDmaL8kXROP{6|20x^E& zVu|4!H5U9ULH>+`6W$0_Q)%JK&Ar+2?zUNq9t~)^qiB+cKhNZtt@TCjbC;1l(zYLF zd-aroi0Kjmo(2Gv|J1w5ij!2XT zQ^*>0*_`J%uj-riFq56zcM}$k%KN74E_rTo-2JhPv;Uo@%!R@1H35A%nvXb!J(9d5 zgjea7liVp8#$Ljen7;X1vZ)}GORvqvBE_trNYWLP9sl0c^U#r};abaa0=%g`S4~d0 zx6DiMm}m-+ZET7gO1HM(uD<$o``$fxXeBc+@{YxQ%{GEw^O(22z$kB z)KJZ*_y``<$?>51N`0q5D@{h}d3FyDRP67)phja1aX^0I#!M5wK{MJ;pZsiggkT9w zcY;3?Q=EU{*=pBVUjT)4#-C4*zMjaQU3|Co za9cl(hQHn#{`=~yKcxQ2umOj?UrE4GX>Y^dXR3}Gjh@uUb3EdGPy`xENzC#FcdZ?v z96RvNvq=13NlAPr*|G59*%*yB4`%tCAWhn(1L%5mzz`x>MFXfg2FuF@EMZT=9_!$$y!%31%5_ zj~QYU$ur;0OKP@CH#esEiSUDM28FJ51+#JnW+S`vCHju~P}WeGf7U-bby-Dw4g)1T z5Ij82)@_Pq!!{_QR)p78j5GyxVn{wcJ(%nT55S<`G!%JMTgtminNJrwIO{(;k+NAd z0i*&e(^_=E#;*CCvuqT6PQu`PnbCJ2@*hz%fi_$ zKF8B?Y{Im1csiR?xPdp5{RD`~@~FI5&XDut+R5#<~-83V4J# zw=##`B}SBf+=malcXoaxTbHgx8GJ*?3YX&+q6qRe4Pi*^PSQ(83IYeu-t(ARaK(2^ zEMn7Du~@$nIp!V>;{zx1UKZ76lmzRNQ&iH7Q^jNpT+}GJMx;ver2$s5h;Xt^se^K( zC{iMK9yK42Oem7Si*kD#tnAtV3TCpPrEiIShqT48pg9pZICNC8y`fB6@8DcVfWR9% z+$l2CzR|96qDOXg=hLytjNsh#t%N-fF6t2Kre`klARMcp-j325sKBvvVl+d9Tcww>rq)CG2l>a%)2IkB_b=d*f6aLu9-v)`( zF7s9pj(IwQ5BYR|@_I7fe{eY7``PKnQbBZ0N|DHQ_4<7|MHy@aHK6#IL5Oay`VKg#UpTXSJ`%z#Og0LmALp(+*S$fi`0x-gLJQM@u7=t_XaCGP2z7U676IDtg8N&LX5WlJ6r6`c$ zqTS_~5)E~EEQV-rZGyIpls&rGqE&sph(%@I>Pmp56hr(&S6^LvcNHV7h@=Z|c}JW! z`%E`@G!A$6ai8ygIACd=z-xvi;?RZFU51{B3tt1vfu^r94zi>q_W~8pY(+I!G6Tg!!bC_CXGF*1dsk&H%&T_+pF%mX@mK1Ke zdz#Mu94BASaUmGUMXBoZTXOxap}3TL+@GdR*g}b<4q6lppn)89;(*Uhoci=_TtDs9tioaDK;D;W88r&G zd`gG~PWJn+(%X;g`oRsRt}lJnx`*mCI&Iy(2V1Vjpjf}<29q5^uwFqi%MGyFAC6cQ zLF*V6--ub=04d>>B?pnxb<6gB@ioO9Xw13rEe2}AZ1`wd42KU)PP)8MCdjODvAC=R z@Wij#xWBhIKEtix@bJ+3@!hMfUrZK>BbABYfW0m zx(L}>UzcPEgAhI@V6-5tI(H=Vx+J57F)uS90kwPBLllk~B+ziOM46}zEm$5nU5xKx zmk+ML${!kC;<@E9cmR+6M>4x?r;aW1lLOO6NMx}0n8|%gJl*7j@;=JE+J>O;NEaet zOBP8?7NOXP&q{3=M-MEk?E9_0e7kePQ|m{QUy;52s-+F2hBMmxvRM#}gjoP+GFz2b zY9G@06a&=!vJnrZWg|Rk_F*P{bK9k0S~rVm?7$$<%cD#Q^F!mE;wu9m9}sPSw6wCm zrG+~cZ5p!d;7v@T^b|%HiukzT0l_(&_4V{Iriy;fPIE@1-Nh$7tgPV!2^~bUEqqcq z#!RlH$LDpvg@!PRu#|?7NxL_!bcQ7(ZK(RGyFGpGNqZ-CQmX;E$g`S!0)Q$QuQ^%F z@g`mzEop|U8F6bAWSnp&NF#S(`kTPem4YcTg$we^bGXtxF`bckZE-;L-$bq^v9LzD z=DyrO$db$`Bmql8!dx~=ET#gfsdpXX@}O1F5vxjY&Ug;u(0Uds zwdL?-@0s$xX4E=!7ZP`F`CG{cT+U^R5bRJ_Z}mRVYAUPiSTto^~Yy( z)T>e0k2Uetx{s2mcq{uzZOb)JaiCAP`UjKw5G!8*nr7EZoBpdbBE}CyqBnZsLQlu9 z$5UKAE=?RO-ZH+0b;H@!fI2)_2-D%g0+76q4+9aiikmPcxyGI7iC6Us5fZo zA>A=e&`KxGLcXbX7?c5h3%-R$SLzLMO;K??;0SIGZg78y#EMsbD#f~RNcqXNXPMwB z(ksYF0F!ymC4rX-$iTGcBEvKb?W2B+DVxi8;IY0Iwv0GzuvB;jQFVc}(0;m?p(=mE zctELyfAZz(fPHZYV_t)SW_B4#maHm-kI9wBbwiJVa6JzXDaRW8!!z8Y#1%CYPr{2J z0?(2Tq=a1QSD#*Ay`c%oE4QVVEG*Sj1=!*(ZNPf zjAK+6t2I}_2%Bygn^`mq(MOKyc(IMONkHdFV?E3%a#L z?wT;j@>)-_1I6$(s4o-CBW8-O464LhR}S;ZR`H_rZlBg^JRL@wiwT3ZErmvfo5+`L z3^;wtZd)~vM-q&(a-$-DX;8Rg%WY&ajFIn5497Qkuoa_58mRGAk+pEh#Mlc&LvDa> zbV=cj0+Zx?9%0T0FQ=p+YHJ~Kb3;pc=LoYuO+!Xao^Y6IfSdV{LD`ACt$uth!`jcr zuvOB(%{yns=CFvhV_10aHqDhLsV<^=?=ggs<3842IsY_?-oNE~HE7ReqazSJQPTwJ zAmLiEDnV4(Aom7|Oi`hW!Sv89ayk~r4!}AZIyTiI**;2DvU|o>nbq6UtwP&dN@Sg8 z*mnyxJ9^@KvM`c(tQr~nbD+Wb1SInwXQwuEr?*zt(OUQB_col1+f-kFr`ukar%QL2 zF0FLO48NkYWG_dFuhU1Y2d9NPvI`v}_@op77}Ue=+hw@D)Axj%qU~a0V%L+Y;k|KW z+Oi>bKyE>Gp!5OChzPfgPc+|y?|82RomHtDiUr)ZvO9psX!VM1I*PhMSX3xDQ6a1i zXQ?)>M?fvKe?b_k`I6r_W1l5ky_iVWbC#ngu0qYX52-GY5J~S+kdA|5-F*B=qP8KB zlW*a*khAI(1VQ}DcggMa9-zsg&td9kJ|6!1INGHeNJ_%!Nd?D$}V1@0vqbct z(LB>M>`%JAvB5qZcvc&bOO_S#u|SKWuyIa4K`(4IQdn~OAn|vE4Qsvw4{|MTl9%rw z`aS|FED3;PMi)@9V&u#DoX?KNZL6*~WyxMz#2t;poC{h=7VW}rkS-p2WI>A0< zILG ztd*V6Gqlg>XOz%1il&GLD*q>F;2W?-tx~B^1z!+7G_YSu{-acC&-vr*(kwm2 zdI#%foZAGTgMaHo`HIu0AVnUROEzU^9NiP*)8ZepVk%u*IizUP$9rtGBW+B73@NbA=y{}9P5rp4}bYZcP>?=a%c=WD^&Q4Kk z4#Ey3I4;@LU`!_u%2Ut1`@X6o$E9e{|3;2T;n;*baBzJ!7+)0EPKj4CT1hs<cB(Pbi)D3ePmGOdj*_}D^C~BCOhDqW{U55lGp>F3FQbj!1wfJ8p^Kd&gb*O+ z{<#(M|5b@dHma&bUq?^$7oRR7o^*I<)vs_NP)r$P_D)hEOpon)#uB80(GZn6RcCSd z+}EJG5F?GTVZWTi^v^~xG_RmsJa$+r2p$tAe zO%L&*^G%9%9Kt(vT0sKG;8vvp2aeNjHc;=lhKsV~!u=mKt9v2j89J;ZWa5h9ZsVy< zE|#Q)tpgwyv}~VBY|t{5(BMy;iqf=Gr4tiKEfW2QDImI`af^_B2s2UsOKU*l)~UE5 z2t^>jM!CiK80H=Sa}I>5XC46f!>rFT2Qsa2XTJ3GE3p{WHcub7uv;>mEE7LTC=2>cOiyF2%>4DTib1wS`i7B)~c_5Gk$73>97p)LWi14Tg_=Q6yzU?i1JF$2|w zVVs$FY-?%rwIq&3lS7o>9pJG(jJm*u_-r^PeX4n!N#W&|$^q1(!flhUL4v{JdWCKf zM8Nj)Xb0y9r#sYhJ7&4dKNU`$vU!bTrVc&c zcb;1pv7JRTqBg-%UYGgHXt0n6-o#Hyahxmv@4}{oNYV*TkWX<1?0AV=T}w@9`V=Thip>kEQc809sh!u2*hJFFJur8Y+BL`K~Z|tucXQVpjB^g+)%h|lr6$a^LDsZ zs9~R8?pIci@v=dE)qQq1GVsbEv5?wR$>@+WD=noIPsKhJA*h0!^do+%dJbM5sj{w*Lo^Hwh>;PfbbEPPNa$}E1imU9kCQ

?Cr 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%0Dv4v$_Ri3Ddr6(2h;L#Tr`H^?|FB%*es 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

-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 literal 0 HcmV?d00001 diff --git a/index.php b/index.php index d67518f8fd..ec8dda2b82 100755 --- a/index.php +++ b/index.php @@ -14,7 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +ini_set("display_errors",1); +ini_set("display_startup_errors",1); +error_reporting(E_ALL); define('ABS_PATH', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME']) . '/')); if(PHP_SAPI==='cli') { define('CLI', true); diff --git a/oc-includes/htmlpurifier/CREDITS b/oc-includes/htmlpurifier/CREDITS deleted file mode 100644 index 7921b45af7..0000000000 --- a/oc-includes/htmlpurifier/CREDITS +++ /dev/null @@ -1,9 +0,0 @@ - -CREDITS - -Almost everything written by Edward Z. Yang (Ambush Commander). Lots of thanks -to the DevNetwork Community for their help (see docs/ref-devnetwork.html for -more details), Feyd especially (namely IPv6 and optimization). Thanks to RSnake -for letting me package his fantastic XSS cheatsheet for a smoketest. - - vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier.auto.php b/oc-includes/htmlpurifier/HTMLPurifier.auto.php deleted file mode 100644 index 1960c399f8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier.auto.php +++ /dev/null @@ -1,11 +0,0 @@ -purify($html, $config); -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier.includes.php b/oc-includes/htmlpurifier/HTMLPurifier.includes.php deleted file mode 100644 index 18cb00130d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier.includes.php +++ /dev/null @@ -1,222 +0,0 @@ - $attributes) { - $allowed_elements[$element] = true; - foreach ($attributes as $attribute => $x) { - $allowed_attributes["$element.$attribute"] = true; - } - } - $config->set('HTML.AllowedElements', $allowed_elements); - $config->set('HTML.AllowedAttributes', $allowed_attributes); - $allowed_schemes = array(); - if ($allowed_protocols !== null) { - $config->set('URI.AllowedSchemes', $allowed_protocols); - } - $purifier = new HTMLPurifier($config); - return $purifier->purify($string); -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier.path.php b/oc-includes/htmlpurifier/HTMLPurifier.path.php deleted file mode 100644 index 39b1b65319..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier.path.php +++ /dev/null @@ -1,11 +0,0 @@ -config = HTMLPurifier_Config::create($config); - - $this->strategy = new HTMLPurifier_Strategy_Core(); - - } - - /** - * Adds a filter to process the output. First come first serve - * @param $filter HTMLPurifier_Filter object - */ - public function addFilter($filter) { - trigger_error('HTMLPurifier->addFilter() is deprecated, use configuration directives in the Filter namespace or Filter.Custom', E_USER_WARNING); - $this->filters[] = $filter; - } - - /** - * Filters an HTML snippet/document to be XSS-free and standards-compliant. - * - * @param $html String of HTML to purify - * @param $config HTMLPurifier_Config object for this operation, if omitted, - * defaults to the config object specified during this - * object's construction. The parameter can also be any type - * that HTMLPurifier_Config::create() supports. - * @return Purified HTML - */ - public function purify($html, $config = null) { - - // :TODO: make the config merge in, instead of replace - $config = $config ? HTMLPurifier_Config::create($config) : $this->config; - - // implementation is partially environment dependant, partially - // configuration dependant - $lexer = HTMLPurifier_Lexer::create($config); - - $context = new HTMLPurifier_Context(); - - // setup HTML generator - $this->generator = new HTMLPurifier_Generator($config, $context); - $context->register('Generator', $this->generator); - - // set up global context variables - if ($config->get('Core.CollectErrors')) { - // may get moved out if other facilities use it - $language_factory = HTMLPurifier_LanguageFactory::instance(); - $language = $language_factory->create($config, $context); - $context->register('Locale', $language); - - $error_collector = new HTMLPurifier_ErrorCollector($context); - $context->register('ErrorCollector', $error_collector); - } - - // setup id_accumulator context, necessary due to the fact that - // AttrValidator can be called from many places - $id_accumulator = HTMLPurifier_IDAccumulator::build($config, $context); - $context->register('IDAccumulator', $id_accumulator); - - $html = HTMLPurifier_Encoder::convertToUTF8($html, $config, $context); - - // setup filters - $filter_flags = $config->getBatch('Filter'); - $custom_filters = $filter_flags['Custom']; - unset($filter_flags['Custom']); - $filters = array(); - foreach ($filter_flags as $filter => $flag) { - if (!$flag) continue; - if (strpos($filter, '.') !== false) continue; - $class = "HTMLPurifier_Filter_$filter"; - $filters[] = new $class; - } - foreach ($custom_filters as $filter) { - // maybe "HTMLPurifier_Filter_$filter", but be consistent with AutoFormat - $filters[] = $filter; - } - $filters = array_merge($filters, $this->filters); - // maybe prepare(), but later - - for ($i = 0, $filter_size = count($filters); $i < $filter_size; $i++) { - $html = $filters[$i]->preFilter($html, $config, $context); - } - - // purified HTML - $html = - $this->generator->generateFromTokens( - // list of tokens - $this->strategy->execute( - // list of un-purified tokens - $lexer->tokenizeHTML( - // un-purified HTML - $html, $config, $context - ), - $config, $context - ) - ); - - for ($i = $filter_size - 1; $i >= 0; $i--) { - $html = $filters[$i]->postFilter($html, $config, $context); - } - - $html = HTMLPurifier_Encoder::convertFromUTF8($html, $config, $context); - $this->context =& $context; - return $html; - } - - /** - * Filters an array of HTML snippets - * @param $config Optional HTMLPurifier_Config object for this operation. - * See HTMLPurifier::purify() for more details. - * @return Array of purified HTML - */ - public function purifyArray($array_of_html, $config = null) { - $context_array = array(); - foreach ($array_of_html as $key => $html) { - $array_of_html[$key] = $this->purify($html, $config); - $context_array[$key] = $this->context; - } - $this->context = $context_array; - return $array_of_html; - } - - /** - * Singleton for enforcing just one HTML Purifier in your system - * @param $prototype Optional prototype HTMLPurifier instance to - * overload singleton with, or HTMLPurifier_Config - * instance to configure the generated version with. - */ - public static function instance($prototype = null) { - if (!self::$instance || $prototype) { - if ($prototype instanceof HTMLPurifier) { - self::$instance = $prototype; - } elseif ($prototype) { - self::$instance = new HTMLPurifier($prototype); - } else { - self::$instance = new HTMLPurifier(); - } - } - return self::$instance; - } - - /** - * @note Backwards compatibility, see instance() - */ - public static function getInstance($prototype = null) { - return HTMLPurifier::instance($prototype); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier.safe-includes.php b/oc-includes/htmlpurifier/HTMLPurifier.safe-includes.php deleted file mode 100644 index e23a81a71f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier.safe-includes.php +++ /dev/null @@ -1,216 +0,0 @@ -attr_collections as $coll_i => $coll) { - if (!isset($this->info[$coll_i])) { - $this->info[$coll_i] = array(); - } - foreach ($coll as $attr_i => $attr) { - if ($attr_i === 0 && isset($this->info[$coll_i][$attr_i])) { - // merge in includes - $this->info[$coll_i][$attr_i] = array_merge( - $this->info[$coll_i][$attr_i], $attr); - continue; - } - $this->info[$coll_i][$attr_i] = $attr; - } - } - } - // perform internal expansions and inclusions - foreach ($this->info as $name => $attr) { - // merge attribute collections that include others - $this->performInclusions($this->info[$name]); - // replace string identifiers with actual attribute objects - $this->expandIdentifiers($this->info[$name], $attr_types); - } - } - - /** - * Takes a reference to an attribute associative array and performs - * all inclusions specified by the zero index. - * @param &$attr Reference to attribute array - */ - public function performInclusions(&$attr) { - if (!isset($attr[0])) return; - $merge = $attr[0]; - $seen = array(); // recursion guard - // loop through all the inclusions - for ($i = 0; isset($merge[$i]); $i++) { - if (isset($seen[$merge[$i]])) continue; - $seen[$merge[$i]] = true; - // foreach attribute of the inclusion, copy it over - if (!isset($this->info[$merge[$i]])) continue; - foreach ($this->info[$merge[$i]] as $key => $value) { - if (isset($attr[$key])) continue; // also catches more inclusions - $attr[$key] = $value; - } - if (isset($this->info[$merge[$i]][0])) { - // recursion - $merge = array_merge($merge, $this->info[$merge[$i]][0]); - } - } - unset($attr[0]); - } - - /** - * Expands all string identifiers in an attribute array by replacing - * them with the appropriate values inside HTMLPurifier_AttrTypes - * @param &$attr Reference to attribute array - * @param $attr_types HTMLPurifier_AttrTypes instance - */ - public function expandIdentifiers(&$attr, $attr_types) { - - // because foreach will process new elements we add, make sure we - // skip duplicates - $processed = array(); - - foreach ($attr as $def_i => $def) { - // skip inclusions - if ($def_i === 0) continue; - - if (isset($processed[$def_i])) continue; - - // determine whether or not attribute is required - if ($required = (strpos($def_i, '*') !== false)) { - // rename the definition - unset($attr[$def_i]); - $def_i = trim($def_i, '*'); - $attr[$def_i] = $def; - } - - $processed[$def_i] = true; - - // if we've already got a literal object, move on - if (is_object($def)) { - // preserve previous required - $attr[$def_i]->required = ($required || $attr[$def_i]->required); - continue; - } - - if ($def === false) { - unset($attr[$def_i]); - continue; - } - - if ($t = $attr_types->get($def)) { - $attr[$def_i] = $t; - $attr[$def_i]->required = $required; - } else { - unset($attr[$def_i]); - } - } - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef.php deleted file mode 100755 index b2e4f36c5d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef.php +++ /dev/null @@ -1,123 +0,0 @@ - by removing - * leading and trailing whitespace, ignoring line feeds, and replacing - * carriage returns and tabs with spaces. While most useful for HTML - * attributes specified as CDATA, it can also be applied to most CSS - * values. - * - * @note This method is not entirely standards compliant, as trim() removes - * more types of whitespace than specified in the spec. In practice, - * this is rarely a problem, as those extra characters usually have - * already been removed by HTMLPurifier_Encoder. - * - * @warning This processing is inconsistent with XML's whitespace handling - * as specified by section 3.3.3 and referenced XHTML 1.0 section - * 4.7. However, note that we are NOT necessarily - * parsing XML, thus, this behavior may still be correct. We - * assume that newlines have been normalized. - */ - public function parseCDATA($string) { - $string = trim($string); - $string = str_replace(array("\n", "\t", "\r"), ' ', $string); - return $string; - } - - /** - * Factory method for creating this class from a string. - * @param $string String construction info - * @return Created AttrDef object corresponding to $string - */ - public function make($string) { - // default implementation, return a flyweight of this object. - // If $string has an effect on the returned object (i.e. you - // need to overload this method), it is best - // to clone or instantiate new copies. (Instantiation is safer.) - return $this; - } - - /** - * Removes spaces from rgb(0, 0, 0) so that shorthand CSS properties work - * properly. THIS IS A HACK! - */ - protected function mungeRgb($string) { - return preg_replace('/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)/', 'rgb(\1,\2,\3)', $string); - } - - /** - * Parses a possibly escaped CSS string and returns the "pure" - * version of it. - */ - protected function expandCSSEscape($string) { - // flexibly parse it - $ret = ''; - for ($i = 0, $c = strlen($string); $i < $c; $i++) { - if ($string[$i] === '\\') { - $i++; - if ($i >= $c) { - $ret .= '\\'; - break; - } - if (ctype_xdigit($string[$i])) { - $code = $string[$i]; - for ($a = 1, $i++; $i < $c && $a < 6; $i++, $a++) { - if (!ctype_xdigit($string[$i])) break; - $code .= $string[$i]; - } - // We have to be extremely careful when adding - // new characters, to make sure we're not breaking - // the encoding. - $char = HTMLPurifier_Encoder::unichr(hexdec($code)); - if (HTMLPurifier_Encoder::cleanUTF8($char) === '') continue; - $ret .= $char; - if ($i < $c && trim($string[$i]) !== '') $i--; - continue; - } - if ($string[$i] === "\n") continue; - } - $ret .= $string[$i]; - } - return $ret; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS.php deleted file mode 100755 index 953e706755..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS.php +++ /dev/null @@ -1,87 +0,0 @@ -parseCDATA($css); - - $definition = $config->getCSSDefinition(); - - // we're going to break the spec and explode by semicolons. - // This is because semicolon rarely appears in escaped form - // Doing this is generally flaky but fast - // IT MIGHT APPEAR IN URIs, see HTMLPurifier_AttrDef_CSSURI - // for details - - $declarations = explode(';', $css); - $propvalues = array(); - - /** - * Name of the current CSS property being validated. - */ - $property = false; - $context->register('CurrentCSSProperty', $property); - - foreach ($declarations as $declaration) { - if (!$declaration) continue; - if (!strpos($declaration, ':')) continue; - list($property, $value) = explode(':', $declaration, 2); - $property = trim($property); - $value = trim($value); - $ok = false; - do { - if (isset($definition->info[$property])) { - $ok = true; - break; - } - if (ctype_lower($property)) break; - $property = strtolower($property); - if (isset($definition->info[$property])) { - $ok = true; - break; - } - } while(0); - if (!$ok) continue; - // inefficient call, since the validator will do this again - if (strtolower(trim($value)) !== 'inherit') { - // inherit works for everything (but only on the base property) - $result = $definition->info[$property]->validate( - $value, $config, $context ); - } else { - $result = 'inherit'; - } - if ($result === false) continue; - $propvalues[$property] = $result; - } - - $context->destroy('CurrentCSSProperty'); - - // procedure does not write the new CSS simultaneously, so it's - // slightly inefficient, but it's the only way of getting rid of - // duplicates. Perhaps config to optimize it, but not now. - - $new_declarations = ''; - foreach ($propvalues as $prop => $value) { - $new_declarations .= "$prop:$value;"; - } - - return $new_declarations ? $new_declarations : false; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php deleted file mode 100755 index 292c040d4b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php +++ /dev/null @@ -1,21 +0,0 @@ - 1.0) $result = '1'; - return $result; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Background.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Background.php deleted file mode 100755 index e5b7438c21..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Background.php +++ /dev/null @@ -1,87 +0,0 @@ -getCSSDefinition(); - $this->info['background-color'] = $def->info['background-color']; - $this->info['background-image'] = $def->info['background-image']; - $this->info['background-repeat'] = $def->info['background-repeat']; - $this->info['background-attachment'] = $def->info['background-attachment']; - $this->info['background-position'] = $def->info['background-position']; - } - - public function validate($string, $config, $context) { - - // regular pre-processing - $string = $this->parseCDATA($string); - if ($string === '') return false; - - // munge rgb() decl if necessary - $string = $this->mungeRgb($string); - - // assumes URI doesn't have spaces in it - $bits = explode(' ', $string); // bits to process - - $caught = array(); - $caught['color'] = false; - $caught['image'] = false; - $caught['repeat'] = false; - $caught['attachment'] = false; - $caught['position'] = false; - - $i = 0; // number of catches - $none = false; - - foreach ($bits as $bit) { - if ($bit === '') continue; - foreach ($caught as $key => $status) { - if ($key != 'position') { - if ($status !== false) continue; - $r = $this->info['background-' . $key]->validate($bit, $config, $context); - } else { - $r = $bit; - } - if ($r === false) continue; - if ($key == 'position') { - if ($caught[$key] === false) $caught[$key] = ''; - $caught[$key] .= $r . ' '; - } else { - $caught[$key] = $r; - } - $i++; - break; - } - } - - if (!$i) return false; - if ($caught['position'] !== false) { - $caught['position'] = $this->info['background-position']-> - validate($caught['position'], $config, $context); - } - - $ret = array(); - foreach ($caught as $value) { - if ($value === false) continue; - $ret[] = $value; - } - - if (empty($ret)) return false; - return implode(' ', $ret); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php deleted file mode 100755 index fae82eaec8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php +++ /dev/null @@ -1,133 +0,0 @@ - | | left | center | right - ] - [ - | | top | center | bottom - ]? - ] | - [ // this signifies that the vertical and horizontal adjectives - // can be arbitrarily ordered, however, there can only be two, - // one of each, or none at all - [ - left | center | right - ] || - [ - top | center | bottom - ] - ] - top, left = 0% - center, (none) = 50% - bottom, right = 100% -*/ - -/* QuirksMode says: - keyword + length/percentage must be ordered correctly, as per W3C - - Internet Explorer and Opera, however, support arbitrary ordering. We - should fix it up. - - Minor issue though, not strictly necessary. -*/ - -// control freaks may appreciate the ability to convert these to -// percentages or something, but it's not necessary - -/** - * Validates the value of background-position. - */ -class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef -{ - - protected $length; - protected $percentage; - - public function __construct() { - $this->length = new HTMLPurifier_AttrDef_CSS_Length(); - $this->percentage = new HTMLPurifier_AttrDef_CSS_Percentage(); - } - - public function validate($string, $config, $context) { - $string = $this->parseCDATA($string); - $bits = explode(' ', $string); - - $keywords = array(); - $keywords['h'] = false; // left, right - $keywords['v'] = false; // top, bottom - $keywords['ch'] = false; // center (first word) - $keywords['cv'] = false; // center (second word) - $measures = array(); - - $i = 0; - - $lookup = array( - 'top' => 'v', - 'bottom' => 'v', - 'left' => 'h', - 'right' => 'h', - 'center' => 'c' - ); - - foreach ($bits as $bit) { - if ($bit === '') continue; - - // test for keyword - $lbit = ctype_lower($bit) ? $bit : strtolower($bit); - if (isset($lookup[$lbit])) { - $status = $lookup[$lbit]; - if ($status == 'c') { - if ($i == 0) { - $status = 'ch'; - } else { - $status = 'cv'; - } - } - $keywords[$status] = $lbit; - $i++; - } - - // test for length - $r = $this->length->validate($bit, $config, $context); - if ($r !== false) { - $measures[] = $r; - $i++; - } - - // test for percentage - $r = $this->percentage->validate($bit, $config, $context); - if ($r !== false) { - $measures[] = $r; - $i++; - } - - } - - if (!$i) return false; // no valid values were caught - - $ret = array(); - - // first keyword - if ($keywords['h']) $ret[] = $keywords['h']; - elseif ($keywords['ch']) { - $ret[] = $keywords['ch']; - $keywords['cv'] = false; // prevent re-use: center = center center - } - elseif (count($measures)) $ret[] = array_shift($measures); - - if ($keywords['v']) $ret[] = $keywords['v']; - elseif ($keywords['cv']) $ret[] = $keywords['cv']; - elseif (count($measures)) $ret[] = array_shift($measures); - - if (empty($ret)) return false; - return implode(' ', $ret); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Border.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Border.php deleted file mode 100755 index 42a1d1b4ae..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Border.php +++ /dev/null @@ -1,43 +0,0 @@ -getCSSDefinition(); - $this->info['border-width'] = $def->info['border-width']; - $this->info['border-style'] = $def->info['border-style']; - $this->info['border-top-color'] = $def->info['border-top-color']; - } - - public function validate($string, $config, $context) { - $string = $this->parseCDATA($string); - $string = $this->mungeRgb($string); - $bits = explode(' ', $string); - $done = array(); // segments we've finished - $ret = ''; // return value - foreach ($bits as $bit) { - foreach ($this->info as $propname => $validator) { - if (isset($done[$propname])) continue; - $r = $validator->validate($bit, $config, $context); - if ($r !== false) { - $ret .= $r . ' '; - $done[$propname] = true; - break; - } - } - } - return rtrim($ret); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php deleted file mode 100755 index 07f95a6719..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php +++ /dev/null @@ -1,78 +0,0 @@ -get('Core.ColorKeywords'); - - $color = trim($color); - if ($color === '') return false; - - $lower = strtolower($color); - if (isset($colors[$lower])) return $colors[$lower]; - - if (strpos($color, 'rgb(') !== false) { - // rgb literal handling - $length = strlen($color); - if (strpos($color, ')') !== $length - 1) return false; - $triad = substr($color, 4, $length - 4 - 1); - $parts = explode(',', $triad); - if (count($parts) !== 3) return false; - $type = false; // to ensure that they're all the same type - $new_parts = array(); - foreach ($parts as $part) { - $part = trim($part); - if ($part === '') return false; - $length = strlen($part); - if ($part[$length - 1] === '%') { - // handle percents - if (!$type) { - $type = 'percentage'; - } elseif ($type !== 'percentage') { - return false; - } - $num = (float) substr($part, 0, $length - 1); - if ($num < 0) $num = 0; - if ($num > 100) $num = 100; - $new_parts[] = "$num%"; - } else { - // handle integers - if (!$type) { - $type = 'integer'; - } elseif ($type !== 'integer') { - return false; - } - $num = (int) $part; - if ($num < 0) $num = 0; - if ($num > 255) $num = 255; - $new_parts[] = (string) $num; - } - } - $new_triad = implode(',', $new_parts); - $color = "rgb($new_triad)"; - } else { - // hexadecimal handling - if ($color[0] === '#') { - $hex = substr($color, 1); - } else { - $hex = $color; - $color = '#' . $color; - } - $length = strlen($hex); - if ($length !== 3 && $length !== 6) return false; - if (!ctype_xdigit($hex)) return false; - } - - return $color; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Composite.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Composite.php deleted file mode 100755 index de1289cba8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Composite.php +++ /dev/null @@ -1,38 +0,0 @@ -defs = $defs; - } - - public function validate($string, $config, $context) { - foreach ($this->defs as $i => $def) { - $result = $this->defs[$i]->validate($string, $config, $context); - if ($result !== false) return $result; - } - return false; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php deleted file mode 100755 index 6599c5b2dd..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php +++ /dev/null @@ -1,28 +0,0 @@ -def = $def; - $this->element = $element; - } - /** - * Checks if CurrentToken is set and equal to $this->element - */ - public function validate($string, $config, $context) { - $token = $context->get('CurrentToken', true); - if ($token && $token->name == $this->element) return false; - return $this->def->validate($string, $config, $context); - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php deleted file mode 100755 index 147894b861..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php +++ /dev/null @@ -1,54 +0,0 @@ -intValidator = new HTMLPurifier_AttrDef_Integer(); - } - - public function validate($value, $config, $context) { - $value = $this->parseCDATA($value); - if ($value === 'none') return $value; - // if we looped this we could support multiple filters - $function_length = strcspn($value, '('); - $function = trim(substr($value, 0, $function_length)); - if ($function !== 'alpha' && - $function !== 'Alpha' && - $function !== 'progid:DXImageTransform.Microsoft.Alpha' - ) return false; - $cursor = $function_length + 1; - $parameters_length = strcspn($value, ')', $cursor); - $parameters = substr($value, $cursor, $parameters_length); - $params = explode(',', $parameters); - $ret_params = array(); - $lookup = array(); - foreach ($params as $param) { - list($key, $value) = explode('=', $param); - $key = trim($key); - $value = trim($value); - if (isset($lookup[$key])) continue; - if ($key !== 'opacity') continue; - $value = $this->intValidator->validate($value, $config, $context); - if ($value === false) continue; - $int = (int) $value; - if ($int > 100) $value = '100'; - if ($int < 0) $value = '0'; - $ret_params[] = "$key=$value"; - $lookup[$key] = true; - } - $ret_parameters = implode(',', $ret_params); - $ret_function = "$function($ret_parameters)"; - return $ret_function; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Font.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Font.php deleted file mode 100755 index 699ee0b701..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Font.php +++ /dev/null @@ -1,149 +0,0 @@ -getCSSDefinition(); - $this->info['font-style'] = $def->info['font-style']; - $this->info['font-variant'] = $def->info['font-variant']; - $this->info['font-weight'] = $def->info['font-weight']; - $this->info['font-size'] = $def->info['font-size']; - $this->info['line-height'] = $def->info['line-height']; - $this->info['font-family'] = $def->info['font-family']; - } - - public function validate($string, $config, $context) { - - static $system_fonts = array( - 'caption' => true, - 'icon' => true, - 'menu' => true, - 'message-box' => true, - 'small-caption' => true, - 'status-bar' => true - ); - - // regular pre-processing - $string = $this->parseCDATA($string); - if ($string === '') return false; - - // check if it's one of the keywords - $lowercase_string = strtolower($string); - if (isset($system_fonts[$lowercase_string])) { - return $lowercase_string; - } - - $bits = explode(' ', $string); // bits to process - $stage = 0; // this indicates what we're looking for - $caught = array(); // which stage 0 properties have we caught? - $stage_1 = array('font-style', 'font-variant', 'font-weight'); - $final = ''; // output - - for ($i = 0, $size = count($bits); $i < $size; $i++) { - if ($bits[$i] === '') continue; - switch ($stage) { - - // attempting to catch font-style, font-variant or font-weight - case 0: - foreach ($stage_1 as $validator_name) { - if (isset($caught[$validator_name])) continue; - $r = $this->info[$validator_name]->validate( - $bits[$i], $config, $context); - if ($r !== false) { - $final .= $r . ' '; - $caught[$validator_name] = true; - break; - } - } - // all three caught, continue on - if (count($caught) >= 3) $stage = 1; - if ($r !== false) break; - - // attempting to catch font-size and perhaps line-height - case 1: - $found_slash = false; - if (strpos($bits[$i], '/') !== false) { - list($font_size, $line_height) = - explode('/', $bits[$i]); - if ($line_height === '') { - // ooh, there's a space after the slash! - $line_height = false; - $found_slash = true; - } - } else { - $font_size = $bits[$i]; - $line_height = false; - } - $r = $this->info['font-size']->validate( - $font_size, $config, $context); - if ($r !== false) { - $final .= $r; - // attempt to catch line-height - if ($line_height === false) { - // we need to scroll forward - for ($j = $i + 1; $j < $size; $j++) { - if ($bits[$j] === '') continue; - if ($bits[$j] === '/') { - if ($found_slash) { - return false; - } else { - $found_slash = true; - continue; - } - } - $line_height = $bits[$j]; - break; - } - } else { - // slash already found - $found_slash = true; - $j = $i; - } - if ($found_slash) { - $i = $j; - $r = $this->info['line-height']->validate( - $line_height, $config, $context); - if ($r !== false) { - $final .= '/' . $r; - } - } - $final .= ' '; - $stage = 2; - break; - } - return false; - - // attempting to catch font-family - case 2: - $font_family = - implode(' ', array_slice($bits, $i, $size - $i)); - $r = $this->info['font-family']->validate( - $font_family, $config, $context); - if ($r !== false) { - $final .= $r . ' '; - // processing completed successfully - return rtrim($final); - } - return false; - } - } - return false; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php deleted file mode 100755 index 98dcf820dc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php +++ /dev/null @@ -1,197 +0,0 @@ -mask = '_- '; - for ($c = 'a'; $c <= 'z'; $c++) $this->mask .= $c; - for ($c = 'A'; $c <= 'Z'; $c++) $this->mask .= $c; - for ($c = '0'; $c <= '9'; $c++) $this->mask .= $c; // cast-y, but should be fine - // special bytes used by UTF-8 - for ($i = 0x80; $i <= 0xFF; $i++) { - // We don't bother excluding invalid bytes in this range, - // because the our restriction of well-formed UTF-8 will - // prevent these from ever occurring. - $this->mask .= chr($i); - } - - /* - PHP's internal strcspn implementation is - O(length of string * length of mask), making it inefficient - for large masks. However, it's still faster than - preg_match 8) - for (p = s1;;) { - spanp = s2; - do { - if (*spanp == c || p == s1_end) { - return p - s1; - } - } while (spanp++ < (s2_end - 1)); - c = *++p; - } - */ - // possible optimization: invert the mask. - } - - public function validate($string, $config, $context) { - static $generic_names = array( - 'serif' => true, - 'sans-serif' => true, - 'monospace' => true, - 'fantasy' => true, - 'cursive' => true - ); - $allowed_fonts = $config->get('CSS.AllowedFonts'); - - // assume that no font names contain commas in them - $fonts = explode(',', $string); - $final = ''; - foreach($fonts as $font) { - $font = trim($font); - if ($font === '') continue; - // match a generic name - if (isset($generic_names[$font])) { - if ($allowed_fonts === null || isset($allowed_fonts[$font])) { - $final .= $font . ', '; - } - continue; - } - // match a quoted name - if ($font[0] === '"' || $font[0] === "'") { - $length = strlen($font); - if ($length <= 2) continue; - $quote = $font[0]; - if ($font[$length - 1] !== $quote) continue; - $font = substr($font, 1, $length - 2); - } - - $font = $this->expandCSSEscape($font); - - // $font is a pure representation of the font name - - if ($allowed_fonts !== null && !isset($allowed_fonts[$font])) { - continue; - } - - if (ctype_alnum($font) && $font !== '') { - // very simple font, allow it in unharmed - $final .= $font . ', '; - continue; - } - - // bugger out on whitespace. form feed (0C) really - // shouldn't show up regardless - $font = str_replace(array("\n", "\t", "\r", "\x0C"), ' ', $font); - - // Here, there are various classes of characters which need - // to be treated differently: - // - Alphanumeric characters are essentially safe. We - // handled these above. - // - Spaces require quoting, though most parsers will do - // the right thing if there aren't any characters that - // can be misinterpreted - // - Dashes rarely occur, but they fairly unproblematic - // for parsing/rendering purposes. - // The above characters cover the majority of Western font - // names. - // - Arbitrary Unicode characters not in ASCII. Because - // most parsers give little thought to Unicode, treatment - // of these codepoints is basically uniform, even for - // punctuation-like codepoints. These characters can - // show up in non-Western pages and are supported by most - // major browsers, for example: "MS 明朝" is a - // legitimate font-name - // . See - // the CSS3 spec for more examples: - // - // You can see live samples of these on the Internet: - // - // However, most of these fonts have ASCII equivalents: - // for example, 'MS Mincho', and it's considered - // professional to use ASCII font names instead of - // Unicode font names. Thanks Takeshi Terada for - // providing this information. - // The following characters, to my knowledge, have not been - // used to name font names. - // - Single quote. While theoretically you might find a - // font name that has a single quote in its name (serving - // as an apostrophe, e.g. Dave's Scribble), I haven't - // been able to find any actual examples of this. - // Internet Explorer's cssText translation (which I - // believe is invoked by innerHTML) normalizes any - // quoting to single quotes, and fails to escape single - // quotes. (Note that this is not IE's behavior for all - // CSS properties, just some sort of special casing for - // font-family). So a single quote *cannot* be used - // safely in the font-family context if there will be an - // innerHTML/cssText translation. Note that Firefox 3.x - // does this too. - // - Double quote. In IE, these get normalized to - // single-quotes, no matter what the encoding. (Fun - // fact, in IE8, the 'content' CSS property gained - // support, where they special cased to preserve encoded - // double quotes, but still translate unadorned double - // quotes into single quotes.) So, because their - // fixpoint behavior is identical to single quotes, they - // cannot be allowed either. Firefox 3.x displays - // single-quote style behavior. - // - Backslashes are reduced by one (so \\ -> \) every - // iteration, so they cannot be used safely. This shows - // up in IE7, IE8 and FF3 - // - Semicolons, commas and backticks are handled properly. - // - The rest of the ASCII punctuation is handled properly. - // We haven't checked what browsers do to unadorned - // versions, but this is not important as long as the - // browser doesn't /remove/ surrounding quotes (as IE does - // for HTML). - // - // With these results in hand, we conclude that there are - // various levels of safety: - // - Paranoid: alphanumeric, spaces and dashes(?) - // - International: Paranoid + non-ASCII Unicode - // - Edgy: Everything except quotes, backslashes - // - NoJS: Standards compliance, e.g. sod IE. Note that - // with some judicious character escaping (since certain - // types of escaping doesn't work) this is theoretically - // OK as long as innerHTML/cssText is not called. - // We believe that international is a reasonable default - // (that we will implement now), and once we do more - // extensive research, we may feel comfortable with dropping - // it down to edgy. - - // Edgy: alphanumeric, spaces, dashes, underscores and Unicode. Use of - // str(c)spn assumes that the string was already well formed - // Unicode (which of course it is). - if (strspn($font, $this->mask) !== strlen($font)) { - continue; - } - - // Historical: - // In the absence of innerHTML/cssText, these ugly - // transforms don't pose a security risk (as \\ and \" - // might--these escapes are not supported by most browsers). - // We could try to be clever and use single-quote wrapping - // when there is a double quote present, but I have choosen - // not to implement that. (NOTE: you can reduce the amount - // of escapes by one depending on what quoting style you use) - // $font = str_replace('\\', '\\5C ', $font); - // $font = str_replace('"', '\\22 ', $font); - // $font = str_replace("'", '\\27 ', $font); - - // font possibly with spaces, requires quoting - $final .= "'$font', "; - } - $final = rtrim($final, ', '); - if ($final === '') return false; - return $final; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Ident.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Ident.php deleted file mode 100644 index 779794a0b3..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Ident.php +++ /dev/null @@ -1,24 +0,0 @@ -def = $def; - $this->allow = $allow; - } - /** - * Intercepts and removes !important if necessary - */ - public function validate($string, $config, $context) { - // test for ! and important tokens - $string = trim($string); - $is_important = false; - // :TODO: optimization: test directly for !important and ! important - if (strlen($string) >= 9 && substr($string, -9) === 'important') { - $temp = rtrim(substr($string, 0, -9)); - // use a temp, because we might want to restore important - if (strlen($temp) >= 1 && substr($temp, -1) === '!') { - $string = rtrim(substr($temp, 0, -1)); - $is_important = true; - } - } - $string = $this->def->validate($string, $config, $context); - if ($this->allow && $is_important) $string .= ' !important'; - return $string; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Length.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Length.php deleted file mode 100755 index a07ec58135..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Length.php +++ /dev/null @@ -1,47 +0,0 @@ -min = $min !== null ? HTMLPurifier_Length::make($min) : null; - $this->max = $max !== null ? HTMLPurifier_Length::make($max) : null; - } - - public function validate($string, $config, $context) { - $string = $this->parseCDATA($string); - - // Optimizations - if ($string === '') return false; - if ($string === '0') return '0'; - if (strlen($string) === 1) return false; - - $length = HTMLPurifier_Length::make($string); - if (!$length->isValid()) return false; - - if ($this->min) { - $c = $length->compareTo($this->min); - if ($c === false) return false; - if ($c < 0) return false; - } - if ($this->max) { - $c = $length->compareTo($this->max); - if ($c === false) return false; - if ($c > 0) return false; - } - - return $length->toString(); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php deleted file mode 100755 index 4406868c08..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php +++ /dev/null @@ -1,78 +0,0 @@ -getCSSDefinition(); - $this->info['list-style-type'] = $def->info['list-style-type']; - $this->info['list-style-position'] = $def->info['list-style-position']; - $this->info['list-style-image'] = $def->info['list-style-image']; - } - - public function validate($string, $config, $context) { - - // regular pre-processing - $string = $this->parseCDATA($string); - if ($string === '') return false; - - // assumes URI doesn't have spaces in it - $bits = explode(' ', strtolower($string)); // bits to process - - $caught = array(); - $caught['type'] = false; - $caught['position'] = false; - $caught['image'] = false; - - $i = 0; // number of catches - $none = false; - - foreach ($bits as $bit) { - if ($i >= 3) return; // optimization bit - if ($bit === '') continue; - foreach ($caught as $key => $status) { - if ($status !== false) continue; - $r = $this->info['list-style-' . $key]->validate($bit, $config, $context); - if ($r === false) continue; - if ($r === 'none') { - if ($none) continue; - else $none = true; - if ($key == 'image') continue; - } - $caught[$key] = $r; - $i++; - break; - } - } - - if (!$i) return false; - - $ret = array(); - - // construct type - if ($caught['type']) $ret[] = $caught['type']; - - // construct image - if ($caught['image']) $ret[] = $caught['image']; - - // construct position - if ($caught['position']) $ret[] = $caught['position']; - - if (empty($ret)) return false; - return implode(' ', $ret); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php deleted file mode 100755 index 4d62a40d7f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php +++ /dev/null @@ -1,58 +0,0 @@ -single = $single; - $this->max = $max; - } - - public function validate($string, $config, $context) { - $string = $this->parseCDATA($string); - if ($string === '') return false; - $parts = explode(' ', $string); // parseCDATA replaced \r, \t and \n - $length = count($parts); - $final = ''; - for ($i = 0, $num = 0; $i < $length && $num < $this->max; $i++) { - if (ctype_space($parts[$i])) continue; - $result = $this->single->validate($parts[$i], $config, $context); - if ($result !== false) { - $final .= $result . ' '; - $num++; - } - } - if ($final === '') return false; - return rtrim($final); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php deleted file mode 100755 index 3f99e12ec2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php +++ /dev/null @@ -1,69 +0,0 @@ -non_negative = $non_negative; - } - - /** - * @warning Some contexts do not pass $config, $context. These - * variables should not be used without checking HTMLPurifier_Length - */ - public function validate($number, $config, $context) { - - $number = $this->parseCDATA($number); - - if ($number === '') return false; - if ($number === '0') return '0'; - - $sign = ''; - switch ($number[0]) { - case '-': - if ($this->non_negative) return false; - $sign = '-'; - case '+': - $number = substr($number, 1); - } - - if (ctype_digit($number)) { - $number = ltrim($number, '0'); - return $number ? $sign . $number : '0'; - } - - // Period is the only non-numeric character allowed - if (strpos($number, '.') === false) return false; - - list($left, $right) = explode('.', $number, 2); - - if ($left === '' && $right === '') return false; - if ($left !== '' && !ctype_digit($left)) return false; - - $left = ltrim($left, '0'); - $right = rtrim($right, '0'); - - if ($right === '') { - return $left ? $sign . $left : '0'; - } elseif (!ctype_digit($right)) { - return false; - } - - return $sign . $left . '.' . $right; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Percentage.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Percentage.php deleted file mode 100755 index c34b8fc3c3..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/Percentage.php +++ /dev/null @@ -1,40 +0,0 @@ -number_def = new HTMLPurifier_AttrDef_CSS_Number($non_negative); - } - - public function validate($string, $config, $context) { - - $string = $this->parseCDATA($string); - - if ($string === '') return false; - $length = strlen($string); - if ($length === 1) return false; - if ($string[$length - 1] !== '%') return false; - - $number = substr($string, 0, $length - 1); - $number = $this->number_def->validate($number, $config, $context); - - if ($number === false) return false; - return "$number%"; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php deleted file mode 100755 index 772c922d80..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php +++ /dev/null @@ -1,38 +0,0 @@ - true, - 'overline' => true, - 'underline' => true, - ); - - $string = strtolower($this->parseCDATA($string)); - - if ($string === 'none') return $string; - - $parts = explode(' ', $string); - $final = ''; - foreach ($parts as $part) { - if (isset($allowed_values[$part])) { - $final .= $part . ' '; - } - } - $final = rtrim($final); - if ($final === '') return false; - return $final; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/URI.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/URI.php deleted file mode 100755 index c2f767e573..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/CSS/URI.php +++ /dev/null @@ -1,61 +0,0 @@ -parseCDATA($uri_string); - if (strpos($uri_string, 'url(') !== 0) return false; - $uri_string = substr($uri_string, 4); - $new_length = strlen($uri_string) - 1; - if ($uri_string[$new_length] != ')') return false; - $uri = trim(substr($uri_string, 0, $new_length)); - - if (!empty($uri) && ($uri[0] == "'" || $uri[0] == '"')) { - $quote = $uri[0]; - $new_length = strlen($uri) - 1; - if ($uri[$new_length] !== $quote) return false; - $uri = substr($uri, 1, $new_length - 1); - } - - $uri = $this->expandCSSEscape($uri); - - $result = parent::validate($uri, $config, $context); - - if ($result === false) return false; - - // extra sanity check; should have been done by URI - $result = str_replace(array('"', "\\", "\n", "\x0c", "\r"), "", $result); - - // suspicious characters are ()'; we're going to percent encode - // them for safety. - $result = str_replace(array('(', ')', "'"), array('%28', '%29', '%27'), $result); - - // there's an extra bug where ampersands lose their escaping on - // an innerHTML cycle, so a very unlucky query parameter could - // then change the meaning of the URL. Unfortunately, there's - // not much we can do about that... - - return "url(\"$result\")"; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Clone.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Clone.php deleted file mode 100644 index ce68dbd546..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Clone.php +++ /dev/null @@ -1,28 +0,0 @@ -clone = $clone; - } - - public function validate($v, $config, $context) { - return $this->clone->validate($v, $config, $context); - } - - public function make($string) { - return clone $this->clone; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Enum.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Enum.php deleted file mode 100755 index 5d603ebcc6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Enum.php +++ /dev/null @@ -1,65 +0,0 @@ -valid_values = array_flip($valid_values); - $this->case_sensitive = $case_sensitive; - } - - public function validate($string, $config, $context) { - $string = trim($string); - if (!$this->case_sensitive) { - // we may want to do full case-insensitive libraries - $string = ctype_lower($string) ? $string : strtolower($string); - } - $result = isset($this->valid_values[$string]); - - return $result ? $string : false; - } - - /** - * @param $string In form of comma-delimited list of case-insensitive - * valid values. Example: "foo,bar,baz". Prepend "s:" to make - * case sensitive - */ - public function make($string) { - if (strlen($string) > 2 && $string[0] == 's' && $string[1] == ':') { - $string = substr($string, 2); - $sensitive = true; - } else { - $sensitive = false; - } - $values = explode(',', $string); - return new HTMLPurifier_AttrDef_Enum($values, $sensitive); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php deleted file mode 100755 index e06987eb8d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php +++ /dev/null @@ -1,28 +0,0 @@ -name = $name;} - - public function validate($string, $config, $context) { - if (empty($string)) return false; - return $this->name; - } - - /** - * @param $string Name of attribute - */ - public function make($string) { - return new HTMLPurifier_AttrDef_HTML_Bool($string); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Class.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Class.php deleted file mode 100755 index 370068d975..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Class.php +++ /dev/null @@ -1,34 +0,0 @@ -getDefinition('HTML')->doctype->name; - if ($name == "XHTML 1.1" || $name == "XHTML 2.0") { - return parent::split($string, $config, $context); - } else { - return preg_split('/\s+/', $string); - } - } - protected function filter($tokens, $config, $context) { - $allowed = $config->get('Attr.AllowedClasses'); - $forbidden = $config->get('Attr.ForbiddenClasses'); - $ret = array(); - foreach ($tokens as $token) { - if ( - ($allowed === null || isset($allowed[$token])) && - !isset($forbidden[$token]) && - // We need this O(n) check because of PHP's array - // implementation that casts -0 to 0. - !in_array($token, $ret, true) - ) { - $ret[] = $token; - } - } - return $ret; - } -} diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Color.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Color.php deleted file mode 100755 index e02abb0759..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Color.php +++ /dev/null @@ -1,33 +0,0 @@ -get('Core.ColorKeywords'); - - $string = trim($string); - - if (empty($string)) return false; - $lower = strtolower($string); - if (isset($colors[$lower])) return $colors[$lower]; - if ($string[0] === '#') $hex = substr($string, 1); - else $hex = $string; - - $length = strlen($hex); - if ($length !== 3 && $length !== 6) return false; - if (!ctype_xdigit($hex)) return false; - if ($length === 3) $hex = $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2]; - - return "#$hex"; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php deleted file mode 100755 index ae6ea7c01d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php +++ /dev/null @@ -1,21 +0,0 @@ -valid_values === false) $this->valid_values = $config->get('Attr.AllowedFrameTargets'); - return parent::validate($string, $config, $context); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/ID.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/ID.php deleted file mode 100755 index 0015fa1ebb..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/ID.php +++ /dev/null @@ -1,80 +0,0 @@ -selector = $selector; - } - - public function validate($id, $config, $context) { - - if (!$this->selector && !$config->get('Attr.EnableID')) return false; - - $id = trim($id); // trim it first - - if ($id === '') return false; - - $prefix = $config->get('Attr.IDPrefix'); - if ($prefix !== '') { - $prefix .= $config->get('Attr.IDPrefixLocal'); - // prevent re-appending the prefix - if (strpos($id, $prefix) !== 0) $id = $prefix . $id; - } elseif ($config->get('Attr.IDPrefixLocal') !== '') { - trigger_error('%Attr.IDPrefixLocal cannot be used unless '. - '%Attr.IDPrefix is set', E_USER_WARNING); - } - - if (!$this->selector) { - $id_accumulator =& $context->get('IDAccumulator'); - if (isset($id_accumulator->ids[$id])) return false; - } - - // we purposely avoid using regex, hopefully this is faster - - if (ctype_alpha($id)) { - $result = true; - } else { - if (!ctype_alpha(@$id[0])) return false; - $trim = trim( // primitive style of regexps, I suppose - $id, - 'A..Za..z0..9:-._' - ); - $result = ($trim === ''); - } - - $regexp = $config->get('Attr.IDBlacklistRegexp'); - if ($regexp && preg_match($regexp, $id)) { - return false; - } - - if (!$this->selector && $result) $id_accumulator->add($id); - - // if no change was made to the ID, return the result - // else, return the new id if stripping whitespace made it - // valid, or return false. - return $result ? $id : false; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Length.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Length.php deleted file mode 100755 index a242f9c238..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Length.php +++ /dev/null @@ -1,41 +0,0 @@ - 100) return '100%'; - - return ((string) $points) . '%'; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php deleted file mode 100755 index 76d25ed088..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php +++ /dev/null @@ -1,53 +0,0 @@ - 'AllowedRel', - 'rev' => 'AllowedRev' - ); - if (!isset($configLookup[$name])) { - trigger_error('Unrecognized attribute name for link '. - 'relationship.', E_USER_ERROR); - return; - } - $this->name = $configLookup[$name]; - } - - public function validate($string, $config, $context) { - - $allowed = $config->get('Attr.' . $this->name); - if (empty($allowed)) return false; - - $string = $this->parseCDATA($string); - $parts = explode(' ', $string); - - // lookup to prevent duplicates - $ret_lookup = array(); - foreach ($parts as $part) { - $part = strtolower(trim($part)); - if (!isset($allowed[$part])) continue; - $ret_lookup[$part] = true; - } - - if (empty($ret_lookup)) return false; - $string = implode(' ', array_keys($ret_lookup)); - - return $string; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php deleted file mode 100755 index c72fc76e4d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php +++ /dev/null @@ -1,41 +0,0 @@ -split($string, $config, $context); - $tokens = $this->filter($tokens, $config, $context); - if (empty($tokens)) return false; - return implode(' ', $tokens); - - } - - /** - * Splits a space separated list of tokens into its constituent parts. - */ - protected function split($string, $config, $context) { - // OPTIMIZABLE! - // do the preg_match, capture all subpatterns for reformulation - - // we don't support U+00A1 and up codepoints or - // escaping because I don't know how to do that with regexps - // and plus it would complicate optimization efforts (you never - // see that anyway). - $pattern = '/(?:(?<=\s)|\A)'. // look behind for space or string start - '((?:--|-?[A-Za-z_])[A-Za-z_\-0-9]*)'. - '(?:(?=\s)|\z)/'; // look ahead for space or string end - preg_match_all($pattern, $string, $matches); - return $matches[1]; - } - - /** - * Template method for removing certain tokens based on arbitrary criteria. - * @note If we wanted to be really functional, we'd do an array_filter - * with a callback. But... we're not. - */ - protected function filter($tokens, $config, $context) { - return $tokens; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Pixels.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Pixels.php deleted file mode 100755 index 4cb2c1b857..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/HTML/Pixels.php +++ /dev/null @@ -1,48 +0,0 @@ -max = $max; - } - - public function validate($string, $config, $context) { - - $string = trim($string); - if ($string === '0') return $string; - if ($string === '') return false; - $length = strlen($string); - if (substr($string, $length - 2) == 'px') { - $string = substr($string, 0, $length - 2); - } - if (!is_numeric($string)) return false; - $int = (int) $string; - - if ($int < 0) return '0'; - - // upper-bound value, extremely high values can - // crash operating systems, see - // WARNING, above link WILL crash you if you're using Windows - - if ($this->max !== null && $int > $this->max) return (string) $this->max; - - return (string) $int; - - } - - public function make($string) { - if ($string === '') $max = null; - else $max = (int) $string; - $class = get_class($this); - return new $class($max); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Integer.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Integer.php deleted file mode 100755 index d59738d2a2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Integer.php +++ /dev/null @@ -1,73 +0,0 @@ -negative = $negative; - $this->zero = $zero; - $this->positive = $positive; - } - - public function validate($integer, $config, $context) { - - $integer = $this->parseCDATA($integer); - if ($integer === '') return false; - - // we could possibly simply typecast it to integer, but there are - // certain fringe cases that must not return an integer. - - // clip leading sign - if ( $this->negative && $integer[0] === '-' ) { - $digits = substr($integer, 1); - if ($digits === '0') $integer = '0'; // rm minus sign for zero - } elseif( $this->positive && $integer[0] === '+' ) { - $digits = $integer = substr($integer, 1); // rm unnecessary plus - } else { - $digits = $integer; - } - - // test if it's numeric - if (!ctype_digit($digits)) return false; - - // perform scope tests - if (!$this->zero && $integer == 0) return false; - if (!$this->positive && $integer > 0) return false; - if (!$this->negative && $integer < 0) return false; - - return $integer; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Lang.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Lang.php deleted file mode 100755 index 10e6da56db..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Lang.php +++ /dev/null @@ -1,73 +0,0 @@ - 8 || !ctype_alnum($subtags[1])) { - return $new_string; - } - if (!ctype_lower($subtags[1])) $subtags[1] = strtolower($subtags[1]); - - $new_string .= '-' . $subtags[1]; - if ($num_subtags == 2) return $new_string; - - // process all other subtags, index 2 and up - for ($i = 2; $i < $num_subtags; $i++) { - $length = strlen($subtags[$i]); - if ($length == 0 || $length > 8 || !ctype_alnum($subtags[$i])) { - return $new_string; - } - if (!ctype_lower($subtags[$i])) { - $subtags[$i] = strtolower($subtags[$i]); - } - $new_string .= '-' . $subtags[$i]; - } - - return $new_string; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Switch.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Switch.php deleted file mode 100755 index c9e3ed193e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Switch.php +++ /dev/null @@ -1,34 +0,0 @@ -tag = $tag; - $this->withTag = $with_tag; - $this->withoutTag = $without_tag; - } - - public function validate($string, $config, $context) { - $token = $context->get('CurrentToken', true); - if (!$token || $token->name !== $this->tag) { - return $this->withoutTag->validate($string, $config, $context); - } else { - return $this->withTag->validate($string, $config, $context); - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Text.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Text.php deleted file mode 100755 index c6216cc531..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/Text.php +++ /dev/null @@ -1,15 +0,0 @@ -parseCDATA($string); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI.php deleted file mode 100755 index c2b6846712..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI.php +++ /dev/null @@ -1,77 +0,0 @@ -parser = new HTMLPurifier_URIParser(); - $this->embedsResource = (bool) $embeds_resource; - } - - public function make($string) { - $embeds = ($string === 'embedded'); - return new HTMLPurifier_AttrDef_URI($embeds); - } - - public function validate($uri, $config, $context) { - - if ($config->get('URI.Disable')) return false; - - $uri = $this->parseCDATA($uri); - - // parse the URI - $uri = $this->parser->parse($uri); - if ($uri === false) return false; - - // add embedded flag to context for validators - $context->register('EmbeddedURI', $this->embedsResource); - - $ok = false; - do { - - // generic validation - $result = $uri->validate($config, $context); - if (!$result) break; - - // chained filtering - $uri_def = $config->getDefinition('URI'); - $result = $uri_def->filter($uri, $config, $context); - if (!$result) break; - - // scheme-specific validation - $scheme_obj = $uri->getSchemeObj($config, $context); - if (!$scheme_obj) break; - if ($this->embedsResource && !$scheme_obj->browsable) break; - $result = $scheme_obj->validate($uri, $config, $context); - if (!$result) break; - - // Post chained filtering - $result = $uri_def->postFilter($uri, $config, $context); - if (!$result) break; - - // survived gauntlet - $ok = true; - - } while (false); - - $context->destroy('EmbeddedURI'); - if (!$ok) return false; - - // back to string - return $uri->toString(); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Email.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Email.php deleted file mode 100755 index bfee9d166c..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Email.php +++ /dev/null @@ -1,17 +0,0 @@ -" - // that needs more percent encoding to be done - if ($string == '') return false; - $string = trim($string); - $result = preg_match('/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', $string); - return $result ? $string : false; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php deleted file mode 100755 index 125decb2df..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php +++ /dev/null @@ -1,101 +0,0 @@ -ipv4 = new HTMLPurifier_AttrDef_URI_IPv4(); - $this->ipv6 = new HTMLPurifier_AttrDef_URI_IPv6(); - } - - public function validate($string, $config, $context) { - $length = strlen($string); - // empty hostname is OK; it's usually semantically equivalent: - // the default host as defined by a URI scheme is used: - // - // If the URI scheme defines a default for host, then that - // default applies when the host subcomponent is undefined - // or when the registered name is empty (zero length). - if ($string === '') return ''; - if ($length > 1 && $string[0] === '[' && $string[$length-1] === ']') { - //IPv6 - $ip = substr($string, 1, $length - 2); - $valid = $this->ipv6->validate($ip, $config, $context); - if ($valid === false) return false; - return '['. $valid . ']'; - } - - // need to do checks on unusual encodings too - $ipv4 = $this->ipv4->validate($string, $config, $context); - if ($ipv4 !== false) return $ipv4; - - // A regular domain name. - - // This doesn't match I18N domain names, but we don't have proper IRI support, - // so force users to insert Punycode. - - // The productions describing this are: - $a = '[a-z]'; // alpha - $an = '[a-z0-9]'; // alphanum - $and = '[a-z0-9-]'; // alphanum | "-" - // domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum - $domainlabel = "$an($and*$an)?"; - // toplabel = alpha | alpha *( alphanum | "-" ) alphanum - $toplabel = "$a($and*$an)?"; - // hostname = *( domainlabel "." ) toplabel [ "." ] - if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) { - return $string; - } - - // If we have Net_IDNA2 support, we can support IRIs by - // punycoding them. (This is the most portable thing to do, - // since otherwise we have to assume browsers support - - if ($config->get('Core.EnableIDNA')) { - $idna = new Net_IDNA2(array('encoding' => 'utf8', 'overlong' => false, 'strict' => true)); - // we need to encode each period separately - $parts = explode('.', $string); - try { - $new_parts = array(); - foreach ($parts as $part) { - $encodable = false; - for ($i = 0, $c = strlen($part); $i < $c; $i++) { - if (ord($part[$i]) > 0x7a) { - $encodable = true; - break; - } - } - if (!$encodable) { - $new_parts[] = $part; - } else { - $new_parts[] = $idna->encode($part); - } - } - $string = implode('.', $new_parts); - if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) { - return $string; - } - } catch (Exception $e) { - // XXX error reporting - } - } - - return false; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv4.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv4.php deleted file mode 100755 index ec4cf591b8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv4.php +++ /dev/null @@ -1,39 +0,0 @@ -ip4) $this->_loadRegex(); - - if (preg_match('#^' . $this->ip4 . '$#s', $aIP)) - { - return $aIP; - } - - return false; - - } - - /** - * Lazy load function to prevent regex from being stuffed in - * cache. - */ - protected function _loadRegex() { - $oct = '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])'; // 0-255 - $this->ip4 = "(?:{$oct}\\.{$oct}\\.{$oct}\\.{$oct})"; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv6.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv6.php deleted file mode 100755 index 9454e9be50..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrDef/URI/IPv6.php +++ /dev/null @@ -1,99 +0,0 @@ -ip4) $this->_loadRegex(); - - $original = $aIP; - - $hex = '[0-9a-fA-F]'; - $blk = '(?:' . $hex . '{1,4})'; - $pre = '(?:/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))'; // /0 - /128 - - // prefix check - if (strpos($aIP, '/') !== false) - { - if (preg_match('#' . $pre . '$#s', $aIP, $find)) - { - $aIP = substr($aIP, 0, 0-strlen($find[0])); - unset($find); - } - else - { - return false; - } - } - - // IPv4-compatiblity check - if (preg_match('#(?<=:'.')' . $this->ip4 . '$#s', $aIP, $find)) - { - $aIP = substr($aIP, 0, 0-strlen($find[0])); - $ip = explode('.', $find[0]); - $ip = array_map('dechex', $ip); - $aIP .= $ip[0] . $ip[1] . ':' . $ip[2] . $ip[3]; - unset($find, $ip); - } - - // compression check - $aIP = explode('::', $aIP); - $c = count($aIP); - if ($c > 2) - { - return false; - } - elseif ($c == 2) - { - list($first, $second) = $aIP; - $first = explode(':', $first); - $second = explode(':', $second); - - if (count($first) + count($second) > 8) - { - return false; - } - - while(count($first) < 8) - { - array_push($first, '0'); - } - - array_splice($first, 8 - count($second), 8, $second); - $aIP = $first; - unset($first,$second); - } - else - { - $aIP = explode(':', $aIP[0]); - } - $c = count($aIP); - - if ($c != 8) - { - return false; - } - - // All the pieces should be 16-bit hex strings. Are they? - foreach ($aIP as $piece) - { - if (!preg_match('#^[0-9a-fA-F]{4}$#s', sprintf('%04s', $piece))) - { - return false; - } - } - - return $original; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform.php deleted file mode 100755 index e61d3e01b6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform.php +++ /dev/null @@ -1,56 +0,0 @@ -confiscateAttr($attr, 'background'); - // some validation should happen here - - $this->prependCSS($attr, "background-image:url($background);"); - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BdoDir.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BdoDir.php deleted file mode 100755 index 4d1a05665e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BdoDir.php +++ /dev/null @@ -1,19 +0,0 @@ -get('Attr.DefaultTextDir'); - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BgColor.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BgColor.php deleted file mode 100755 index ad3916bb96..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BgColor.php +++ /dev/null @@ -1,23 +0,0 @@ -confiscateAttr($attr, 'bgcolor'); - // some validation should happen here - - $this->prependCSS($attr, "background-color:$bgcolor;"); - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BoolToCSS.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BoolToCSS.php deleted file mode 100755 index 51159b6715..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/BoolToCSS.php +++ /dev/null @@ -1,36 +0,0 @@ -attr = $attr; - $this->css = $css; - } - - public function transform($attr, $config, $context) { - if (!isset($attr[$this->attr])) return $attr; - unset($attr[$this->attr]); - $this->prependCSS($attr, $this->css); - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Border.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Border.php deleted file mode 100755 index 476b0b079b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Border.php +++ /dev/null @@ -1,18 +0,0 @@ -confiscateAttr($attr, 'border'); - // some validation should happen here - $this->prependCSS($attr, "border:{$border_width}px solid;"); - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/EnumToCSS.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/EnumToCSS.php deleted file mode 100755 index 2a5b4514ab..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/EnumToCSS.php +++ /dev/null @@ -1,58 +0,0 @@ -attr = $attr; - $this->enumToCSS = $enum_to_css; - $this->caseSensitive = (bool) $case_sensitive; - } - - public function transform($attr, $config, $context) { - - if (!isset($attr[$this->attr])) return $attr; - - $value = trim($attr[$this->attr]); - unset($attr[$this->attr]); - - if (!$this->caseSensitive) $value = strtolower($value); - - if (!isset($this->enumToCSS[$value])) { - return $attr; - } - - $this->prependCSS($attr, $this->enumToCSS[$value]); - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgRequired.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgRequired.php deleted file mode 100755 index 7f0e4b7a59..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgRequired.php +++ /dev/null @@ -1,43 +0,0 @@ -get('Core.RemoveInvalidImg')) return $attr; - $attr['src'] = $config->get('Attr.DefaultInvalidImage'); - $src = false; - } - - if (!isset($attr['alt'])) { - if ($src) { - $alt = $config->get('Attr.DefaultImageAlt'); - if ($alt === null) { - // truncate if the alt is too long - $attr['alt'] = substr(basename($attr['src']),0,40); - } else { - $attr['alt'] = $alt; - } - } else { - $attr['alt'] = $config->get('Attr.DefaultInvalidImageAlt'); - } - } - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgSpace.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgSpace.php deleted file mode 100755 index fd84c10c36..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ImgSpace.php +++ /dev/null @@ -1,44 +0,0 @@ - array('left', 'right'), - 'vspace' => array('top', 'bottom') - ); - - public function __construct($attr) { - $this->attr = $attr; - if (!isset($this->css[$attr])) { - trigger_error(htmlspecialchars($attr) . ' is not valid space attribute'); - } - } - - public function transform($attr, $config, $context) { - - if (!isset($attr[$this->attr])) return $attr; - - $width = $this->confiscateAttr($attr, $this->attr); - // some validation could happen here - - if (!isset($this->css[$this->attr])) return $attr; - - $style = ''; - foreach ($this->css[$this->attr] as $suffix) { - $property = "margin-$suffix"; - $style .= "$property:{$width}px;"; - } - - $this->prependCSS($attr, $style); - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Input.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Input.php deleted file mode 100755 index 16829552d1..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Input.php +++ /dev/null @@ -1,40 +0,0 @@ -pixels = new HTMLPurifier_AttrDef_HTML_Pixels(); - } - - public function transform($attr, $config, $context) { - if (!isset($attr['type'])) $t = 'text'; - else $t = strtolower($attr['type']); - if (isset($attr['checked']) && $t !== 'radio' && $t !== 'checkbox') { - unset($attr['checked']); - } - if (isset($attr['maxlength']) && $t !== 'text' && $t !== 'password') { - unset($attr['maxlength']); - } - if (isset($attr['size']) && $t !== 'text' && $t !== 'password') { - $result = $this->pixels->validate($attr['size'], $config, $context); - if ($result === false) unset($attr['size']); - else $attr['size'] = $result; - } - if (isset($attr['src']) && $t !== 'image') { - unset($attr['src']); - } - if (!isset($attr['value']) && ($t === 'radio' || $t === 'checkbox')) { - $attr['value'] = ''; - } - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Lang.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Lang.php deleted file mode 100755 index 5869e7f820..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Lang.php +++ /dev/null @@ -1,28 +0,0 @@ -name = $name; - $this->cssName = $css_name ? $css_name : $name; - } - - public function transform($attr, $config, $context) { - if (!isset($attr[$this->name])) return $attr; - $length = $this->confiscateAttr($attr, $this->name); - if(ctype_digit($length)) $length .= 'px'; - $this->prependCSS($attr, $this->cssName . ":$length;"); - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Name.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Name.php deleted file mode 100755 index 15315bc735..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Name.php +++ /dev/null @@ -1,21 +0,0 @@ -get('HTML.Attr.Name.UseCDATA')) return $attr; - if (!isset($attr['name'])) return $attr; - $id = $this->confiscateAttr($attr, 'name'); - if ( isset($attr['id'])) return $attr; - $attr['id'] = $id; - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/NameSync.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/NameSync.php deleted file mode 100755 index a95638c140..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/NameSync.php +++ /dev/null @@ -1,27 +0,0 @@ -idDef = new HTMLPurifier_AttrDef_HTML_ID(); - } - - public function transform($attr, $config, $context) { - if (!isset($attr['name'])) return $attr; - $name = $attr['name']; - if (isset($attr['id']) && $attr['id'] === $name) return $attr; - $result = $this->idDef->validate($name, $config, $context); - if ($result === false) unset($attr['name']); - else $attr['name'] = $result; - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Nofollow.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Nofollow.php deleted file mode 100755 index e699c79a87..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Nofollow.php +++ /dev/null @@ -1,45 +0,0 @@ -parser = new HTMLPurifier_URIParser(); - } - - public function transform($attr, $config, $context) { - - if (!isset($attr['href'])) { - return $attr; - } - - // XXX Kind of inefficient - $url = $this->parser->parse($attr['href']); - $scheme = $url->getSchemeObj($config, $context); - - if ($scheme->browsable && !$url->isLocal($config, $context)) { - if (isset($attr['rel'])) { - $rels = explode(' ', $attr['rel']); - if (!in_array('nofollow', $rels)) { - $rels[] = 'nofollow'; - } - $attr['rel'] = implode(' ', $rels); - } else { - $attr['rel'] = 'nofollow'; - } - } - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/SafeEmbed.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/SafeEmbed.php deleted file mode 100755 index 4da449981f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/SafeEmbed.php +++ /dev/null @@ -1,15 +0,0 @@ -uri = new HTMLPurifier_AttrDef_URI(true); // embedded - $this->wmode = new HTMLPurifier_AttrDef_Enum(array('window', 'opaque', 'transparent')); - } - - public function transform($attr, $config, $context) { - // If we add support for other objects, we'll need to alter the - // transforms. - switch ($attr['name']) { - // application/x-shockwave-flash - // Keep this synchronized with Injector/SafeObject.php - case 'allowScriptAccess': - $attr['value'] = 'never'; - break; - case 'allowNetworking': - $attr['value'] = 'internal'; - break; - case 'allowFullScreen': - if ($config->get('HTML.FlashAllowFullScreen')) { - $attr['value'] = ($attr['value'] == 'true') ? 'true' : 'false'; - } else { - $attr['value'] = 'false'; - } - break; - case 'wmode': - $attr['value'] = $this->wmode->validate($attr['value'], $config, $context); - break; - case 'movie': - case 'src': - $attr['name'] = "movie"; - $attr['value'] = $this->uri->validate($attr['value'], $config, $context); - break; - case 'flashvars': - // we're going to allow arbitrary inputs to the SWF, on - // the reasoning that it could only hack the SWF, not us. - break; - // add other cases to support other param name/value pairs - default: - $attr['name'] = $attr['value'] = null; - } - return $attr; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ScriptRequired.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ScriptRequired.php deleted file mode 100755 index 4499050a22..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/ScriptRequired.php +++ /dev/null @@ -1,16 +0,0 @@ - - */ -class HTMLPurifier_AttrTransform_ScriptRequired extends HTMLPurifier_AttrTransform -{ - public function transform($attr, $config, $context) { - if (!isset($attr['type'])) { - $attr['type'] = 'text/javascript'; - } - return $attr; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/TargetBlank.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/TargetBlank.php deleted file mode 100644 index deba8b40fd..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/TargetBlank.php +++ /dev/null @@ -1,38 +0,0 @@ -parser = new HTMLPurifier_URIParser(); - } - - public function transform($attr, $config, $context) { - - if (!isset($attr['href'])) { - return $attr; - } - - // XXX Kind of inefficient - $url = $this->parser->parse($attr['href']); - $scheme = $url->getSchemeObj($config, $context); - - if ($scheme->browsable && !$url->isBenign($config, $context)) { - $attr['target'] = '_blank'; - } - - return $attr; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Textarea.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Textarea.php deleted file mode 100755 index 81ac3488ba..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTransform/Textarea.php +++ /dev/null @@ -1,18 +0,0 @@ - - */ -class HTMLPurifier_AttrTransform_Textarea extends HTMLPurifier_AttrTransform -{ - - public function transform($attr, $config, $context) { - // Calculated from Firefox - if (!isset($attr['cols'])) $attr['cols'] = '22'; - if (!isset($attr['rows'])) $attr['rows'] = '3'; - return $attr; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrTypes.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrTypes.php deleted file mode 100755 index 6f985ff934..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrTypes.php +++ /dev/null @@ -1,91 +0,0 @@ -info['Enum'] = new HTMLPurifier_AttrDef_Enum(); - $this->info['Bool'] = new HTMLPurifier_AttrDef_HTML_Bool(); - - $this->info['CDATA'] = new HTMLPurifier_AttrDef_Text(); - $this->info['ID'] = new HTMLPurifier_AttrDef_HTML_ID(); - $this->info['Length'] = new HTMLPurifier_AttrDef_HTML_Length(); - $this->info['MultiLength'] = new HTMLPurifier_AttrDef_HTML_MultiLength(); - $this->info['NMTOKENS'] = new HTMLPurifier_AttrDef_HTML_Nmtokens(); - $this->info['Pixels'] = new HTMLPurifier_AttrDef_HTML_Pixels(); - $this->info['Text'] = new HTMLPurifier_AttrDef_Text(); - $this->info['URI'] = new HTMLPurifier_AttrDef_URI(); - $this->info['LanguageCode'] = new HTMLPurifier_AttrDef_Lang(); - $this->info['Color'] = new HTMLPurifier_AttrDef_HTML_Color(); - $this->info['IAlign'] = self::makeEnum('top,middle,bottom,left,right'); - $this->info['LAlign'] = self::makeEnum('top,bottom,left,right'); - $this->info['FrameTarget'] = new HTMLPurifier_AttrDef_HTML_FrameTarget(); - - // unimplemented aliases - $this->info['ContentType'] = new HTMLPurifier_AttrDef_Text(); - $this->info['ContentTypes'] = new HTMLPurifier_AttrDef_Text(); - $this->info['Charsets'] = new HTMLPurifier_AttrDef_Text(); - $this->info['Character'] = new HTMLPurifier_AttrDef_Text(); - - // "proprietary" types - $this->info['Class'] = new HTMLPurifier_AttrDef_HTML_Class(); - - // number is really a positive integer (one or more digits) - // FIXME: ^^ not always, see start and value of list items - $this->info['Number'] = new HTMLPurifier_AttrDef_Integer(false, false, true); - } - - private static function makeEnum($in) { - return new HTMLPurifier_AttrDef_Clone(new HTMLPurifier_AttrDef_Enum(explode(',', $in))); - } - - /** - * Retrieves a type - * @param $type String type name - * @return Object AttrDef for type - */ - public function get($type) { - - // determine if there is any extra info tacked on - if (strpos($type, '#') !== false) list($type, $string) = explode('#', $type, 2); - else $string = ''; - - if (!isset($this->info[$type])) { - trigger_error('Cannot retrieve undefined attribute type ' . $type, E_USER_ERROR); - return; - } - - return $this->info[$type]->make($string); - - } - - /** - * Sets a new implementation for a type - * @param $type String type name - * @param $impl Object AttrDef for type - */ - public function set($type, $impl) { - $this->info[$type] = $impl; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/AttrValidator.php b/oc-includes/htmlpurifier/HTMLPurifier/AttrValidator.php deleted file mode 100755 index 829a0f8f22..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/AttrValidator.php +++ /dev/null @@ -1,162 +0,0 @@ -getHTMLDefinition(); - $e =& $context->get('ErrorCollector', true); - - // initialize IDAccumulator if necessary - $ok =& $context->get('IDAccumulator', true); - if (!$ok) { - $id_accumulator = HTMLPurifier_IDAccumulator::build($config, $context); - $context->register('IDAccumulator', $id_accumulator); - } - - // initialize CurrentToken if necessary - $current_token =& $context->get('CurrentToken', true); - if (!$current_token) $context->register('CurrentToken', $token); - - if ( - !$token instanceof HTMLPurifier_Token_Start && - !$token instanceof HTMLPurifier_Token_Empty - ) return $token; - - // create alias to global definition array, see also $defs - // DEFINITION CALL - $d_defs = $definition->info_global_attr; - - // don't update token until the very end, to ensure an atomic update - $attr = $token->attr; - - // do global transformations (pre) - // nothing currently utilizes this - foreach ($definition->info_attr_transform_pre as $transform) { - $attr = $transform->transform($o = $attr, $config, $context); - if ($e) { - if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr); - } - } - - // do local transformations only applicable to this element (pre) - // ex.

to

- foreach ($definition->info[$token->name]->attr_transform_pre as $transform) { - $attr = $transform->transform($o = $attr, $config, $context); - if ($e) { - if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr); - } - } - - // create alias to this element's attribute definition array, see - // also $d_defs (global attribute definition array) - // DEFINITION CALL - $defs = $definition->info[$token->name]->attr; - - $attr_key = false; - $context->register('CurrentAttr', $attr_key); - - // iterate through all the attribute keypairs - // Watch out for name collisions: $key has previously been used - foreach ($attr as $attr_key => $value) { - - // call the definition - if ( isset($defs[$attr_key]) ) { - // there is a local definition defined - if ($defs[$attr_key] === false) { - // We've explicitly been told not to allow this element. - // This is usually when there's a global definition - // that must be overridden. - // Theoretically speaking, we could have a - // AttrDef_DenyAll, but this is faster! - $result = false; - } else { - // validate according to the element's definition - $result = $defs[$attr_key]->validate( - $value, $config, $context - ); - } - } elseif ( isset($d_defs[$attr_key]) ) { - // there is a global definition defined, validate according - // to the global definition - $result = $d_defs[$attr_key]->validate( - $value, $config, $context - ); - } else { - // system never heard of the attribute? DELETE! - $result = false; - } - - // put the results into effect - if ($result === false || $result === null) { - // this is a generic error message that should replaced - // with more specific ones when possible - if ($e) $e->send(E_ERROR, 'AttrValidator: Attribute removed'); - - // remove the attribute - unset($attr[$attr_key]); - } elseif (is_string($result)) { - // generally, if a substitution is happening, there - // was some sort of implicit correction going on. We'll - // delegate it to the attribute classes to say exactly what. - - // simple substitution - $attr[$attr_key] = $result; - } else { - // nothing happens - } - - // we'd also want slightly more complicated substitution - // involving an array as the return value, - // although we're not sure how colliding attributes would - // resolve (certain ones would be completely overriden, - // others would prepend themselves). - } - - $context->destroy('CurrentAttr'); - - // post transforms - - // global (error reporting untested) - foreach ($definition->info_attr_transform_post as $transform) { - $attr = $transform->transform($o = $attr, $config, $context); - if ($e) { - if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr); - } - } - - // local (error reporting untested) - foreach ($definition->info[$token->name]->attr_transform_post as $transform) { - $attr = $transform->transform($o = $attr, $config, $context); - if ($e) { - if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr); - } - } - - $token->attr = $attr; - - // destroy CurrentToken if we made it ourselves - if (!$current_token) $context->destroy('CurrentToken'); - - } - - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Bootstrap.php b/oc-includes/htmlpurifier/HTMLPurifier/Bootstrap.php deleted file mode 100755 index ae50332031..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Bootstrap.php +++ /dev/null @@ -1,109 +0,0 @@ - -if (!defined('PHP_EOL')) { - switch (strtoupper(substr(PHP_OS, 0, 3))) { - case 'WIN': - define('PHP_EOL', "\r\n"); - break; - case 'DAR': - define('PHP_EOL', "\r"); - break; - default: - define('PHP_EOL', "\n"); - } -} - -/** - * Bootstrap class that contains meta-functionality for HTML Purifier such as - * the autoload function. - * - * @note - * This class may be used without any other files from HTML Purifier. - */ -class HTMLPurifier_Bootstrap -{ - - /** - * Autoload function for HTML Purifier - * @param $class Class to load - */ - public static function autoload($class) { - $file = HTMLPurifier_Bootstrap::getPath($class); - if (!$file) return false; - // Technically speaking, it should be ok and more efficient to - // just do 'require', but Antonio Parraga reports that with - // Zend extensions such as Zend debugger and APC, this invariant - // may be broken. Since we have efficient alternatives, pay - // the cost here and avoid the bug. - require_once HTMLPURIFIER_PREFIX . '/' . $file; - return true; - } - - /** - * Returns the path for a specific class. - */ - public static function getPath($class) { - if (strncmp('HTMLPurifier', $class, 12) !== 0) return false; - // Custom implementations - if (strncmp('HTMLPurifier_Language_', $class, 22) === 0) { - $code = str_replace('_', '-', substr($class, 22)); - $file = 'HTMLPurifier/Language/classes/' . $code . '.php'; - } else { - $file = str_replace('_', '/', $class) . '.php'; - } - if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) return false; - return $file; - } - - /** - * "Pre-registers" our autoloader on the SPL stack. - */ - public static function registerAutoload() { - $autoload = array('HTMLPurifier_Bootstrap', 'autoload'); - if ( ($funcs = spl_autoload_functions()) === false ) { - spl_autoload_register($autoload); - } elseif (function_exists('spl_autoload_unregister')) { - if (version_compare(PHP_VERSION, '5.3.0', '>=')) { - // prepend flag exists, no need for shenanigans - spl_autoload_register($autoload, true, true); - } else { - $buggy = version_compare(PHP_VERSION, '5.2.11', '<'); - $compat = version_compare(PHP_VERSION, '5.1.2', '<=') && - version_compare(PHP_VERSION, '5.1.0', '>='); - foreach ($funcs as $func) { - if ($buggy && is_array($func)) { - // :TRICKY: There are some compatibility issues and some - // places where we need to error out - $reflector = new ReflectionMethod($func[0], $func[1]); - if (!$reflector->isStatic()) { - throw new Exception(' - HTML Purifier autoloader registrar is not compatible - with non-static object methods due to PHP Bug #44144; - Please do not use HTMLPurifier.autoload.php (or any - file that includes this file); instead, place the code: - spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\')) - after your own autoloaders. - '); - } - // Suprisingly, spl_autoload_register supports the - // Class::staticMethod callback format, although call_user_func doesn't - if ($compat) $func = implode('::', $func); - } - spl_autoload_unregister($func); - } - spl_autoload_register($autoload); - foreach ($funcs as $func) spl_autoload_register($func); - } - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/CSSDefinition.php b/oc-includes/htmlpurifier/HTMLPurifier/CSSDefinition.php deleted file mode 100755 index 8c4c3127bc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/CSSDefinition.php +++ /dev/null @@ -1,328 +0,0 @@ -info['text-align'] = new HTMLPurifier_AttrDef_Enum( - array('left', 'right', 'center', 'justify'), false); - - $border_style = - $this->info['border-bottom-style'] = - $this->info['border-right-style'] = - $this->info['border-left-style'] = - $this->info['border-top-style'] = new HTMLPurifier_AttrDef_Enum( - array('none', 'hidden', 'dotted', 'dashed', 'solid', 'double', - 'groove', 'ridge', 'inset', 'outset'), false); - - $this->info['border-style'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_style); - - $this->info['clear'] = new HTMLPurifier_AttrDef_Enum( - array('none', 'left', 'right', 'both'), false); - $this->info['float'] = new HTMLPurifier_AttrDef_Enum( - array('none', 'left', 'right'), false); - $this->info['font-style'] = new HTMLPurifier_AttrDef_Enum( - array('normal', 'italic', 'oblique'), false); - $this->info['font-variant'] = new HTMLPurifier_AttrDef_Enum( - array('normal', 'small-caps'), false); - - $uri_or_none = new HTMLPurifier_AttrDef_CSS_Composite( - array( - new HTMLPurifier_AttrDef_Enum(array('none')), - new HTMLPurifier_AttrDef_CSS_URI() - ) - ); - - $this->info['list-style-position'] = new HTMLPurifier_AttrDef_Enum( - array('inside', 'outside'), false); - $this->info['list-style-type'] = new HTMLPurifier_AttrDef_Enum( - array('disc', 'circle', 'square', 'decimal', 'lower-roman', - 'upper-roman', 'lower-alpha', 'upper-alpha', 'none'), false); - $this->info['list-style-image'] = $uri_or_none; - - $this->info['list-style'] = new HTMLPurifier_AttrDef_CSS_ListStyle($config); - - $this->info['text-transform'] = new HTMLPurifier_AttrDef_Enum( - array('capitalize', 'uppercase', 'lowercase', 'none'), false); - $this->info['color'] = new HTMLPurifier_AttrDef_CSS_Color(); - - $this->info['background-image'] = $uri_or_none; - $this->info['background-repeat'] = new HTMLPurifier_AttrDef_Enum( - array('repeat', 'repeat-x', 'repeat-y', 'no-repeat') - ); - $this->info['background-attachment'] = new HTMLPurifier_AttrDef_Enum( - array('scroll', 'fixed') - ); - $this->info['background-position'] = new HTMLPurifier_AttrDef_CSS_BackgroundPosition(); - - $border_color = - $this->info['border-top-color'] = - $this->info['border-bottom-color'] = - $this->info['border-left-color'] = - $this->info['border-right-color'] = - $this->info['background-color'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('transparent')), - new HTMLPurifier_AttrDef_CSS_Color() - )); - - $this->info['background'] = new HTMLPurifier_AttrDef_CSS_Background($config); - - $this->info['border-color'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_color); - - $border_width = - $this->info['border-top-width'] = - $this->info['border-bottom-width'] = - $this->info['border-left-width'] = - $this->info['border-right-width'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('thin', 'medium', 'thick')), - new HTMLPurifier_AttrDef_CSS_Length('0') //disallow negative - )); - - $this->info['border-width'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_width); - - $this->info['letter-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('normal')), - new HTMLPurifier_AttrDef_CSS_Length() - )); - - $this->info['word-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('normal')), - new HTMLPurifier_AttrDef_CSS_Length() - )); - - $this->info['font-size'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('xx-small', 'x-small', - 'small', 'medium', 'large', 'x-large', 'xx-large', - 'larger', 'smaller')), - new HTMLPurifier_AttrDef_CSS_Percentage(), - new HTMLPurifier_AttrDef_CSS_Length() - )); - - $this->info['line-height'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('normal')), - new HTMLPurifier_AttrDef_CSS_Number(true), // no negatives - new HTMLPurifier_AttrDef_CSS_Length('0'), - new HTMLPurifier_AttrDef_CSS_Percentage(true) - )); - - $margin = - $this->info['margin-top'] = - $this->info['margin-bottom'] = - $this->info['margin-left'] = - $this->info['margin-right'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_CSS_Length(), - new HTMLPurifier_AttrDef_CSS_Percentage(), - new HTMLPurifier_AttrDef_Enum(array('auto')) - )); - - $this->info['margin'] = new HTMLPurifier_AttrDef_CSS_Multiple($margin); - - // non-negative - $padding = - $this->info['padding-top'] = - $this->info['padding-bottom'] = - $this->info['padding-left'] = - $this->info['padding-right'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_CSS_Length('0'), - new HTMLPurifier_AttrDef_CSS_Percentage(true) - )); - - $this->info['padding'] = new HTMLPurifier_AttrDef_CSS_Multiple($padding); - - $this->info['text-indent'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_CSS_Length(), - new HTMLPurifier_AttrDef_CSS_Percentage() - )); - - $trusted_wh = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_CSS_Length('0'), - new HTMLPurifier_AttrDef_CSS_Percentage(true), - new HTMLPurifier_AttrDef_Enum(array('auto')) - )); - $max = $config->get('CSS.MaxImgLength'); - - $this->info['width'] = - $this->info['height'] = - $max === null ? - $trusted_wh : - new HTMLPurifier_AttrDef_Switch('img', - // For img tags: - new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_CSS_Length('0', $max), - new HTMLPurifier_AttrDef_Enum(array('auto')) - )), - // For everyone else: - $trusted_wh - ); - - $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration(); - - $this->info['font-family'] = new HTMLPurifier_AttrDef_CSS_FontFamily(); - - // this could use specialized code - $this->info['font-weight'] = new HTMLPurifier_AttrDef_Enum( - array('normal', 'bold', 'bolder', 'lighter', '100', '200', '300', - '400', '500', '600', '700', '800', '900'), false); - - // MUST be called after other font properties, as it references - // a CSSDefinition object - $this->info['font'] = new HTMLPurifier_AttrDef_CSS_Font($config); - - // same here - $this->info['border'] = - $this->info['border-bottom'] = - $this->info['border-top'] = - $this->info['border-left'] = - $this->info['border-right'] = new HTMLPurifier_AttrDef_CSS_Border($config); - - $this->info['border-collapse'] = new HTMLPurifier_AttrDef_Enum(array( - 'collapse', 'separate')); - - $this->info['caption-side'] = new HTMLPurifier_AttrDef_Enum(array( - 'top', 'bottom')); - - $this->info['table-layout'] = new HTMLPurifier_AttrDef_Enum(array( - 'auto', 'fixed')); - - $this->info['vertical-align'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Enum(array('baseline', 'sub', 'super', - 'top', 'text-top', 'middle', 'bottom', 'text-bottom')), - new HTMLPurifier_AttrDef_CSS_Length(), - new HTMLPurifier_AttrDef_CSS_Percentage() - )); - - $this->info['border-spacing'] = new HTMLPurifier_AttrDef_CSS_Multiple(new HTMLPurifier_AttrDef_CSS_Length(), 2); - - // These CSS properties don't work on many browsers, but we live - // in THE FUTURE! - $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(array('nowrap', 'normal', 'pre', 'pre-wrap', 'pre-line')); - - if ($config->get('CSS.Proprietary')) { - $this->doSetupProprietary($config); - } - - if ($config->get('CSS.AllowTricky')) { - $this->doSetupTricky($config); - } - - if ($config->get('CSS.Trusted')) { - $this->doSetupTrusted($config); - } - - $allow_important = $config->get('CSS.AllowImportant'); - // wrap all attr-defs with decorator that handles !important - foreach ($this->info as $k => $v) { - $this->info[$k] = new HTMLPurifier_AttrDef_CSS_ImportantDecorator($v, $allow_important); - } - - $this->setupConfigStuff($config); - } - - protected function doSetupProprietary($config) { - // Internet Explorer only scrollbar colors - $this->info['scrollbar-arrow-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - $this->info['scrollbar-base-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - $this->info['scrollbar-darkshadow-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - $this->info['scrollbar-face-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - - // technically not proprietary, but CSS3, and no one supports it - $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); - $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); - $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); - - // only opacity, for now - $this->info['filter'] = new HTMLPurifier_AttrDef_CSS_Filter(); - - // more CSS3 - $this->info['page-break-after'] = - $this->info['page-break-before'] = new HTMLPurifier_AttrDef_Enum(array('auto','always','avoid','left','right')); - $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto','avoid')); - - } - - protected function doSetupTricky($config) { - $this->info['display'] = new HTMLPurifier_AttrDef_Enum(array( - 'inline', 'block', 'list-item', 'run-in', 'compact', - 'marker', 'table', 'inline-block', 'inline-table', 'table-row-group', - 'table-header-group', 'table-footer-group', 'table-row', - 'table-column-group', 'table-column', 'table-cell', 'table-caption', 'none' - )); - $this->info['visibility'] = new HTMLPurifier_AttrDef_Enum(array( - 'visible', 'hidden', 'collapse' - )); - $this->info['overflow'] = new HTMLPurifier_AttrDef_Enum(array('visible', 'hidden', 'auto', 'scroll')); - } - - protected function doSetupTrusted($config) { - $this->info['position'] = new HTMLPurifier_AttrDef_Enum(array( - 'static', 'relative', 'absolute', 'fixed' - )); - $this->info['top'] = - $this->info['left'] = - $this->info['right'] = - $this->info['bottom'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_CSS_Length(), - new HTMLPurifier_AttrDef_CSS_Percentage(), - new HTMLPurifier_AttrDef_Enum(array('auto')), - )); - $this->info['z-index'] = new HTMLPurifier_AttrDef_CSS_Composite(array( - new HTMLPurifier_AttrDef_Integer(), - new HTMLPurifier_AttrDef_Enum(array('auto')), - )); - } - - /** - * Performs extra config-based processing. Based off of - * HTMLPurifier_HTMLDefinition. - * @todo Refactor duplicate elements into common class (probably using - * composition, not inheritance). - */ - protected function setupConfigStuff($config) { - - // setup allowed elements - $support = "(for information on implementing this, see the ". - "support forums) "; - $allowed_properties = $config->get('CSS.AllowedProperties'); - if ($allowed_properties !== null) { - foreach ($this->info as $name => $d) { - if(!isset($allowed_properties[$name])) unset($this->info[$name]); - unset($allowed_properties[$name]); - } - // emit errors - foreach ($allowed_properties as $name => $d) { - // :TODO: Is this htmlspecialchars() call really necessary? - $name = htmlspecialchars($name); - trigger_error("Style attribute '$name' is not supported $support", E_USER_WARNING); - } - } - - $forbidden_properties = $config->get('CSS.ForbiddenProperties'); - if ($forbidden_properties !== null) { - foreach ($this->info as $name => $d) { - if (isset($forbidden_properties[$name])) { - unset($this->info[$name]); - } - } - } - - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef.php deleted file mode 100755 index c5d5216dab..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef.php +++ /dev/null @@ -1,48 +0,0 @@ -elements; - } - - /** - * Validates nodes according to definition and returns modification. - * - * @param $tokens_of_children Array of HTMLPurifier_Token - * @param $config HTMLPurifier_Config object - * @param $context HTMLPurifier_Context object - * @return bool true to leave nodes as is - * @return bool false to remove parent node - * @return array of replacement child tokens - */ - abstract public function validateChildren($tokens_of_children, $config, $context); -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Chameleon.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Chameleon.php deleted file mode 100755 index 15c364ee33..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Chameleon.php +++ /dev/null @@ -1,48 +0,0 @@ -inline = new HTMLPurifier_ChildDef_Optional($inline); - $this->block = new HTMLPurifier_ChildDef_Optional($block); - $this->elements = $this->block->elements; - } - - public function validateChildren($tokens_of_children, $config, $context) { - if ($context->get('IsInline') === false) { - return $this->block->validateChildren( - $tokens_of_children, $config, $context); - } else { - return $this->inline->validateChildren( - $tokens_of_children, $config, $context); - } - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Custom.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Custom.php deleted file mode 100755 index b68047b4b5..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Custom.php +++ /dev/null @@ -1,90 +0,0 @@ -dtd_regex = $dtd_regex; - $this->_compileRegex(); - } - /** - * Compiles the PCRE regex from a DTD regex ($dtd_regex to $_pcre_regex) - */ - protected function _compileRegex() { - $raw = str_replace(' ', '', $this->dtd_regex); - if ($raw{0} != '(') { - $raw = "($raw)"; - } - $el = '[#a-zA-Z0-9_.-]+'; - $reg = $raw; - - // COMPLICATED! AND MIGHT BE BUGGY! I HAVE NO CLUE WHAT I'M - // DOING! Seriously: if there's problems, please report them. - - // collect all elements into the $elements array - preg_match_all("/$el/", $reg, $matches); - foreach ($matches[0] as $match) { - $this->elements[$match] = true; - } - - // setup all elements as parentheticals with leading commas - $reg = preg_replace("/$el/", '(,\\0)', $reg); - - // remove commas when they were not solicited - $reg = preg_replace("/([^,(|]\(+),/", '\\1', $reg); - - // remove all non-paranthetical commas: they are handled by first regex - $reg = preg_replace("/,\(/", '(', $reg); - - $this->_pcre_regex = $reg; - } - public function validateChildren($tokens_of_children, $config, $context) { - $list_of_children = ''; - $nesting = 0; // depth into the nest - foreach ($tokens_of_children as $token) { - if (!empty($token->is_whitespace)) continue; - - $is_child = ($nesting == 0); // direct - - if ($token instanceof HTMLPurifier_Token_Start) { - $nesting++; - } elseif ($token instanceof HTMLPurifier_Token_End) { - $nesting--; - } - - if ($is_child) { - $list_of_children .= $token->name . ','; - } - } - // add leading comma to deal with stray comma declarations - $list_of_children = ',' . rtrim($list_of_children, ','); - $okay = - preg_match( - '/^,?'.$this->_pcre_regex.'$/', - $list_of_children - ); - - return (bool) $okay; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Empty.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Empty.php deleted file mode 100755 index 13171f6651..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Empty.php +++ /dev/null @@ -1,20 +0,0 @@ - true, 'ul' => true, 'ol' => true); - public function validateChildren($tokens_of_children, $config, $context) { - // Flag for subclasses - $this->whitespace = false; - - // if there are no tokens, delete parent node - if (empty($tokens_of_children)) return false; - - // the new set of children - $result = array(); - - // current depth into the nest - $nesting = 0; - - // a little sanity check to make sure it's not ALL whitespace - $all_whitespace = true; - - $seen_li = false; - $need_close_li = false; - - foreach ($tokens_of_children as $token) { - if (!empty($token->is_whitespace)) { - $result[] = $token; - continue; - } - $all_whitespace = false; // phew, we're not talking about whitespace - - if ($nesting == 1 && $need_close_li) { - $result[] = new HTMLPurifier_Token_End('li'); - $nesting--; - $need_close_li = false; - } - - $is_child = ($nesting == 0); - - if ($token instanceof HTMLPurifier_Token_Start) { - $nesting++; - } elseif ($token instanceof HTMLPurifier_Token_End) { - $nesting--; - } - - if ($is_child) { - if ($token->name === 'li') { - // good - $seen_li = true; - } elseif ($token->name === 'ul' || $token->name === 'ol') { - // we want to tuck this into the previous li - $need_close_li = true; - $nesting++; - if (!$seen_li) { - // create a new li element - $result[] = new HTMLPurifier_Token_Start('li'); - } else { - // backtrack until found - while(true) { - $t = array_pop($result); - if ($t instanceof HTMLPurifier_Token_End) { - // XXX actually, these invariants could very plausibly be violated - // if we are doing silly things with modifying the set of allowed elements. - // FORTUNATELY, it doesn't make a difference, since the allowed - // elements are hard-coded here! - if ($t->name !== 'li') { - trigger_error("Only li present invariant violated in List ChildDef", E_USER_ERROR); - return false; - } - break; - } elseif ($t instanceof HTMLPurifier_Token_Empty) { // bleagh - if ($t->name !== 'li') { - trigger_error("Only li present invariant violated in List ChildDef", E_USER_ERROR); - return false; - } - // XXX this should have a helper for it... - $result[] = new HTMLPurifier_Token_Start('li', $t->attr, $t->line, $t->col, $t->armor); - break; - } else { - if (!$t->is_whitespace) { - trigger_error("Only whitespace present invariant violated in List ChildDef", E_USER_ERROR); - return false; - } - } - } - } - } else { - // start wrapping (this doesn't precisely mimic - // browser behavior, but what browsers do is kind of - // hard to mimic in a standards compliant way - // XXX Actually, this has no impact in practice, - // because this gets handled earlier. Arguably, - // we should rip out all of that processing - $result[] = new HTMLPurifier_Token_Start('li'); - $nesting++; - $seen_li = true; - $need_close_li = true; - } - } - $result[] = $token; - } - if ($need_close_li) { - $result[] = new HTMLPurifier_Token_End('li'); - } - if (empty($result)) return false; - if ($all_whitespace) { - return false; - } - if ($tokens_of_children == $result) return true; - return $result; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Optional.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Optional.php deleted file mode 100755 index 32bcb9898e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Optional.php +++ /dev/null @@ -1,26 +0,0 @@ -whitespace) return $tokens_of_children; - else return array(); - } - return $result; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Required.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Required.php deleted file mode 100755 index 4889f249b8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Required.php +++ /dev/null @@ -1,117 +0,0 @@ - $x) { - $elements[$i] = true; - if (empty($i)) unset($elements[$i]); // remove blank - } - } - $this->elements = $elements; - } - public $allow_empty = false; - public $type = 'required'; - public function validateChildren($tokens_of_children, $config, $context) { - // Flag for subclasses - $this->whitespace = false; - - // if there are no tokens, delete parent node - if (empty($tokens_of_children)) return false; - - // the new set of children - $result = array(); - - // current depth into the nest - $nesting = 0; - - // whether or not we're deleting a node - $is_deleting = false; - - // whether or not parsed character data is allowed - // this controls whether or not we silently drop a tag - // or generate escaped HTML from it - $pcdata_allowed = isset($this->elements['#PCDATA']); - - // a little sanity check to make sure it's not ALL whitespace - $all_whitespace = true; - - // some configuration - $escape_invalid_children = $config->get('Core.EscapeInvalidChildren'); - - // generator - $gen = new HTMLPurifier_Generator($config, $context); - - foreach ($tokens_of_children as $token) { - if (!empty($token->is_whitespace)) { - $result[] = $token; - continue; - } - $all_whitespace = false; // phew, we're not talking about whitespace - - $is_child = ($nesting == 0); - - if ($token instanceof HTMLPurifier_Token_Start) { - $nesting++; - } elseif ($token instanceof HTMLPurifier_Token_End) { - $nesting--; - } - - if ($is_child) { - $is_deleting = false; - if (!isset($this->elements[$token->name])) { - $is_deleting = true; - if ($pcdata_allowed && $token instanceof HTMLPurifier_Token_Text) { - $result[] = $token; - } elseif ($pcdata_allowed && $escape_invalid_children) { - $result[] = new HTMLPurifier_Token_Text( - $gen->generateFromToken($token) - ); - } - continue; - } - } - if (!$is_deleting || ($pcdata_allowed && $token instanceof HTMLPurifier_Token_Text)) { - $result[] = $token; - } elseif ($pcdata_allowed && $escape_invalid_children) { - $result[] = - new HTMLPurifier_Token_Text( - $gen->generateFromToken($token) - ); - } else { - // drop silently - } - } - if (empty($result)) return false; - if ($all_whitespace) { - $this->whitespace = true; - return false; - } - if ($tokens_of_children == $result) return true; - return $result; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/StrictBlockquote.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/StrictBlockquote.php deleted file mode 100755 index dfae8a6e5e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/StrictBlockquote.php +++ /dev/null @@ -1,88 +0,0 @@ -init($config); - return $this->fake_elements; - } - - public function validateChildren($tokens_of_children, $config, $context) { - - $this->init($config); - - // trick the parent class into thinking it allows more - $this->elements = $this->fake_elements; - $result = parent::validateChildren($tokens_of_children, $config, $context); - $this->elements = $this->real_elements; - - if ($result === false) return array(); - if ($result === true) $result = $tokens_of_children; - - $def = $config->getHTMLDefinition(); - $block_wrap_start = new HTMLPurifier_Token_Start($def->info_block_wrapper); - $block_wrap_end = new HTMLPurifier_Token_End( $def->info_block_wrapper); - $is_inline = false; - $depth = 0; - $ret = array(); - - // assuming that there are no comment tokens - foreach ($result as $i => $token) { - $token = $result[$i]; - // ifs are nested for readability - if (!$is_inline) { - if (!$depth) { - if ( - ($token instanceof HTMLPurifier_Token_Text && !$token->is_whitespace) || - (!$token instanceof HTMLPurifier_Token_Text && !isset($this->elements[$token->name])) - ) { - $is_inline = true; - $ret[] = $block_wrap_start; - } - } - } else { - if (!$depth) { - // starting tokens have been inline text / empty - if ($token instanceof HTMLPurifier_Token_Start || $token instanceof HTMLPurifier_Token_Empty) { - if (isset($this->elements[$token->name])) { - // ended - $ret[] = $block_wrap_end; - $is_inline = false; - } - } - } - } - $ret[] = $token; - if ($token instanceof HTMLPurifier_Token_Start) $depth++; - if ($token instanceof HTMLPurifier_Token_End) $depth--; - } - if ($is_inline) $ret[] = $block_wrap_end; - return $ret; - } - - private function init($config) { - if (!$this->init) { - $def = $config->getHTMLDefinition(); - // allow all inline elements - $this->real_elements = $this->elements; - $this->fake_elements = $def->info_content_sets['Flow']; - $this->fake_elements['#PCDATA'] = true; - $this->init = true; - } - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Table.php b/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Table.php deleted file mode 100755 index 9a93421a1a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ChildDef/Table.php +++ /dev/null @@ -1,227 +0,0 @@ - true, 'tbody' => true, 'thead' => true, - 'tfoot' => true, 'caption' => true, 'colgroup' => true, 'col' => true); - public function __construct() {} - public function validateChildren($tokens_of_children, $config, $context) { - if (empty($tokens_of_children)) return false; - - // this ensures that the loop gets run one last time before closing - // up. It's a little bit of a hack, but it works! Just make sure you - // get rid of the token later. - $tokens_of_children[] = false; - - // only one of these elements is allowed in a table - $caption = false; - $thead = false; - $tfoot = false; - - // as many of these as you want - $cols = array(); - $content = array(); - - $nesting = 0; // current depth so we can determine nodes - $is_collecting = false; // are we globbing together tokens to package - // into one of the collectors? - $collection = array(); // collected nodes - $tag_index = 0; // the first node might be whitespace, - // so this tells us where the start tag is - $tbody_mode = false; // if true, then we need to wrap any stray - // s with a . - - foreach ($tokens_of_children as $token) { - $is_child = ($nesting == 0); - - if ($token === false) { - // terminating sequence started - } elseif ($token instanceof HTMLPurifier_Token_Start) { - $nesting++; - } elseif ($token instanceof HTMLPurifier_Token_End) { - $nesting--; - } - - // handle node collection - if ($is_collecting) { - if ($is_child) { - // okay, let's stash the tokens away - // first token tells us the type of the collection - switch ($collection[$tag_index]->name) { - case 'tbody': - $tbody_mode = true; - case 'tr': - $content[] = $collection; - break; - case 'caption': - if ($caption !== false) break; - $caption = $collection; - break; - case 'thead': - case 'tfoot': - $tbody_mode = true; - // XXX This breaks rendering properties with - // Firefox, which never floats a to - // the top. Ever. (Our scheme will float the - // first to the top.) So maybe - // s that are not first should be - // turned into ? Very tricky, indeed. - - // access the appropriate variable, $thead or $tfoot - $var = $collection[$tag_index]->name; - if ($$var === false) { - $$var = $collection; - } else { - // Oops, there's a second one! What - // should we do? Current behavior is to - // transmutate the first and last entries into - // tbody tags, and then put into content. - // Maybe a better idea is to *attach - // it* to the existing thead or tfoot? - // We don't do this, because Firefox - // doesn't float an extra tfoot to the - // bottom like it does for the first one. - $collection[$tag_index]->name = 'tbody'; - $collection[count($collection)-1]->name = 'tbody'; - $content[] = $collection; - } - break; - case 'colgroup': - $cols[] = $collection; - break; - } - $collection = array(); - $is_collecting = false; - $tag_index = 0; - } else { - // add the node to the collection - $collection[] = $token; - } - } - - // terminate - if ($token === false) break; - - if ($is_child) { - // determine what we're dealing with - if ($token->name == 'col') { - // the only empty tag in the possie, we can handle it - // immediately - $cols[] = array_merge($collection, array($token)); - $collection = array(); - $tag_index = 0; - continue; - } - switch($token->name) { - case 'caption': - case 'colgroup': - case 'thead': - case 'tfoot': - case 'tbody': - case 'tr': - $is_collecting = true; - $collection[] = $token; - continue; - default: - if (!empty($token->is_whitespace)) { - $collection[] = $token; - $tag_index++; - } - continue; - } - } - } - - if (empty($content)) return false; - - $ret = array(); - if ($caption !== false) $ret = array_merge($ret, $caption); - if ($cols !== false) foreach ($cols as $token_array) $ret = array_merge($ret, $token_array); - if ($thead !== false) $ret = array_merge($ret, $thead); - if ($tfoot !== false) $ret = array_merge($ret, $tfoot); - - if ($tbody_mode) { - // a little tricky, since the start of the collection may be - // whitespace - $inside_tbody = false; - foreach ($content as $token_array) { - // find the starting token - foreach ($token_array as $t) { - if ($t->name === 'tr' || $t->name === 'tbody') { - break; - } - } // iterator variable carries over - if ($t->name === 'tr') { - if ($inside_tbody) { - $ret = array_merge($ret, $token_array); - } else { - $ret[] = new HTMLPurifier_Token_Start('tbody'); - $ret = array_merge($ret, $token_array); - $inside_tbody = true; - } - } elseif ($t->name === 'tbody') { - if ($inside_tbody) { - $ret[] = new HTMLPurifier_Token_End('tbody'); - $inside_tbody = false; - $ret = array_merge($ret, $token_array); - } else { - $ret = array_merge($ret, $token_array); - } - } else { - trigger_error("tr/tbody in content invariant failed in Table ChildDef", E_USER_ERROR); - } - } - if ($inside_tbody) { - $ret[] = new HTMLPurifier_Token_End('tbody'); - } - } else { - foreach ($content as $token_array) { - // invariant: everything in here is s - $ret = array_merge($ret, $token_array); - } - } - - if (!empty($collection) && $is_collecting == false){ - // grab the trailing space - $ret = array_merge($ret, $collection); - } - - array_pop($tokens_of_children); // remove phantom token - - return ($ret === $tokens_of_children) ? true : $ret; - - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Config.php b/oc-includes/htmlpurifier/HTMLPurifier/Config.php deleted file mode 100755 index 489ea0464a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Config.php +++ /dev/null @@ -1,710 +0,0 @@ -defaultPlist; - $this->plist = new HTMLPurifier_PropertyList($parent); - $this->def = $definition; // keep a copy around for checking - $this->parser = new HTMLPurifier_VarParser_Flexible(); - } - - /** - * Convenience constructor that creates a config object based on a mixed var - * @param mixed $config Variable that defines the state of the config - * object. Can be: a HTMLPurifier_Config() object, - * an array of directives based on loadArray(), - * or a string filename of an ini file. - * @param HTMLPurifier_ConfigSchema Schema object - * @return Configured HTMLPurifier_Config object - */ - public static function create($config, $schema = null) { - if ($config instanceof HTMLPurifier_Config) { - // pass-through - return $config; - } - if (!$schema) { - $ret = HTMLPurifier_Config::createDefault(); - } else { - $ret = new HTMLPurifier_Config($schema); - } - if (is_string($config)) $ret->loadIni($config); - elseif (is_array($config)) $ret->loadArray($config); - return $ret; - } - - /** - * Creates a new config object that inherits from a previous one. - * @param HTMLPurifier_Config $config Configuration object to inherit - * from. - * @return HTMLPurifier_Config object with $config as its parent. - */ - public static function inherit(HTMLPurifier_Config $config) { - return new HTMLPurifier_Config($config->def, $config->plist); - } - - /** - * Convenience constructor that creates a default configuration object. - * @return Default HTMLPurifier_Config object. - */ - public static function createDefault() { - $definition = HTMLPurifier_ConfigSchema::instance(); - $config = new HTMLPurifier_Config($definition); - return $config; - } - - /** - * Retreives a value from the configuration. - * @param $key String key - */ - public function get($key, $a = null) { - if ($a !== null) { - $this->triggerError("Using deprecated API: use \$config->get('$key.$a') instead", E_USER_WARNING); - $key = "$key.$a"; - } - if (!$this->finalized) $this->autoFinalize(); - if (!isset($this->def->info[$key])) { - // can't add % due to SimpleTest bug - $this->triggerError('Cannot retrieve value of undefined directive ' . htmlspecialchars($key), - E_USER_WARNING); - return; - } - if (isset($this->def->info[$key]->isAlias)) { - $d = $this->def->info[$key]; - $this->triggerError('Cannot get value from aliased directive, use real name ' . $d->key, - E_USER_ERROR); - return; - } - if ($this->lock) { - list($ns) = explode('.', $key); - if ($ns !== $this->lock) { - $this->triggerError('Cannot get value of namespace ' . $ns . ' when lock for ' . $this->lock . ' is active, this probably indicates a Definition setup method is accessing directives that are not within its namespace', E_USER_ERROR); - return; - } - } - return $this->plist->get($key); - } - - /** - * Retreives an array of directives to values from a given namespace - * @param $namespace String namespace - */ - public function getBatch($namespace) { - if (!$this->finalized) $this->autoFinalize(); - $full = $this->getAll(); - if (!isset($full[$namespace])) { - $this->triggerError('Cannot retrieve undefined namespace ' . htmlspecialchars($namespace), - E_USER_WARNING); - return; - } - return $full[$namespace]; - } - - /** - * Returns a SHA-1 signature of a segment of the configuration object - * that uniquely identifies that particular configuration - * @note Revision is handled specially and is removed from the batch - * before processing! - * @param $namespace Namespace to get serial for - */ - public function getBatchSerial($namespace) { - if (empty($this->serials[$namespace])) { - $batch = $this->getBatch($namespace); - unset($batch['DefinitionRev']); - $this->serials[$namespace] = sha1(serialize($batch)); - } - return $this->serials[$namespace]; - } - - /** - * Returns a SHA-1 signature for the entire configuration object - * that uniquely identifies that particular configuration - */ - public function getSerial() { - if (empty($this->serial)) { - $this->serial = sha1(serialize($this->getAll())); - } - return $this->serial; - } - - /** - * Retrieves all directives, organized by namespace - * @warning This is a pretty inefficient function, avoid if you can - */ - public function getAll() { - if (!$this->finalized) $this->autoFinalize(); - $ret = array(); - foreach ($this->plist->squash() as $name => $value) { - list($ns, $key) = explode('.', $name, 2); - $ret[$ns][$key] = $value; - } - return $ret; - } - - /** - * Sets a value to configuration. - * @param $key String key - * @param $value Mixed value - */ - public function set($key, $value, $a = null) { - if (strpos($key, '.') === false) { - $namespace = $key; - $directive = $value; - $value = $a; - $key = "$key.$directive"; - $this->triggerError("Using deprecated API: use \$config->set('$key', ...) instead", E_USER_NOTICE); - } else { - list($namespace) = explode('.', $key); - } - if ($this->isFinalized('Cannot set directive after finalization')) return; - if (!isset($this->def->info[$key])) { - $this->triggerError('Cannot set undefined directive ' . htmlspecialchars($key) . ' to value', - E_USER_WARNING); - return; - } - $def = $this->def->info[$key]; - - if (isset($def->isAlias)) { - if ($this->aliasMode) { - $this->triggerError('Double-aliases not allowed, please fix '. - 'ConfigSchema bug with' . $key, E_USER_ERROR); - return; - } - $this->aliasMode = true; - $this->set($def->key, $value); - $this->aliasMode = false; - $this->triggerError("$key is an alias, preferred directive name is {$def->key}", E_USER_NOTICE); - return; - } - - // Raw type might be negative when using the fully optimized form - // of stdclass, which indicates allow_null == true - $rtype = is_int($def) ? $def : $def->type; - if ($rtype < 0) { - $type = -$rtype; - $allow_null = true; - } else { - $type = $rtype; - $allow_null = isset($def->allow_null); - } - - try { - $value = $this->parser->parse($value, $type, $allow_null); - } catch (HTMLPurifier_VarParserException $e) { - $this->triggerError('Value for ' . $key . ' is of invalid type, should be ' . HTMLPurifier_VarParser::getTypeName($type), E_USER_WARNING); - return; - } - if (is_string($value) && is_object($def)) { - // resolve value alias if defined - if (isset($def->aliases[$value])) { - $value = $def->aliases[$value]; - } - // check to see if the value is allowed - if (isset($def->allowed) && !isset($def->allowed[$value])) { - $this->triggerError('Value not supported, valid values are: ' . - $this->_listify($def->allowed), E_USER_WARNING); - return; - } - } - $this->plist->set($key, $value); - - // reset definitions if the directives they depend on changed - // this is a very costly process, so it's discouraged - // with finalization - if ($namespace == 'HTML' || $namespace == 'CSS' || $namespace == 'URI') { - $this->definitions[$namespace] = null; - } - - $this->serials[$namespace] = false; - } - - /** - * Convenience function for error reporting - */ - private function _listify($lookup) { - $list = array(); - foreach ($lookup as $name => $b) $list[] = $name; - return implode(', ', $list); - } - - /** - * Retrieves object reference to the HTML definition. - * @param $raw Return a copy that has not been setup yet. Must be - * called before it's been setup, otherwise won't work. - * @param $optimized If true, this method may return null, to - * indicate that a cached version of the modified - * definition object is available and no further edits - * are necessary. Consider using - * maybeGetRawHTMLDefinition, which is more explicitly - * named, instead. - */ - public function getHTMLDefinition($raw = false, $optimized = false) { - return $this->getDefinition('HTML', $raw, $optimized); - } - - /** - * Retrieves object reference to the CSS definition - * @param $raw Return a copy that has not been setup yet. Must be - * called before it's been setup, otherwise won't work. - * @param $optimized If true, this method may return null, to - * indicate that a cached version of the modified - * definition object is available and no further edits - * are necessary. Consider using - * maybeGetRawCSSDefinition, which is more explicitly - * named, instead. - */ - public function getCSSDefinition($raw = false, $optimized = false) { - return $this->getDefinition('CSS', $raw, $optimized); - } - - /** - * Retrieves object reference to the URI definition - * @param $raw Return a copy that has not been setup yet. Must be - * called before it's been setup, otherwise won't work. - * @param $optimized If true, this method may return null, to - * indicate that a cached version of the modified - * definition object is available and no further edits - * are necessary. Consider using - * maybeGetRawURIDefinition, which is more explicitly - * named, instead. - */ - public function getURIDefinition($raw = false, $optimized = false) { - return $this->getDefinition('URI', $raw, $optimized); - } - - /** - * Retrieves a definition - * @param $type Type of definition: HTML, CSS, etc - * @param $raw Whether or not definition should be returned raw - * @param $optimized Only has an effect when $raw is true. Whether - * or not to return null if the result is already present in - * the cache. This is off by default for backwards - * compatibility reasons, but you need to do things this - * way in order to ensure that caching is done properly. - * Check out enduser-customize.html for more details. - * We probably won't ever change this default, as much as the - * maybe semantics is the "right thing to do." - */ - public function getDefinition($type, $raw = false, $optimized = false) { - if ($optimized && !$raw) { - throw new HTMLPurifier_Exception("Cannot set optimized = true when raw = false"); - } - if (!$this->finalized) $this->autoFinalize(); - // temporarily suspend locks, so we can handle recursive definition calls - $lock = $this->lock; - $this->lock = null; - $factory = HTMLPurifier_DefinitionCacheFactory::instance(); - $cache = $factory->create($type, $this); - $this->lock = $lock; - if (!$raw) { - // full definition - // --------------- - // check if definition is in memory - if (!empty($this->definitions[$type])) { - $def = $this->definitions[$type]; - // check if the definition is setup - if ($def->setup) { - return $def; - } else { - $def->setup($this); - if ($def->optimized) $cache->add($def, $this); - return $def; - } - } - // check if definition is in cache - $def = $cache->get($this); - if ($def) { - // definition in cache, save to memory and return it - $this->definitions[$type] = $def; - return $def; - } - // initialize it - $def = $this->initDefinition($type); - // set it up - $this->lock = $type; - $def->setup($this); - $this->lock = null; - // save in cache - $cache->add($def, $this); - // return it - return $def; - } else { - // raw definition - // -------------- - // check preconditions - $def = null; - if ($optimized) { - if (is_null($this->get($type . '.DefinitionID'))) { - // fatally error out if definition ID not set - throw new HTMLPurifier_Exception("Cannot retrieve raw version without specifying %$type.DefinitionID"); - } - } - if (!empty($this->definitions[$type])) { - $def = $this->definitions[$type]; - if ($def->setup && !$optimized) { - $extra = $this->chatty ? " (try moving this code block earlier in your initialization)" : ""; - throw new HTMLPurifier_Exception("Cannot retrieve raw definition after it has already been setup" . $extra); - } - if ($def->optimized === null) { - $extra = $this->chatty ? " (try flushing your cache)" : ""; - throw new HTMLPurifier_Exception("Optimization status of definition is unknown" . $extra); - } - if ($def->optimized !== $optimized) { - $msg = $optimized ? "optimized" : "unoptimized"; - $extra = $this->chatty ? " (this backtrace is for the first inconsistent call, which was for a $msg raw definition)" : ""; - throw new HTMLPurifier_Exception("Inconsistent use of optimized and unoptimized raw definition retrievals" . $extra); - } - } - // check if definition was in memory - if ($def) { - if ($def->setup) { - // invariant: $optimized === true (checked above) - return null; - } else { - return $def; - } - } - // if optimized, check if definition was in cache - // (because we do the memory check first, this formulation - // is prone to cache slamming, but I think - // guaranteeing that either /all/ of the raw - // setup code or /none/ of it is run is more important.) - if ($optimized) { - // This code path only gets run once; once we put - // something in $definitions (which is guaranteed by the - // trailing code), we always short-circuit above. - $def = $cache->get($this); - if ($def) { - // save the full definition for later, but don't - // return it yet - $this->definitions[$type] = $def; - return null; - } - } - // check invariants for creation - if (!$optimized) { - if (!is_null($this->get($type . '.DefinitionID'))) { - if ($this->chatty) { - $this->triggerError("Due to a documentation error in previous version of HTML Purifier, your definitions are not being cached. If this is OK, you can remove the %$type.DefinitionRev and %$type.DefinitionID declaration. Otherwise, modify your code to use maybeGetRawDefinition, and test if the returned value is null before making any edits (if it is null, that means that a cached version is available, and no raw operations are necessary). See Customize for more details", E_USER_WARNING); - } else { - $this->triggerError("Useless DefinitionID declaration", E_USER_WARNING); - } - } - } - // initialize it - $def = $this->initDefinition($type); - $def->optimized = $optimized; - return $def; - } - throw new HTMLPurifier_Exception("The impossible happened!"); - } - - private function initDefinition($type) { - // quick checks failed, let's create the object - if ($type == 'HTML') { - $def = new HTMLPurifier_HTMLDefinition(); - } elseif ($type == 'CSS') { - $def = new HTMLPurifier_CSSDefinition(); - } elseif ($type == 'URI') { - $def = new HTMLPurifier_URIDefinition(); - } else { - throw new HTMLPurifier_Exception("Definition of $type type not supported"); - } - $this->definitions[$type] = $def; - return $def; - } - - public function maybeGetRawDefinition($name) { - return $this->getDefinition($name, true, true); - } - - public function maybeGetRawHTMLDefinition() { - return $this->getDefinition('HTML', true, true); - } - - public function maybeGetRawCSSDefinition() { - return $this->getDefinition('CSS', true, true); - } - - public function maybeGetRawURIDefinition() { - return $this->getDefinition('URI', true, true); - } - - /** - * Loads configuration values from an array with the following structure: - * Namespace.Directive => Value - * @param $config_array Configuration associative array - */ - public function loadArray($config_array) { - if ($this->isFinalized('Cannot load directives after finalization')) return; - foreach ($config_array as $key => $value) { - $key = str_replace('_', '.', $key); - if (strpos($key, '.') !== false) { - $this->set($key, $value); - } else { - $namespace = $key; - $namespace_values = $value; - foreach ($namespace_values as $directive => $value) { - $this->set($namespace .'.'. $directive, $value); - } - } - } - } - - /** - * Returns a list of array(namespace, directive) for all directives - * that are allowed in a web-form context as per an allowed - * namespaces/directives list. - * @param $allowed List of allowed namespaces/directives - */ - public static function getAllowedDirectivesForForm($allowed, $schema = null) { - if (!$schema) { - $schema = HTMLPurifier_ConfigSchema::instance(); - } - if ($allowed !== true) { - if (is_string($allowed)) $allowed = array($allowed); - $allowed_ns = array(); - $allowed_directives = array(); - $blacklisted_directives = array(); - foreach ($allowed as $ns_or_directive) { - if (strpos($ns_or_directive, '.') !== false) { - // directive - if ($ns_or_directive[0] == '-') { - $blacklisted_directives[substr($ns_or_directive, 1)] = true; - } else { - $allowed_directives[$ns_or_directive] = true; - } - } else { - // namespace - $allowed_ns[$ns_or_directive] = true; - } - } - } - $ret = array(); - foreach ($schema->info as $key => $def) { - list($ns, $directive) = explode('.', $key, 2); - if ($allowed !== true) { - if (isset($blacklisted_directives["$ns.$directive"])) continue; - if (!isset($allowed_directives["$ns.$directive"]) && !isset($allowed_ns[$ns])) continue; - } - if (isset($def->isAlias)) continue; - if ($directive == 'DefinitionID' || $directive == 'DefinitionRev') continue; - $ret[] = array($ns, $directive); - } - return $ret; - } - - /** - * Loads configuration values from $_GET/$_POST that were posted - * via ConfigForm - * @param $array $_GET or $_POST array to import - * @param $index Index/name that the config variables are in - * @param $allowed List of allowed namespaces/directives - * @param $mq_fix Boolean whether or not to enable magic quotes fix - * @param $schema Instance of HTMLPurifier_ConfigSchema to use, if not global copy - */ - public static function loadArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null) { - $ret = HTMLPurifier_Config::prepareArrayFromForm($array, $index, $allowed, $mq_fix, $schema); - $config = HTMLPurifier_Config::create($ret, $schema); - return $config; - } - - /** - * Merges in configuration values from $_GET/$_POST to object. NOT STATIC. - * @note Same parameters as loadArrayFromForm - */ - public function mergeArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true) { - $ret = HTMLPurifier_Config::prepareArrayFromForm($array, $index, $allowed, $mq_fix, $this->def); - $this->loadArray($ret); - } - - /** - * Prepares an array from a form into something usable for the more - * strict parts of HTMLPurifier_Config - */ - public static function prepareArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null) { - if ($index !== false) $array = (isset($array[$index]) && is_array($array[$index])) ? $array[$index] : array(); - $mq = $mq_fix && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc(); - - $allowed = HTMLPurifier_Config::getAllowedDirectivesForForm($allowed, $schema); - $ret = array(); - foreach ($allowed as $key) { - list($ns, $directive) = $key; - $skey = "$ns.$directive"; - if (!empty($array["Null_$skey"])) { - $ret[$ns][$directive] = null; - continue; - } - if (!isset($array[$skey])) continue; - $value = $mq ? stripslashes($array[$skey]) : $array[$skey]; - $ret[$ns][$directive] = $value; - } - return $ret; - } - - /** - * Loads configuration values from an ini file - * @param $filename Name of ini file - */ - public function loadIni($filename) { - if ($this->isFinalized('Cannot load directives after finalization')) return; - $array = parse_ini_file($filename, true); - $this->loadArray($array); - } - - /** - * Checks whether or not the configuration object is finalized. - * @param $error String error message, or false for no error - */ - public function isFinalized($error = false) { - if ($this->finalized && $error) { - $this->triggerError($error, E_USER_ERROR); - } - return $this->finalized; - } - - /** - * Finalizes configuration only if auto finalize is on and not - * already finalized - */ - public function autoFinalize() { - if ($this->autoFinalize) { - $this->finalize(); - } else { - $this->plist->squash(true); - } - } - - /** - * Finalizes a configuration object, prohibiting further change - */ - public function finalize() { - $this->finalized = true; - $this->parser = null; - } - - /** - * Produces a nicely formatted error message by supplying the - * stack frame information OUTSIDE of HTMLPurifier_Config. - */ - protected function triggerError($msg, $no) { - // determine previous stack frame - $extra = ''; - if ($this->chatty) { - $trace = debug_backtrace(); - // zip(tail(trace), trace) -- but PHP is not Haskell har har - for ($i = 0, $c = count($trace); $i < $c - 1; $i++) { - // XXX this is not correct on some versions of HTML Purifier - if ($trace[$i + 1]['class'] === 'HTMLPurifier_Config') { - continue; - } - $frame = $trace[$i]; - $extra = " invoked on line {$frame['line']} in file {$frame['file']}"; - break; - } - } - trigger_error($msg . $extra, $no); - } - - /** - * Returns a serialized form of the configuration object that can - * be reconstituted. - */ - public function serialize() { - $this->getDefinition('HTML'); - $this->getDefinition('CSS'); - $this->getDefinition('URI'); - return serialize($this); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema.php deleted file mode 100755 index fadf7a5890..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema.php +++ /dev/null @@ -1,164 +0,0 @@ - array( - * 'Directive' => new stdclass(), - * ) - * ) - * - * The stdclass may have the following properties: - * - * - If isAlias isn't set: - * - type: Integer type of directive, see HTMLPurifier_VarParser for definitions - * - allow_null: If set, this directive allows null values - * - aliases: If set, an associative array of value aliases to real values - * - allowed: If set, a lookup array of allowed (string) values - * - If isAlias is set: - * - namespace: Namespace this directive aliases to - * - name: Directive name this directive aliases to - * - * In certain degenerate cases, stdclass will actually be an integer. In - * that case, the value is equivalent to an stdclass with the type - * property set to the integer. If the integer is negative, type is - * equal to the absolute value of integer, and allow_null is true. - * - * This class is friendly with HTMLPurifier_Config. If you need introspection - * about the schema, you're better of using the ConfigSchema_Interchange, - * which uses more memory but has much richer information. - */ - public $info = array(); - - /** - * Application-wide singleton - */ - static protected $singleton; - - public function __construct() { - $this->defaultPlist = new HTMLPurifier_PropertyList(); - } - - /** - * Unserializes the default ConfigSchema. - */ - public static function makeFromSerial() { - $contents = file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema.ser'); - $r = unserialize($contents); - if (!$r) { - $hash = sha1($contents); - trigger_error("Unserialization of configuration schema failed, sha1 of file was $hash", E_USER_ERROR); - } - return $r; - } - - /** - * Retrieves an instance of the application-wide configuration definition. - */ - public static function instance($prototype = null) { - if ($prototype !== null) { - HTMLPurifier_ConfigSchema::$singleton = $prototype; - } elseif (HTMLPurifier_ConfigSchema::$singleton === null || $prototype === true) { - HTMLPurifier_ConfigSchema::$singleton = HTMLPurifier_ConfigSchema::makeFromSerial(); - } - return HTMLPurifier_ConfigSchema::$singleton; - } - - /** - * Defines a directive for configuration - * @warning Will fail of directive's namespace is defined. - * @warning This method's signature is slightly different from the legacy - * define() static method! Beware! - * @param $namespace Namespace the directive is in - * @param $name Key of directive - * @param $default Default value of directive - * @param $type Allowed type of the directive. See - * HTMLPurifier_DirectiveDef::$type for allowed values - * @param $allow_null Whether or not to allow null values - */ - public function add($key, $default, $type, $allow_null) { - $obj = new stdclass(); - $obj->type = is_int($type) ? $type : HTMLPurifier_VarParser::$types[$type]; - if ($allow_null) $obj->allow_null = true; - $this->info[$key] = $obj; - $this->defaults[$key] = $default; - $this->defaultPlist->set($key, $default); - } - - /** - * Defines a directive value alias. - * - * Directive value aliases are convenient for developers because it lets - * them set a directive to several values and get the same result. - * @param $namespace Directive's namespace - * @param $name Name of Directive - * @param $aliases Hash of aliased values to the real alias - */ - public function addValueAliases($key, $aliases) { - if (!isset($this->info[$key]->aliases)) { - $this->info[$key]->aliases = array(); - } - foreach ($aliases as $alias => $real) { - $this->info[$key]->aliases[$alias] = $real; - } - } - - /** - * Defines a set of allowed values for a directive. - * @warning This is slightly different from the corresponding static - * method definition. - * @param $namespace Namespace of directive - * @param $name Name of directive - * @param $allowed Lookup array of allowed values - */ - public function addAllowedValues($key, $allowed) { - $this->info[$key]->allowed = $allowed; - } - - /** - * Defines a directive alias for backwards compatibility - * @param $namespace - * @param $name Directive that will be aliased - * @param $new_namespace - * @param $new_name Directive that the alias will be to - */ - public function addAlias($key, $new_key) { - $obj = new stdclass; - $obj->key = $new_key; - $obj->isAlias = true; - $this->info[$key] = $obj; - } - - /** - * Replaces any stdclass that only has the type property with type integer. - */ - public function postProcess() { - foreach ($this->info as $key => $v) { - if (count((array) $v) == 1) { - $this->info[$key] = $v->type; - } elseif (count((array) $v) == 2 && isset($v->allow_null)) { - $this->info[$key] = -$v->type; - } - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php deleted file mode 100755 index c05668a706..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php +++ /dev/null @@ -1,44 +0,0 @@ -directives as $d) { - $schema->add( - $d->id->key, - $d->default, - $d->type, - $d->typeAllowsNull - ); - if ($d->allowed !== null) { - $schema->addAllowedValues( - $d->id->key, - $d->allowed - ); - } - foreach ($d->aliases as $alias) { - $schema->addAlias( - $alias->key, - $d->id->key - ); - } - if ($d->valueAliases !== null) { - $schema->addValueAliases( - $d->id->key, - $d->valueAliases - ); - } - } - $schema->postProcess(); - return $schema; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php deleted file mode 100755 index 244561a372..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php +++ /dev/null @@ -1,106 +0,0 @@ -startElement('div'); - - $purifier = HTMLPurifier::getInstance(); - $html = $purifier->purify($html); - $this->writeAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); - $this->writeRaw($html); - - $this->endElement(); // div - } - - protected function export($var) { - if ($var === array()) return 'array()'; - return var_export($var, true); - } - - public function build($interchange) { - // global access, only use as last resort - $this->interchange = $interchange; - - $this->setIndent(true); - $this->startDocument('1.0', 'UTF-8'); - $this->startElement('configdoc'); - $this->writeElement('title', $interchange->name); - - foreach ($interchange->directives as $directive) { - $this->buildDirective($directive); - } - - if ($this->namespace) $this->endElement(); // namespace - - $this->endElement(); // configdoc - $this->flush(); - } - - public function buildDirective($directive) { - - // Kludge, although I suppose having a notion of a "root namespace" - // certainly makes things look nicer when documentation is built. - // Depends on things being sorted. - if (!$this->namespace || $this->namespace !== $directive->id->getRootNamespace()) { - if ($this->namespace) $this->endElement(); // namespace - $this->namespace = $directive->id->getRootNamespace(); - $this->startElement('namespace'); - $this->writeAttribute('id', $this->namespace); - $this->writeElement('name', $this->namespace); - } - - $this->startElement('directive'); - $this->writeAttribute('id', $directive->id->toString()); - - $this->writeElement('name', $directive->id->getDirective()); - - $this->startElement('aliases'); - foreach ($directive->aliases as $alias) $this->writeElement('alias', $alias->toString()); - $this->endElement(); // aliases - - $this->startElement('constraints'); - if ($directive->version) $this->writeElement('version', $directive->version); - $this->startElement('type'); - if ($directive->typeAllowsNull) $this->writeAttribute('allow-null', 'yes'); - $this->text($directive->type); - $this->endElement(); // type - if ($directive->allowed) { - $this->startElement('allowed'); - foreach ($directive->allowed as $value => $x) $this->writeElement('value', $value); - $this->endElement(); // allowed - } - $this->writeElement('default', $this->export($directive->default)); - $this->writeAttribute('xml:space', 'preserve'); - if ($directive->external) { - $this->startElement('external'); - foreach ($directive->external as $project) $this->writeElement('project', $project); - $this->endElement(); - } - $this->endElement(); // constraints - - if ($directive->deprecatedVersion) { - $this->startElement('deprecated'); - $this->writeElement('version', $directive->deprecatedVersion); - $this->writeElement('use', $directive->deprecatedUse->toString()); - $this->endElement(); // deprecated - } - - $this->startElement('description'); - $this->writeHTMLDiv($directive->description); - $this->endElement(); // description - - $this->endElement(); // directive - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Exception.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Exception.php deleted file mode 100755 index 2671516c58..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Exception.php +++ /dev/null @@ -1,11 +0,0 @@ - array(directive info) - */ - public $directives = array(); - - /** - * Adds a directive array to $directives - */ - public function addDirective($directive) { - if (isset($this->directives[$i = $directive->id->toString()])) { - throw new HTMLPurifier_ConfigSchema_Exception("Cannot redefine directive '$i'"); - } - $this->directives[$i] = $directive; - } - - /** - * Convenience function to perform standard validation. Throws exception - * on failed validation. - */ - public function validate() { - $validator = new HTMLPurifier_ConfigSchema_Validator(); - return $validator->validate($this); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php deleted file mode 100755 index ac8be0d970..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php +++ /dev/null @@ -1,77 +0,0 @@ - true). - * Null if all values are allowed. - */ - public $allowed; - - /** - * List of aliases for the directive, - * e.g. array(new HTMLPurifier_ConfigSchema_Interchange_Id('Ns', 'Dir'))). - */ - public $aliases = array(); - - /** - * Hash of value aliases, e.g. array('alt' => 'real'). Null if value - * aliasing is disabled (necessary for non-scalar types). - */ - public $valueAliases; - - /** - * Version of HTML Purifier the directive was introduced, e.g. '1.3.1'. - * Null if the directive has always existed. - */ - public $version; - - /** - * ID of directive that supercedes this old directive, is an instance - * of HTMLPurifier_ConfigSchema_Interchange_Id. Null if not deprecated. - */ - public $deprecatedUse; - - /** - * Version of HTML Purifier this directive was deprecated. Null if not - * deprecated. - */ - public $deprecatedVersion; - - /** - * List of external projects this directive depends on, e.g. array('CSSTidy'). - */ - public $external = array(); - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php deleted file mode 100755 index b9b3c6f5cf..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php +++ /dev/null @@ -1,37 +0,0 @@ -key = $key; - } - - /** - * @warning This is NOT magic, to ensure that people don't abuse SPL and - * cause problems for PHP 5.0 support. - */ - public function toString() { - return $this->key; - } - - public function getRootNamespace() { - return substr($this->key, 0, strpos($this->key, ".")); - } - - public function getDirective() { - return substr($this->key, strpos($this->key, ".") + 1); - } - - public static function make($id) { - return new HTMLPurifier_ConfigSchema_Interchange_Id($id); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php deleted file mode 100755 index 785b72ce8e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php +++ /dev/null @@ -1,180 +0,0 @@ -varParser = $varParser ? $varParser : new HTMLPurifier_VarParser_Native(); - } - - public static function buildFromDirectory($dir = null) { - $builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder(); - $interchange = new HTMLPurifier_ConfigSchema_Interchange(); - return $builder->buildDir($interchange, $dir); - } - - public function buildDir($interchange, $dir = null) { - if (!$dir) $dir = HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema'; - if (file_exists($dir . '/info.ini')) { - $info = parse_ini_file($dir . '/info.ini'); - $interchange->name = $info['name']; - } - - $files = array(); - $dh = opendir($dir); - while (false !== ($file = readdir($dh))) { - if (!$file || $file[0] == '.' || strrchr($file, '.') !== '.txt') { - continue; - } - $files[] = $file; - } - closedir($dh); - - sort($files); - foreach ($files as $file) { - $this->buildFile($interchange, $dir . '/' . $file); - } - - return $interchange; - } - - public function buildFile($interchange, $file) { - $parser = new HTMLPurifier_StringHashParser(); - $this->build( - $interchange, - new HTMLPurifier_StringHash( $parser->parseFile($file) ) - ); - } - - /** - * Builds an interchange object based on a hash. - * @param $interchange HTMLPurifier_ConfigSchema_Interchange object to build - * @param $hash HTMLPurifier_ConfigSchema_StringHash source data - */ - public function build($interchange, $hash) { - if (!$hash instanceof HTMLPurifier_StringHash) { - $hash = new HTMLPurifier_StringHash($hash); - } - if (!isset($hash['ID'])) { - throw new HTMLPurifier_ConfigSchema_Exception('Hash does not have any ID'); - } - if (strpos($hash['ID'], '.') === false) { - if (count($hash) == 2 && isset($hash['DESCRIPTION'])) { - $hash->offsetGet('DESCRIPTION'); // prevent complaining - } else { - throw new HTMLPurifier_ConfigSchema_Exception('All directives must have a namespace'); - } - } else { - $this->buildDirective($interchange, $hash); - } - $this->_findUnused($hash); - } - - public function buildDirective($interchange, $hash) { - $directive = new HTMLPurifier_ConfigSchema_Interchange_Directive(); - - // These are required elements: - $directive->id = $this->id($hash->offsetGet('ID')); - $id = $directive->id->toString(); // convenience - - if (isset($hash['TYPE'])) { - $type = explode('/', $hash->offsetGet('TYPE')); - if (isset($type[1])) $directive->typeAllowsNull = true; - $directive->type = $type[0]; - } else { - throw new HTMLPurifier_ConfigSchema_Exception("TYPE in directive hash '$id' not defined"); - } - - if (isset($hash['DEFAULT'])) { - try { - $directive->default = $this->varParser->parse($hash->offsetGet('DEFAULT'), $directive->type, $directive->typeAllowsNull); - } catch (HTMLPurifier_VarParserException $e) { - throw new HTMLPurifier_ConfigSchema_Exception($e->getMessage() . " in DEFAULT in directive hash '$id'"); - } - } - - if (isset($hash['DESCRIPTION'])) { - $directive->description = $hash->offsetGet('DESCRIPTION'); - } - - if (isset($hash['ALLOWED'])) { - $directive->allowed = $this->lookup($this->evalArray($hash->offsetGet('ALLOWED'))); - } - - if (isset($hash['VALUE-ALIASES'])) { - $directive->valueAliases = $this->evalArray($hash->offsetGet('VALUE-ALIASES')); - } - - if (isset($hash['ALIASES'])) { - $raw_aliases = trim($hash->offsetGet('ALIASES')); - $aliases = preg_split('/\s*,\s*/', $raw_aliases); - foreach ($aliases as $alias) { - $directive->aliases[] = $this->id($alias); - } - } - - if (isset($hash['VERSION'])) { - $directive->version = $hash->offsetGet('VERSION'); - } - - if (isset($hash['DEPRECATED-USE'])) { - $directive->deprecatedUse = $this->id($hash->offsetGet('DEPRECATED-USE')); - } - - if (isset($hash['DEPRECATED-VERSION'])) { - $directive->deprecatedVersion = $hash->offsetGet('DEPRECATED-VERSION'); - } - - if (isset($hash['EXTERNAL'])) { - $directive->external = preg_split('/\s*,\s*/', trim($hash->offsetGet('EXTERNAL'))); - } - - $interchange->addDirective($directive); - } - - /** - * Evaluates an array PHP code string without array() wrapper - */ - protected function evalArray($contents) { - return eval('return array('. $contents .');'); - } - - /** - * Converts an array list into a lookup array. - */ - protected function lookup($array) { - $ret = array(); - foreach ($array as $val) $ret[$val] = true; - return $ret; - } - - /** - * Convenience function that creates an HTMLPurifier_ConfigSchema_Interchange_Id - * object based on a string Id. - */ - protected function id($id) { - return HTMLPurifier_ConfigSchema_Interchange_Id::make($id); - } - - /** - * Triggers errors for any unused keys passed in the hash; such keys - * may indicate typos, missing values, etc. - * @param $hash Instance of ConfigSchema_StringHash to check. - */ - protected function _findUnused($hash) { - $accessed = $hash->getAccessed(); - foreach ($hash as $k => $v) { - if (!isset($accessed[$k])) { - trigger_error("String hash key '$k' not used by builder", E_USER_NOTICE); - } - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Validator.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Validator.php deleted file mode 100755 index f374f6a022..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/Validator.php +++ /dev/null @@ -1,206 +0,0 @@ -parser = new HTMLPurifier_VarParser(); - } - - /** - * Validates a fully-formed interchange object. Throws an - * HTMLPurifier_ConfigSchema_Exception if there's a problem. - */ - public function validate($interchange) { - $this->interchange = $interchange; - $this->aliases = array(); - // PHP is a bit lax with integer <=> string conversions in - // arrays, so we don't use the identical !== comparison - foreach ($interchange->directives as $i => $directive) { - $id = $directive->id->toString(); - if ($i != $id) $this->error(false, "Integrity violation: key '$i' does not match internal id '$id'"); - $this->validateDirective($directive); - } - return true; - } - - /** - * Validates a HTMLPurifier_ConfigSchema_Interchange_Id object. - */ - public function validateId($id) { - $id_string = $id->toString(); - $this->context[] = "id '$id_string'"; - if (!$id instanceof HTMLPurifier_ConfigSchema_Interchange_Id) { - // handled by InterchangeBuilder - $this->error(false, 'is not an instance of HTMLPurifier_ConfigSchema_Interchange_Id'); - } - // keys are now unconstrained (we might want to narrow down to A-Za-z0-9.) - // we probably should check that it has at least one namespace - $this->with($id, 'key') - ->assertNotEmpty() - ->assertIsString(); // implicit assertIsString handled by InterchangeBuilder - array_pop($this->context); - } - - /** - * Validates a HTMLPurifier_ConfigSchema_Interchange_Directive object. - */ - public function validateDirective($d) { - $id = $d->id->toString(); - $this->context[] = "directive '$id'"; - $this->validateId($d->id); - - $this->with($d, 'description') - ->assertNotEmpty(); - - // BEGIN - handled by InterchangeBuilder - $this->with($d, 'type') - ->assertNotEmpty(); - $this->with($d, 'typeAllowsNull') - ->assertIsBool(); - try { - // This also tests validity of $d->type - $this->parser->parse($d->default, $d->type, $d->typeAllowsNull); - } catch (HTMLPurifier_VarParserException $e) { - $this->error('default', 'had error: ' . $e->getMessage()); - } - // END - handled by InterchangeBuilder - - if (!is_null($d->allowed) || !empty($d->valueAliases)) { - // allowed and valueAliases require that we be dealing with - // strings, so check for that early. - $d_int = HTMLPurifier_VarParser::$types[$d->type]; - if (!isset(HTMLPurifier_VarParser::$stringTypes[$d_int])) { - $this->error('type', 'must be a string type when used with allowed or value aliases'); - } - } - - $this->validateDirectiveAllowed($d); - $this->validateDirectiveValueAliases($d); - $this->validateDirectiveAliases($d); - - array_pop($this->context); - } - - /** - * Extra validation if $allowed member variable of - * HTMLPurifier_ConfigSchema_Interchange_Directive is defined. - */ - public function validateDirectiveAllowed($d) { - if (is_null($d->allowed)) return; - $this->with($d, 'allowed') - ->assertNotEmpty() - ->assertIsLookup(); // handled by InterchangeBuilder - if (is_string($d->default) && !isset($d->allowed[$d->default])) { - $this->error('default', 'must be an allowed value'); - } - $this->context[] = 'allowed'; - foreach ($d->allowed as $val => $x) { - if (!is_string($val)) $this->error("value $val", 'must be a string'); - } - array_pop($this->context); - } - - /** - * Extra validation if $valueAliases member variable of - * HTMLPurifier_ConfigSchema_Interchange_Directive is defined. - */ - public function validateDirectiveValueAliases($d) { - if (is_null($d->valueAliases)) return; - $this->with($d, 'valueAliases') - ->assertIsArray(); // handled by InterchangeBuilder - $this->context[] = 'valueAliases'; - foreach ($d->valueAliases as $alias => $real) { - if (!is_string($alias)) $this->error("alias $alias", 'must be a string'); - if (!is_string($real)) $this->error("alias target $real from alias '$alias'", 'must be a string'); - if ($alias === $real) { - $this->error("alias '$alias'", "must not be an alias to itself"); - } - } - if (!is_null($d->allowed)) { - foreach ($d->valueAliases as $alias => $real) { - if (isset($d->allowed[$alias])) { - $this->error("alias '$alias'", 'must not be an allowed value'); - } elseif (!isset($d->allowed[$real])) { - $this->error("alias '$alias'", 'must be an alias to an allowed value'); - } - } - } - array_pop($this->context); - } - - /** - * Extra validation if $aliases member variable of - * HTMLPurifier_ConfigSchema_Interchange_Directive is defined. - */ - public function validateDirectiveAliases($d) { - $this->with($d, 'aliases') - ->assertIsArray(); // handled by InterchangeBuilder - $this->context[] = 'aliases'; - foreach ($d->aliases as $alias) { - $this->validateId($alias); - $s = $alias->toString(); - if (isset($this->interchange->directives[$s])) { - $this->error("alias '$s'", 'collides with another directive'); - } - if (isset($this->aliases[$s])) { - $other_directive = $this->aliases[$s]; - $this->error("alias '$s'", "collides with alias for directive '$other_directive'"); - } - $this->aliases[$s] = $d->id->toString(); - } - array_pop($this->context); - } - - // protected helper functions - - /** - * Convenience function for generating HTMLPurifier_ConfigSchema_ValidatorAtom - * for validating simple member variables of objects. - */ - protected function with($obj, $member) { - return new HTMLPurifier_ConfigSchema_ValidatorAtom($this->getFormattedContext(), $obj, $member); - } - - /** - * Emits an error, providing helpful context. - */ - protected function error($target, $msg) { - if ($target !== false) $prefix = ucfirst($target) . ' in ' . $this->getFormattedContext(); - else $prefix = ucfirst($this->getFormattedContext()); - throw new HTMLPurifier_ConfigSchema_Exception(trim($prefix . ' ' . $msg)); - } - - /** - * Returns a formatted context string. - */ - protected function getFormattedContext() { - return implode(' in ', array_reverse($this->context)); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php deleted file mode 100755 index b95aea18cc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php +++ /dev/null @@ -1,66 +0,0 @@ -context = $context; - $this->obj = $obj; - $this->member = $member; - $this->contents =& $obj->$member; - } - - public function assertIsString() { - if (!is_string($this->contents)) $this->error('must be a string'); - return $this; - } - - public function assertIsBool() { - if (!is_bool($this->contents)) $this->error('must be a boolean'); - return $this; - } - - public function assertIsArray() { - if (!is_array($this->contents)) $this->error('must be an array'); - return $this; - } - - public function assertNotNull() { - if ($this->contents === null) $this->error('must not be null'); - return $this; - } - - public function assertAlnum() { - $this->assertIsString(); - if (!ctype_alnum($this->contents)) $this->error('must be alphanumeric'); - return $this; - } - - public function assertNotEmpty() { - if (empty($this->contents)) $this->error('must not be empty'); - return $this; - } - - public function assertIsLookup() { - $this->assertIsArray(); - foreach ($this->contents as $v) { - if ($v !== true) $this->error('must be a lookup array'); - } - return $this; - } - - protected function error($msg) { - throw new HTMLPurifier_ConfigSchema_Exception(ucfirst($this->member) . ' in ' . $this->context . ' ' . $msg); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser deleted file mode 100755 index fa0bacb9476cab9e69889141969c6fefd2b4419c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14880 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 - This directive turns on auto-paragraphing, where double newlines are - converted in to paragraphs whenever possible. Auto-paragraphing: -

-
    -
  • Always applies to inline elements or text in the root node,
  • -
  • Applies to inline elements or text with double newlines in nodes - that allow paragraph tags,
  • -
  • Applies to double newlines in paragraph tags
  • -
-

- p tags must be allowed for this directive to take effect. - We do not use br tags for paragraphing, as that is - semantically incorrect. -

-

- To prevent auto-paragraphing as a content-producer, refrain from using - double-newlines except to specify a new paragraph or in contexts where - it has special meaning (whitespace usually has no meaning except in - tags like pre, so this should not be difficult.) To prevent - the paragraphing of inline text adjacent to block elements, wrap them - in div tags (the behavior is slightly different outside of - the root node.) -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt deleted file mode 100755 index 2a476481af..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt +++ /dev/null @@ -1,12 +0,0 @@ -AutoFormat.Custom -TYPE: list -VERSION: 2.0.1 -DEFAULT: array() ---DESCRIPTION-- - -

- This directive can be used to add custom auto-format injectors. - Specify an array of injector names (class name minus the prefix) - or concrete implementations. Injector class must exist. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt deleted file mode 100755 index 663064a344..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt +++ /dev/null @@ -1,11 +0,0 @@ -AutoFormat.DisplayLinkURI -TYPE: bool -VERSION: 3.2.0 -DEFAULT: false ---DESCRIPTION-- -

- This directive turns on the in-text display of URIs in <a> tags, and disables - those links. For example, example becomes - example (http://example.com). -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt deleted file mode 100755 index 3a48ba960e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt +++ /dev/null @@ -1,12 +0,0 @@ -AutoFormat.Linkify -TYPE: bool -VERSION: 2.0.1 -DEFAULT: false ---DESCRIPTION-- - -

- This directive turns on linkification, auto-linking http, ftp and - https URLs. a tags with the href attribute - must be allowed. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt deleted file mode 100755 index db58b13464..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt +++ /dev/null @@ -1,12 +0,0 @@ -AutoFormat.PurifierLinkify.DocURL -TYPE: string -VERSION: 2.0.1 -DEFAULT: '#%s' -ALIASES: AutoFormatParam.PurifierLinkifyDocURL ---DESCRIPTION-- -

- Location of configuration documentation to link to, let %s substitute - into the configuration's namespace and directive names sans the percent - sign. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt deleted file mode 100755 index 7996488be0..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt +++ /dev/null @@ -1,12 +0,0 @@ -AutoFormat.PurifierLinkify -TYPE: bool -VERSION: 2.0.1 -DEFAULT: false ---DESCRIPTION-- - -

- Internal auto-formatter that converts configuration directives in - syntax %Namespace.Directive to links. a tags - with the href attribute must be allowed. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt deleted file mode 100755 index 35c393b4e6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt +++ /dev/null @@ -1,11 +0,0 @@ -AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions -TYPE: lookup -VERSION: 4.0.0 -DEFAULT: array('td' => true, 'th' => true) ---DESCRIPTION-- -

- When %AutoFormat.RemoveEmpty and %AutoFormat.RemoveEmpty.RemoveNbsp - are enabled, this directive defines what HTML elements should not be - removede if they have only a non-breaking space in them. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt deleted file mode 100755 index ca17eb1dc4..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt +++ /dev/null @@ -1,15 +0,0 @@ -AutoFormat.RemoveEmpty.RemoveNbsp -TYPE: bool -VERSION: 4.0.0 -DEFAULT: false ---DESCRIPTION-- -

- When enabled, HTML Purifier will treat any elements that contain only - non-breaking spaces as well as regular whitespace as empty, and remove - them when %AutoForamt.RemoveEmpty is enabled. -

-

- See %AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions for a list of elements - that don't have this behavior applied to them. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt deleted file mode 100755 index 34657ba47b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt +++ /dev/null @@ -1,46 +0,0 @@ -AutoFormat.RemoveEmpty -TYPE: bool -VERSION: 3.2.0 -DEFAULT: false ---DESCRIPTION-- -

- When enabled, HTML Purifier will attempt to remove empty elements that - contribute no semantic information to the document. The following types - of nodes will be removed: -

-
  • - Tags with no attributes and no content, and that are not empty - elements (remove <a></a> but not - <br />), and -
  • -
  • - Tags with no content, except for:
      -
    • The colgroup element, or
    • -
    • - Elements with the id or name attribute, - when those attributes are permitted on those elements. -
    • -
  • -
-

- Please be very careful when using this functionality; while it may not - seem that empty elements contain useful information, they can alter the - layout of a document given appropriate styling. This directive is most - useful when you are processing machine-generated HTML, please avoid using - it on regular user HTML. -

-

- Elements that contain only whitespace will be treated as empty. Non-breaking - spaces, however, do not count as whitespace. See - %AutoFormat.RemoveEmpty.RemoveNbsp for alternate behavior. -

-

- This algorithm is not perfect; you may still notice some empty tags, - particularly if a node had elements, but those elements were later removed - because they were not permitted in that context, or tags that, after - being auto-closed by another tag, where empty. This is for safety reasons - to prevent clever code from breaking validation. The general rule of thumb: - if a tag looked empty on the way in, it will get removed; if HTML Purifier - made it empty, it will stay. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt deleted file mode 100755 index dde990ab26..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt +++ /dev/null @@ -1,11 +0,0 @@ -AutoFormat.RemoveSpansWithoutAttributes -TYPE: bool -VERSION: 4.0.1 -DEFAULT: false ---DESCRIPTION-- -

- This directive causes span tags without any attributes - to be removed. It will also remove spans that had all attributes - removed during processing. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt deleted file mode 100755 index b324608f76..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt +++ /dev/null @@ -1,8 +0,0 @@ -CSS.AllowImportant -TYPE: bool -DEFAULT: false -VERSION: 3.1.0 ---DESCRIPTION-- -This parameter determines whether or not !important cascade modifiers should -be allowed in user CSS. If false, !important will stripped. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt deleted file mode 100755 index 748be0eec8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt +++ /dev/null @@ -1,11 +0,0 @@ -CSS.AllowTricky -TYPE: bool -DEFAULT: false -VERSION: 3.1.0 ---DESCRIPTION-- -This parameter determines whether or not to allow "tricky" CSS properties and -values. Tricky CSS properties/values can drastically modify page layout or -be used for deceptive practices but do not directly constitute a security risk. -For example, display:none; is considered a tricky property that -will only be allowed if this directive is set to true. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt deleted file mode 100755 index 3fd4654065..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt +++ /dev/null @@ -1,12 +0,0 @@ -CSS.AllowedFonts -TYPE: lookup/null -VERSION: 4.3.0 -DEFAULT: NULL ---DESCRIPTION-- -

- Allows you to manually specify a set of allowed fonts. If - NULL, all fonts are allowed. This directive - affects generic names (serif, sans-serif, monospace, cursive, - fantasy) as well as specific font families. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt deleted file mode 100755 index 460112ebe0..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt +++ /dev/null @@ -1,18 +0,0 @@ -CSS.AllowedProperties -TYPE: lookup/null -VERSION: 3.1.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- If HTML Purifier's style attributes set is unsatisfactory for your needs, - you can overload it with your own list of tags to allow. Note that this - method is subtractive: it does its job by taking away from HTML Purifier - usual feature set, so you cannot add an attribute that HTML Purifier never - supported in the first place. -

-

- Warning: If another directive conflicts with the - elements here, that directive will win and override. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt deleted file mode 100755 index 5cb7dda3ba..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt +++ /dev/null @@ -1,11 +0,0 @@ -CSS.DefinitionRev -TYPE: int -VERSION: 2.0.0 -DEFAULT: 1 ---DESCRIPTION-- - -

- Revision identifier for your custom definition. See - %HTML.DefinitionRev for details. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt deleted file mode 100755 index f1f5c5f12b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt +++ /dev/null @@ -1,13 +0,0 @@ -CSS.ForbiddenProperties -TYPE: lookup -VERSION: 4.2.0 -DEFAULT: array() ---DESCRIPTION-- -

- This is the logical inverse of %CSS.AllowedProperties, and it will - override that directive or any other directive. If possible, - %CSS.AllowedProperties is recommended over this directive, - because it can sometimes be difficult to tell whether or not you've - forbidden all of the CSS properties you truly would like to disallow. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt deleted file mode 100755 index 7a3291470c..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt +++ /dev/null @@ -1,16 +0,0 @@ -CSS.MaxImgLength -TYPE: string/null -DEFAULT: '1200px' -VERSION: 3.1.1 ---DESCRIPTION-- -

- This parameter sets the maximum allowed length on img tags, - effectively the width and height properties. - Only absolute units of measurement (in, pt, pc, mm, cm) and pixels (px) are allowed. This is - in place to prevent imagecrash attacks, disable with null at your own risk. - This directive is similar to %HTML.MaxImgLength, and both should be - concurrently edited, although there are - subtle differences in the input format (the CSS max is a number with - a unit). -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt deleted file mode 100755 index 148eedb8be..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt +++ /dev/null @@ -1,10 +0,0 @@ -CSS.Proprietary -TYPE: bool -VERSION: 3.0.0 -DEFAULT: false ---DESCRIPTION-- - -

- Whether or not to allow safe, proprietary CSS values. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt deleted file mode 100755 index e733a61e8a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt +++ /dev/null @@ -1,9 +0,0 @@ -CSS.Trusted -TYPE: bool -VERSION: 4.2.1 -DEFAULT: false ---DESCRIPTION-- -Indicates whether or not the user's CSS input is trusted or not. If the -input is trusted, a more expansive set of allowed properties. See -also %HTML.Trusted. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt deleted file mode 100755 index c486724c88..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt +++ /dev/null @@ -1,14 +0,0 @@ -Cache.DefinitionImpl -TYPE: string/null -VERSION: 2.0.0 -DEFAULT: 'Serializer' ---DESCRIPTION-- - -This directive defines which method to use when caching definitions, -the complex data-type that makes HTML Purifier tick. Set to null -to disable caching (not recommended, as you will see a definite -performance degradation). - ---ALIASES-- -Core.DefinitionCache ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt deleted file mode 100755 index 54036507d6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt +++ /dev/null @@ -1,13 +0,0 @@ -Cache.SerializerPath -TYPE: string/null -VERSION: 2.0.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- Absolute path with no trailing slash to store serialized definitions in. - Default is within the - HTML Purifier library inside DefinitionCache/Serializer. This - path must be writable by the webserver. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt deleted file mode 100755 index b2b83d9ab6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt +++ /dev/null @@ -1,11 +0,0 @@ -Cache.SerializerPermissions -TYPE: int -VERSION: 4.3.0 -DEFAULT: 0755 ---DESCRIPTION-- - -

- Directory permissions of the files and directories created inside - the DefinitionCache/Serializer or other custom serializer path. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt deleted file mode 100755 index 568cbf3b32..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt +++ /dev/null @@ -1,18 +0,0 @@ -Core.AggressivelyFixLt -TYPE: bool -VERSION: 2.1.0 -DEFAULT: true ---DESCRIPTION-- -

- This directive enables aggressive pre-filter fixes HTML Purifier can - perform in order to ensure that open angled-brackets do not get killed - during parsing stage. Enabling this will result in two preg_replace_callback - calls and at least two preg_replace calls for every HTML document parsed; - if your users make very well-formed HTML, you can set this directive false. - This has no effect when DirectLex is used. -

-

- Notice: This directive's default turned from false to true - in HTML Purifier 3.2.0. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt deleted file mode 100755 index d7317911fa..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt +++ /dev/null @@ -1,12 +0,0 @@ -Core.CollectErrors -TYPE: bool -VERSION: 2.0.0 -DEFAULT: false ---DESCRIPTION-- - -Whether or not to collect errors found while filtering the document. This -is a useful way to give feedback to your users. Warning: -Currently this feature is very patchy and experimental, with lots of -possible error messages not yet implemented. It will not cause any -problems, but it may not help your users either. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt deleted file mode 100755 index c572c14ec1..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt +++ /dev/null @@ -1,29 +0,0 @@ -Core.ColorKeywords -TYPE: hash -VERSION: 2.0.0 ---DEFAULT-- -array ( - 'maroon' => '#800000', - 'red' => '#FF0000', - 'orange' => '#FFA500', - 'yellow' => '#FFFF00', - 'olive' => '#808000', - 'purple' => '#800080', - 'fuchsia' => '#FF00FF', - 'white' => '#FFFFFF', - 'lime' => '#00FF00', - 'green' => '#008000', - 'navy' => '#000080', - 'blue' => '#0000FF', - 'aqua' => '#00FFFF', - 'teal' => '#008080', - 'black' => '#000000', - 'silver' => '#C0C0C0', - 'gray' => '#808080', -) ---DESCRIPTION-- - -Lookup array of color names to six digit hexadecimal number corresponding -to color, with preceding hash mark. Used when parsing colors. The lookup -is done in a case-insensitive manner. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt deleted file mode 100755 index 64b114fce2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt +++ /dev/null @@ -1,14 +0,0 @@ -Core.ConvertDocumentToFragment -TYPE: bool -DEFAULT: true ---DESCRIPTION-- - -This parameter determines whether or not the filter should convert -input that is a full document with html and body tags to a fragment -of just the contents of a body tag. This parameter is simply something -HTML Purifier can do during an edge-case: for most inputs, this -processing is not necessary. - ---ALIASES-- -Core.AcceptFullDocuments ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt deleted file mode 100755 index 36f16e07ea..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt +++ /dev/null @@ -1,17 +0,0 @@ -Core.DirectLexLineNumberSyncInterval -TYPE: int -VERSION: 2.0.0 -DEFAULT: 0 ---DESCRIPTION-- - -

- Specifies the number of tokens the DirectLex line number tracking - implementations should process before attempting to resyncronize the - current line count by manually counting all previous new-lines. When - at 0, this functionality is disabled. Lower values will decrease - performance, and this is only strictly necessary if the counting - algorithm is buggy (in which case you should report it as a bug). - This has no effect when %Core.MaintainLineNumbers is disabled or DirectLex is - not being used. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt deleted file mode 100644 index 1cd4c2c964..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt +++ /dev/null @@ -1,14 +0,0 @@ -Core.DisableExcludes -TYPE: bool -DEFAULT: false -VERSION: 4.5.0 ---DESCRIPTION-- -

- This directive disables SGML-style exclusions, e.g. the exclusion of - <object> in any descendant of a - <pre> tag. Disabling excludes will allow some - invalid documents to pass through HTML Purifier, but HTML Purifier - will also be less likely to accidentally remove large documents during - processing. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt deleted file mode 100644 index ce243c35dc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt +++ /dev/null @@ -1,9 +0,0 @@ -Core.EnableIDNA -TYPE: bool -DEFAULT: false -VERSION: 4.4.0 ---DESCRIPTION-- -Allows international domain names in URLs. This configuration option -requires the PEAR Net_IDNA2 module to be installed. It operates by -punycoding any internationalized host names for maximum portability. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt deleted file mode 100755 index 8bfb47c3ac..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt +++ /dev/null @@ -1,15 +0,0 @@ -Core.Encoding -TYPE: istring -DEFAULT: 'utf-8' ---DESCRIPTION-- -If for some reason you are unable to convert all webpages to UTF-8, you can -use this directive as a stop-gap compatibility change to let HTML Purifier -deal with non UTF-8 input. This technique has notable deficiencies: -absolutely no characters outside of the selected character encoding will be -preserved, not even the ones that have been ampersand escaped (this is due -to a UTF-8 specific feature that automatically resolves all -entities), making it pretty useless for anything except the most I18N-blind -applications, although %Core.EscapeNonASCIICharacters offers fixes this -trouble with another tradeoff. This directive only accepts ISO-8859-1 if -iconv is not enabled. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt deleted file mode 100755 index 4d5b5055cd..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt +++ /dev/null @@ -1,10 +0,0 @@ -Core.EscapeInvalidChildren -TYPE: bool -DEFAULT: false ---DESCRIPTION-- -When true, a child is found that is not allowed in the context of the -parent element will be transformed into text as if it were ASCII. When -false, that element and all internal tags will be dropped, though text will -be preserved. There is no option for dropping the element but preserving -child nodes. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt deleted file mode 100755 index a7a5b249bb..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt +++ /dev/null @@ -1,7 +0,0 @@ -Core.EscapeInvalidTags -TYPE: bool -DEFAULT: false ---DESCRIPTION-- -When true, invalid tags will be written back to the document as plain text. -Otherwise, they are silently dropped. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt deleted file mode 100755 index abb499948a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt +++ /dev/null @@ -1,13 +0,0 @@ -Core.EscapeNonASCIICharacters -TYPE: bool -VERSION: 1.4.0 -DEFAULT: false ---DESCRIPTION-- -This directive overcomes a deficiency in %Core.Encoding by blindly -converting all non-ASCII characters into decimal numeric entities before -converting it to its native encoding. This means that even characters that -can be expressed in the non-UTF-8 encoding will be entity-ized, which can -be a real downer for encodings like Big5. It also assumes that the ASCII -repetoire is available, although this is the case for almost all encodings. -Anyway, use UTF-8! ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt deleted file mode 100755 index 915391edb7..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt +++ /dev/null @@ -1,19 +0,0 @@ -Core.HiddenElements -TYPE: lookup ---DEFAULT-- -array ( - 'script' => true, - 'style' => true, -) ---DESCRIPTION-- - -

- This directive is a lookup array of elements which should have their - contents removed when they are not allowed by the HTML definition. - For example, the contents of a script tag are not - normally shown in a document, so if script tags are to be removed, - their contents should be removed to. This is opposed to a b - tag, which defines some presentational changes but does not hide its - contents. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt deleted file mode 100755 index 233fca14f8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt +++ /dev/null @@ -1,10 +0,0 @@ -Core.Language -TYPE: string -VERSION: 2.0.0 -DEFAULT: 'en' ---DESCRIPTION-- - -ISO 639 language code for localizable things in HTML Purifier to use, -which is mainly error reporting. There is currently only an English (en) -translation, so this directive is currently useless. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt deleted file mode 100755 index 8983e2cca9..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt +++ /dev/null @@ -1,34 +0,0 @@ -Core.LexerImpl -TYPE: mixed/null -VERSION: 2.0.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- This parameter determines what lexer implementation can be used. The - valid values are: -

-
-
null
-
- Recommended, the lexer implementation will be auto-detected based on - your PHP-version and configuration. -
-
string lexer identifier
-
- This is a slim way of manually overridding the implementation. - Currently recognized values are: DOMLex (the default PHP5 -implementation) - and DirectLex (the default PHP4 implementation). Only use this if - you know what you are doing: usually, the auto-detection will - manage things for cases you aren't even aware of. -
-
object lexer instance
-
- Super-advanced: you can specify your own, custom, implementation that - implements the interface defined by HTMLPurifier_Lexer. - I may remove this option simply because I don't expect anyone - to use it. -
-
---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt deleted file mode 100755 index eb841a7597..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt +++ /dev/null @@ -1,16 +0,0 @@ -Core.MaintainLineNumbers -TYPE: bool/null -VERSION: 2.0.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- If true, HTML Purifier will add line number information to all tokens. - This is useful when error reporting is turned on, but can result in - significant performance degradation and should not be used when - unnecessary. This directive must be used with the DirectLex lexer, - as the DOMLex lexer does not (yet) support this functionality. - If the value is null, an appropriate value will be selected based - on other configuration. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt deleted file mode 100755 index d77f5360d7..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt +++ /dev/null @@ -1,11 +0,0 @@ -Core.NormalizeNewlines -TYPE: bool -VERSION: 4.2.0 -DEFAULT: true ---DESCRIPTION-- -

- Whether or not to normalize newlines to the operating - system default. When false, HTML Purifier - will attempt to preserve mixed newline files. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt deleted file mode 100755 index 4070c2a0de..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt +++ /dev/null @@ -1,12 +0,0 @@ -Core.RemoveInvalidImg -TYPE: bool -DEFAULT: true -VERSION: 1.3.0 ---DESCRIPTION-- - -

- This directive enables pre-emptive URI checking in img - tags, as the attribute validation strategy is not authorized to - remove elements from the document. Revert to pre-1.3.0 behavior by setting to false. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt deleted file mode 100755 index 3397d9f71f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt +++ /dev/null @@ -1,11 +0,0 @@ -Core.RemoveProcessingInstructions -TYPE: bool -VERSION: 4.2.0 -DEFAULT: false ---DESCRIPTION-- -Instead of escaping processing instructions in the form <? ... -?>, remove it out-right. This may be useful if the HTML -you are validating contains XML processing instruction gunk, however, -it can also be user-unfriendly for people attempting to post PHP -snippets. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt deleted file mode 100755 index a4cd966df8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt +++ /dev/null @@ -1,12 +0,0 @@ -Core.RemoveScriptContents -TYPE: bool/null -DEFAULT: NULL -VERSION: 2.0.0 -DEPRECATED-VERSION: 2.1.0 -DEPRECATED-USE: Core.HiddenElements ---DESCRIPTION-- -

- This directive enables HTML Purifier to remove not only script tags - but all of their contents. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt deleted file mode 100755 index 3db50ef204..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt +++ /dev/null @@ -1,11 +0,0 @@ -Filter.Custom -TYPE: list -VERSION: 3.1.0 -DEFAULT: array() ---DESCRIPTION-- -

- This directive can be used to add custom filters; it is nearly the - equivalent of the now deprecated HTMLPurifier->addFilter() - method. Specify an array of concrete implementations. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt deleted file mode 100755 index 16829bcda0..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filter.ExtractStyleBlocks.Escaping -TYPE: bool -VERSION: 3.0.0 -DEFAULT: true -ALIASES: Filter.ExtractStyleBlocksEscaping, FilterParam.ExtractStyleBlocksEscaping ---DESCRIPTION-- - -

- Whether or not to escape the dangerous characters <, > and & - as \3C, \3E and \26, respectively. This is can be safely set to false - if the contents of StyleBlocks will be placed in an external stylesheet, - where there is no risk of it being interpreted as HTML. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt deleted file mode 100755 index 7f95f54d12..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt +++ /dev/null @@ -1,29 +0,0 @@ -Filter.ExtractStyleBlocks.Scope -TYPE: string/null -VERSION: 3.0.0 -DEFAULT: NULL -ALIASES: Filter.ExtractStyleBlocksScope, FilterParam.ExtractStyleBlocksScope ---DESCRIPTION-- - -

- If you would like users to be able to define external stylesheets, but - only allow them to specify CSS declarations for a specific node and - prevent them from fiddling with other elements, use this directive. - It accepts any valid CSS selector, and will prepend this to any - CSS declaration extracted from the document. For example, if this - directive is set to #user-content and a user uses the - selector a:hover, the final selector will be - #user-content a:hover. -

-

- The comma shorthand may be used; consider the above example, with - #user-content, #user-content2, the final selector will - be #user-content a:hover, #user-content2 a:hover. -

-

- Warning: It is possible for users to bypass this measure - using a naughty + selector. This is a bug in CSS Tidy 1.3, not HTML - Purifier, and I am working to get it fixed. Until then, HTML Purifier - performs a basic check to prevent this. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt deleted file mode 100755 index 6c231b2d7f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt +++ /dev/null @@ -1,16 +0,0 @@ -Filter.ExtractStyleBlocks.TidyImpl -TYPE: mixed/null -VERSION: 3.1.0 -DEFAULT: NULL -ALIASES: FilterParam.ExtractStyleBlocksTidyImpl ---DESCRIPTION-- -

- If left NULL, HTML Purifier will attempt to instantiate a csstidy - class to use for internal cleaning. This will usually be good enough. -

-

- However, for trusted user input, you can set this to false to - disable cleaning. In addition, you can supply your own concrete implementation - of Tidy's interface to use, although I don't know why you'd want to do that. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt deleted file mode 100755 index 078d087417..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt +++ /dev/null @@ -1,74 +0,0 @@ -Filter.ExtractStyleBlocks -TYPE: bool -VERSION: 3.1.0 -DEFAULT: false -EXTERNAL: CSSTidy ---DESCRIPTION-- -

- This directive turns on the style block extraction filter, which removes - style blocks from input HTML, cleans them up with CSSTidy, - and places them in the StyleBlocks context variable, for further - use by you, usually to be placed in an external stylesheet, or a - style block in the head of your document. -

-

- Sample usage: -

-
';
-?>
-
-
-
-  Filter.ExtractStyleBlocks
-body {color:#F00;} Some text';
-
-    $config = HTMLPurifier_Config::createDefault();
-    $config->set('Filter', 'ExtractStyleBlocks', true);
-    $purifier = new HTMLPurifier($config);
-
-    $html = $purifier->purify($dirty);
-
-    // This implementation writes the stylesheets to the styles/ directory.
-    // You can also echo the styles inside the document, but it's a bit
-    // more difficult to make sure they get interpreted properly by
-    // browsers; try the usual CSS armoring techniques.
-    $styles = $purifier->context->get('StyleBlocks');
-    $dir = 'styles/';
-    if (!is_dir($dir)) mkdir($dir);
-    $hash = sha1($_GET['html']);
-    foreach ($styles as $i => $style) {
-        file_put_contents($name = $dir . $hash . "_$i");
-        echo '';
-    }
-?>
-
-
-  
- -
- - -]]>
-

- Warning: It is possible for a user to mount an - imagecrash attack using this CSS. Counter-measures are difficult; - it is not simply enough to limit the range of CSS lengths (using - relative lengths with many nesting levels allows for large values - to be attained without actually specifying them in the stylesheet), - and the flexible nature of selectors makes it difficult to selectively - disable lengths on image tags (HTML Purifier, however, does disable - CSS width and height in inline styling). There are probably two effective - counter measures: an explicit width and height set to auto in all - images in your document (unlikely) or the disabling of width and - height (somewhat reasonable). Whether or not these measures should be - used is left to the reader. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt deleted file mode 100755 index 321eaa2d80..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt +++ /dev/null @@ -1,16 +0,0 @@ -Filter.YouTube -TYPE: bool -VERSION: 3.1.0 -DEFAULT: false ---DESCRIPTION-- -

- Warning: Deprecated in favor of %HTML.SafeObject and - %Output.FlashCompat (turn both on to allow YouTube videos and other - Flash content). -

-

- This directive enables YouTube video embedding in HTML Purifier. Check - this document - on embedding videos for more information on what this filter does. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt deleted file mode 100755 index 0b2c106da5..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt +++ /dev/null @@ -1,25 +0,0 @@ -HTML.Allowed -TYPE: itext/null -VERSION: 2.0.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- This is a preferred convenience directive that combines - %HTML.AllowedElements and %HTML.AllowedAttributes. - Specify elements and attributes that are allowed using: - element1[attr1|attr2],element2.... For example, - if you would like to only allow paragraphs and links, specify - a[href],p. You can specify attributes that apply - to all elements using an asterisk, e.g. *[lang]. - You can also use newlines instead of commas to separate elements. -

-

- Warning: - All of the constraints on the component directives are still enforced. - The syntax is a subset of TinyMCE's valid_elements - whitelist: directly copy-pasting it here will probably result in - broken whitelists. If %HTML.AllowedElements or %HTML.AllowedAttributes - are set, this directive has no effect. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt deleted file mode 100755 index fcf093f17d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt +++ /dev/null @@ -1,19 +0,0 @@ -HTML.AllowedAttributes -TYPE: lookup/null -VERSION: 1.3.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- If HTML Purifier's attribute set is unsatisfactory, overload it! - The syntax is "tag.attr" or "*.attr" for the global attributes - (style, id, class, dir, lang, xml:lang). -

-

- Warning: If another directive conflicts with the - elements here, that directive will win and override. For - example, %HTML.EnableAttrID will take precedence over *.id in this - directive. You must set that directive to true before you can use - IDs at all. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt deleted file mode 100644 index 140e21423e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt +++ /dev/null @@ -1,10 +0,0 @@ -HTML.AllowedComments -TYPE: lookup -VERSION: 4.4.0 -DEFAULT: array() ---DESCRIPTION-- -A whitelist which indicates what explicit comment bodies should be -allowed, modulo leading and trailing whitespace. See also %HTML.AllowedCommentsRegexp -(these directives are union'ed together, so a comment is considered -valid if any directive deems it valid.) ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt deleted file mode 100644 index f22e977d43..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt +++ /dev/null @@ -1,15 +0,0 @@ -HTML.AllowedCommentsRegexp -TYPE: string/null -VERSION: 4.4.0 -DEFAULT: NULL ---DESCRIPTION-- -A regexp, which if it matches the body of a comment, indicates that -it should be allowed. Trailing and leading spaces are removed prior -to running this regular expression. -Warning: Make sure you specify -correct anchor metacharacters ^regex$, otherwise you may accept -comments that you did not mean to! In particular, the regex /foo|bar/ -is probably not sufficiently strict, since it also allows foobar. -See also %HTML.AllowedComments (these directives are union'ed together, -so a comment is considered valid if any directive deems it valid.) ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt deleted file mode 100755 index 1d3fa7907d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt +++ /dev/null @@ -1,23 +0,0 @@ -HTML.AllowedElements -TYPE: lookup/null -VERSION: 1.3.0 -DEFAULT: NULL ---DESCRIPTION-- -

- If HTML Purifier's tag set is unsatisfactory for your needs, you can - overload it with your own list of tags to allow. If you change - this, you probably also want to change %HTML.AllowedAttributes; see - also %HTML.Allowed which lets you set allowed elements and - attributes at the same time. -

-

- If you attempt to allow an element that HTML Purifier does not know - about, HTML Purifier will raise an error. You will need to manually - tell HTML Purifier about this element by using the - advanced customization features. -

-

- Warning: If another directive conflicts with the - elements here, that directive will win and override. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt deleted file mode 100755 index 5a59a55c08..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt +++ /dev/null @@ -1,20 +0,0 @@ -HTML.AllowedModules -TYPE: lookup/null -VERSION: 2.0.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- A doctype comes with a set of usual modules to use. Without having - to mucking about with the doctypes, you can quickly activate or - disable these modules by specifying which modules you wish to allow - with this directive. This is most useful for unit testing specific - modules, although end users may find it useful for their own ends. -

-

- If you specify a module that does not exist, the manager will silently - fail to use it, so be careful! User-defined modules are not affected - by this directive. Modules defined in %HTML.CoreModules are not - affected by this directive. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt deleted file mode 100755 index 151fb7b826..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt +++ /dev/null @@ -1,11 +0,0 @@ -HTML.Attr.Name.UseCDATA -TYPE: bool -DEFAULT: false -VERSION: 4.0.0 ---DESCRIPTION-- -The W3C specification DTD defines the name attribute to be CDATA, not ID, due -to limitations of DTD. In certain documents, this relaxed behavior is desired, -whether it is to specify duplicate names, or to specify names that would be -illegal IDs (for example, names that begin with a digit.) Set this configuration -directive to true to use the relaxed parsing rules. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt deleted file mode 100755 index 45ae469ec9..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt +++ /dev/null @@ -1,18 +0,0 @@ -HTML.BlockWrapper -TYPE: string -VERSION: 1.3.0 -DEFAULT: 'p' ---DESCRIPTION-- - -

- String name of element to wrap inline elements that are inside a block - context. This only occurs in the children of blockquote in strict mode. -

-

- Example: by default value, - <blockquote>Foo</blockquote> would become - <blockquote><p>Foo</p></blockquote>. - The <p> tags can be replaced with whatever you desire, - as long as it is a block level element. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt deleted file mode 100755 index 5246188795..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt +++ /dev/null @@ -1,23 +0,0 @@ -HTML.CoreModules -TYPE: lookup -VERSION: 2.0.0 ---DEFAULT-- -array ( - 'Structure' => true, - 'Text' => true, - 'Hypertext' => true, - 'List' => true, - 'NonXMLCommonAttributes' => true, - 'XMLCommonAttributes' => true, - 'CommonAttributes' => true, -) ---DESCRIPTION-- - -

- Certain modularized doctypes (XHTML, namely), have certain modules - that must be included for the doctype to be an conforming document - type: put those modules here. By default, XHTML's core modules - are used. You can set this to a blank array to disable core module - protection, but this is not recommended. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt deleted file mode 100755 index a64e3d7c36..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt +++ /dev/null @@ -1,9 +0,0 @@ -HTML.CustomDoctype -TYPE: string/null -VERSION: 2.0.1 -DEFAULT: NULL ---DESCRIPTION-- - -A custom doctype for power-users who defined there own document -type. This directive only applies when %HTML.Doctype is blank. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt deleted file mode 100755 index 103db754a2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt +++ /dev/null @@ -1,33 +0,0 @@ -HTML.DefinitionID -TYPE: string/null -DEFAULT: NULL -VERSION: 2.0.0 ---DESCRIPTION-- - -

- Unique identifier for a custom-built HTML definition. If you edit - the raw version of the HTMLDefinition, introducing changes that the - configuration object does not reflect, you must specify this variable. - If you change your custom edits, you should change this directive, or - clear your cache. Example: -

-
-$config = HTMLPurifier_Config::createDefault();
-$config->set('HTML', 'DefinitionID', '1');
-$def = $config->getHTMLDefinition();
-$def->addAttribute('a', 'tabindex', 'Number');
-
-

- In the above example, the configuration is still at the defaults, but - using the advanced API, an extra attribute has been added. The - configuration object normally has no way of knowing that this change - has taken place, so it needs an extra directive: %HTML.DefinitionID. - If someone else attempts to use the default configuration, these two - pieces of code will not clobber each other in the cache, since one has - an extra directive attached to it. -

-

- You must specify a value to this directive to use the - advanced API features. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt deleted file mode 100755 index 229ae0267a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt +++ /dev/null @@ -1,16 +0,0 @@ -HTML.DefinitionRev -TYPE: int -VERSION: 2.0.0 -DEFAULT: 1 ---DESCRIPTION-- - -

- Revision identifier for your custom definition specified in - %HTML.DefinitionID. This serves the same purpose: uniquely identifying - your custom definition, but this one does so in a chronological - context: revision 3 is more up-to-date then revision 2. Thus, when - this gets incremented, the cache handling is smart enough to clean - up any older revisions of your definition as well as flush the - cache. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt deleted file mode 100755 index 9dab497f2f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt +++ /dev/null @@ -1,11 +0,0 @@ -HTML.Doctype -TYPE: string/null -DEFAULT: NULL ---DESCRIPTION-- -Doctype to use during filtering. Technically speaking this is not actually -a doctype (as it does not identify a corresponding DTD), but we are using -this name for sake of simplicity. When non-blank, this will override any -older directives like %HTML.XHTML or %HTML.Strict. ---ALLOWED-- -'HTML 4.01 Transitional', 'HTML 4.01 Strict', 'XHTML 1.0 Transitional', 'XHTML 1.0 Strict', 'XHTML 1.1' ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt deleted file mode 100755 index 7878dc0bf6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt +++ /dev/null @@ -1,11 +0,0 @@ -HTML.FlashAllowFullScreen -TYPE: bool -VERSION: 4.2.0 -DEFAULT: false ---DESCRIPTION-- -

- Whether or not to permit embedded Flash content from - %HTML.SafeObject to expand to the full screen. Corresponds to - the allowFullScreen parameter. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt deleted file mode 100755 index 57358f9bad..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt +++ /dev/null @@ -1,21 +0,0 @@ -HTML.ForbiddenAttributes -TYPE: lookup -VERSION: 3.1.0 -DEFAULT: array() ---DESCRIPTION-- -

- While this directive is similar to %HTML.AllowedAttributes, for - forwards-compatibility with XML, this attribute has a different syntax. Instead of - tag.attr, use tag@attr. To disallow href - attributes in a tags, set this directive to - a@href. You can also disallow an attribute globally with - attr or *@attr (either syntax is fine; the latter - is provided for consistency with %HTML.AllowedAttributes). -

-

- Warning: This directive complements %HTML.ForbiddenElements, - accordingly, check - out that directive for a discussion of why you - should think twice before using this directive. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt deleted file mode 100755 index 93a53e14fb..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt +++ /dev/null @@ -1,20 +0,0 @@ -HTML.ForbiddenElements -TYPE: lookup -VERSION: 3.1.0 -DEFAULT: array() ---DESCRIPTION-- -

- This was, perhaps, the most requested feature ever in HTML - Purifier. Please don't abuse it! This is the logical inverse of - %HTML.AllowedElements, and it will override that directive, or any - other directive. -

-

- If possible, %HTML.Allowed is recommended over this directive, because it - can sometimes be difficult to tell whether or not you've forbidden all of - the behavior you would like to disallow. If you forbid img - with the expectation of preventing images on your site, you'll be in for - a nasty surprise when people start using the background-image - CSS property. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt deleted file mode 100755 index e424c386ec..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt +++ /dev/null @@ -1,14 +0,0 @@ -HTML.MaxImgLength -TYPE: int/null -DEFAULT: 1200 -VERSION: 3.1.1 ---DESCRIPTION-- -

- This directive controls the maximum number of pixels in the width and - height attributes in img tags. This is - in place to prevent imagecrash attacks, disable with null at your own risk. - This directive is similar to %CSS.MaxImgLength, and both should be - concurrently edited, although there are - subtle differences in the input format (the HTML max is an integer). -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt deleted file mode 100755 index 700b30924a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt +++ /dev/null @@ -1,7 +0,0 @@ -HTML.Nofollow -TYPE: bool -VERSION: 4.3.0 -DEFAULT: FALSE ---DESCRIPTION-- -If enabled, nofollow rel attributes are added to all outgoing links. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt deleted file mode 100755 index 62e8e160c7..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt +++ /dev/null @@ -1,12 +0,0 @@ -HTML.Parent -TYPE: string -VERSION: 1.3.0 -DEFAULT: 'div' ---DESCRIPTION-- - -

- String name of element that HTML fragment passed to library will be - inserted in. An interesting variation would be using span as the - parent element, meaning that only inline tags would be allowed. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt deleted file mode 100755 index dfb720496d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt +++ /dev/null @@ -1,12 +0,0 @@ -HTML.Proprietary -TYPE: bool -VERSION: 3.1.0 -DEFAULT: false ---DESCRIPTION-- -

- Whether or not to allow proprietary elements and attributes in your - documents, as per HTMLPurifier_HTMLModule_Proprietary. - Warning: This can cause your documents to stop - validating! -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt deleted file mode 100755 index cdda09a4c5..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt +++ /dev/null @@ -1,13 +0,0 @@ -HTML.SafeEmbed -TYPE: bool -VERSION: 3.1.1 -DEFAULT: false ---DESCRIPTION-- -

- Whether or not to permit embed tags in documents, with a number of extra - security features added to prevent script execution. This is similar to - what websites like MySpace do to embed tags. Embed is a proprietary - element and will cause your website to stop validating; you should - see if you can use %Output.FlashCompat with %HTML.SafeObject instead - first.

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt deleted file mode 100644 index 5eb6ec2b5a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt +++ /dev/null @@ -1,13 +0,0 @@ -HTML.SafeIframe -TYPE: bool -VERSION: 4.4.0 -DEFAULT: false ---DESCRIPTION-- -

- Whether or not to permit iframe tags in untrusted documents. This - directive must be accompanied by a whitelist of permitted iframes, - such as %URI.SafeIframeRegexp, otherwise it will fatally error. - This directive has no effect on strict doctypes, as iframes are not - valid. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt deleted file mode 100755 index ceb342e22b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt +++ /dev/null @@ -1,13 +0,0 @@ -HTML.SafeObject -TYPE: bool -VERSION: 3.1.1 -DEFAULT: false ---DESCRIPTION-- -

- Whether or not to permit object tags in documents, with a number of extra - security features added to prevent script execution. This is similar to - what websites like MySpace do to object tags. You should also enable - %Output.FlashCompat in order to generate Internet Explorer - compatibility code for your object tags. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt deleted file mode 100644 index 5ebc7a19d5..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt +++ /dev/null @@ -1,10 +0,0 @@ -HTML.SafeScripting -TYPE: lookup -VERSION: 4.5.0 -DEFAULT: array() ---DESCRIPTION-- -

- Whether or not to permit script tags to external scripts in documents. - Inline scripting is not allowed, and the script must match an explicit whitelist. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt deleted file mode 100755 index a8b1de56be..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt +++ /dev/null @@ -1,9 +0,0 @@ -HTML.Strict -TYPE: bool -VERSION: 1.3.0 -DEFAULT: false -DEPRECATED-VERSION: 1.7.0 -DEPRECATED-USE: HTML.Doctype ---DESCRIPTION-- -Determines whether or not to use Transitional (loose) or Strict rulesets. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt deleted file mode 100644 index 587a16778b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt +++ /dev/null @@ -1,8 +0,0 @@ -HTML.TargetBlank -TYPE: bool -VERSION: 4.4.0 -DEFAULT: FALSE ---DESCRIPTION-- -If enabled, target=blank attributes are added to all outgoing links. -(This includes links from an HTTPS version of a page to an HTTP version.) ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt deleted file mode 100755 index b4c271b7fa..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt +++ /dev/null @@ -1,8 +0,0 @@ -HTML.TidyAdd -TYPE: lookup -VERSION: 2.0.0 -DEFAULT: array() ---DESCRIPTION-- - -Fixes to add to the default set of Tidy fixes as per your level. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt deleted file mode 100755 index 4186ccd0d1..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt +++ /dev/null @@ -1,24 +0,0 @@ -HTML.TidyLevel -TYPE: string -VERSION: 2.0.0 -DEFAULT: 'medium' ---DESCRIPTION-- - -

General level of cleanliness the Tidy module should enforce. -There are four allowed values:

-
-
none
-
No extra tidying should be done
-
light
-
Only fix elements that would be discarded otherwise due to - lack of support in doctype
-
medium
-
Enforce best practices
-
heavy
-
Transform all deprecated elements and attributes to standards - compliant equivalents
-
- ---ALLOWED-- -'none', 'light', 'medium', 'heavy' ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt deleted file mode 100755 index 996762bd1d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt +++ /dev/null @@ -1,8 +0,0 @@ -HTML.TidyRemove -TYPE: lookup -VERSION: 2.0.0 -DEFAULT: array() ---DESCRIPTION-- - -Fixes to remove from the default set of Tidy fixes as per your level. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt deleted file mode 100755 index 1db9237e9e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt +++ /dev/null @@ -1,9 +0,0 @@ -HTML.Trusted -TYPE: bool -VERSION: 2.0.0 -DEFAULT: false ---DESCRIPTION-- -Indicates whether or not the user input is trusted or not. If the input is -trusted, a more expansive set of allowed tags and attributes will be used. -See also %CSS.Trusted. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt deleted file mode 100755 index 2a47e384f4..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt +++ /dev/null @@ -1,11 +0,0 @@ -HTML.XHTML -TYPE: bool -DEFAULT: true -VERSION: 1.1.0 -DEPRECATED-VERSION: 1.7.0 -DEPRECATED-USE: HTML.Doctype ---DESCRIPTION-- -Determines whether or not output is XHTML 1.0 or HTML 4.01 flavor. ---ALIASES-- -Core.XHTML ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt deleted file mode 100755 index 08921fde70..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt +++ /dev/null @@ -1,10 +0,0 @@ -Output.CommentScriptContents -TYPE: bool -VERSION: 2.0.0 -DEFAULT: true ---DESCRIPTION-- -Determines whether or not HTML Purifier should attempt to fix up the -contents of script tags for legacy browsers with comments. ---ALIASES-- -Core.CommentScriptContents ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt deleted file mode 100755 index d6f0d9f295..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt +++ /dev/null @@ -1,15 +0,0 @@ -Output.FixInnerHTML -TYPE: bool -VERSION: 4.3.0 -DEFAULT: true ---DESCRIPTION-- -

- If true, HTML Purifier will protect against Internet Explorer's - mishandling of the innerHTML attribute by appending - a space to any attribute that does not contain angled brackets, spaces - or quotes, but contains a backtick. This slightly changes the - semantics of any given attribute, so if this is unacceptable and - you do not use innerHTML on any of your pages, you can - turn this directive off. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt deleted file mode 100755 index 93398e8598..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt +++ /dev/null @@ -1,11 +0,0 @@ -Output.FlashCompat -TYPE: bool -VERSION: 4.1.0 -DEFAULT: false ---DESCRIPTION-- -

- If true, HTML Purifier will generate Internet Explorer compatibility - code for all object code. This is highly recommended if you enable - %HTML.SafeObject. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt deleted file mode 100755 index 79f8ad82cf..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt +++ /dev/null @@ -1,13 +0,0 @@ -Output.Newline -TYPE: string/null -VERSION: 2.0.1 -DEFAULT: NULL ---DESCRIPTION-- - -

- Newline string to format final output with. If left null, HTML Purifier - will auto-detect the default newline type of the system and use that; - you can manually override it here. Remember, \r\n is Windows, \r - is Mac, and \n is Unix. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt deleted file mode 100755 index 232b02362a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt +++ /dev/null @@ -1,14 +0,0 @@ -Output.SortAttr -TYPE: bool -VERSION: 3.2.0 -DEFAULT: false ---DESCRIPTION-- -

- If true, HTML Purifier will sort attributes by name before writing them back - to the document, converting a tag like: <el b="" a="" c="" /> - to <el a="" b="" c="" />. This is a workaround for - a bug in FCKeditor which causes it to swap attributes order, adding noise - to text diffs. If you're not seeing this bug, chances are, you don't need - this directive. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt deleted file mode 100755 index 06bab00a0a..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt +++ /dev/null @@ -1,25 +0,0 @@ -Output.TidyFormat -TYPE: bool -VERSION: 1.1.1 -DEFAULT: false ---DESCRIPTION-- -

- Determines whether or not to run Tidy on the final output for pretty - formatting reasons, such as indentation and wrap. -

-

- This can greatly improve readability for editors who are hand-editing - the HTML, but is by no means necessary as HTML Purifier has already - fixed all major errors the HTML may have had. Tidy is a non-default - extension, and this directive will silently fail if Tidy is not - available. -

-

- If you are looking to make the overall look of your page's source - better, I recommend running Tidy on the entire page rather than just - user-content (after all, the indentation relative to the containing - blocks will be incorrect). -

---ALIASES-- -Core.TidyFormat ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt deleted file mode 100755 index 071bc0295d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt +++ /dev/null @@ -1,7 +0,0 @@ -Test.ForceNoIconv -TYPE: bool -DEFAULT: false ---DESCRIPTION-- -When set to true, HTMLPurifier_Encoder will act as if iconv does not exist -and use only pure PHP implementations. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt deleted file mode 100755 index 666635a5ff..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt +++ /dev/null @@ -1,17 +0,0 @@ -URI.AllowedSchemes -TYPE: lookup ---DEFAULT-- -array ( - 'http' => true, - 'https' => true, - 'mailto' => true, - 'ftp' => true, - 'nntp' => true, - 'news' => true, -) ---DESCRIPTION-- -Whitelist that defines the schemes that a URI is allowed to have. This -prevents XSS attacks from using pseudo-schemes like javascript or mocha. -There is also support for the data and file -URI schemes, but they are not enabled by default. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt deleted file mode 100755 index 876f0680cf..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt +++ /dev/null @@ -1,17 +0,0 @@ -URI.Base -TYPE: string/null -VERSION: 2.1.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- The base URI is the URI of the document this purified HTML will be - inserted into. This information is important if HTML Purifier needs - to calculate absolute URIs from relative URIs, such as when %URI.MakeAbsolute - is on. You may use a non-absolute URI for this value, but behavior - may vary (%URI.MakeAbsolute deals nicely with both absolute and - relative paths, but forwards-compatibility is not guaranteed). - Warning: If set, the scheme on this URI - overrides the one specified by %URI.DefaultScheme. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt deleted file mode 100755 index 728e378cbe..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt +++ /dev/null @@ -1,10 +0,0 @@ -URI.DefaultScheme -TYPE: string -DEFAULT: 'http' ---DESCRIPTION-- - -

- Defines through what scheme the output will be served, in order to - select the proper object validator when no scheme information is present. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt deleted file mode 100755 index f05312ba86..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt +++ /dev/null @@ -1,11 +0,0 @@ -URI.DefinitionID -TYPE: string/null -VERSION: 2.1.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- Unique identifier for a custom-built URI definition. If you want - to add custom URIFilters, you must specify this value. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt deleted file mode 100755 index 80cfea93f7..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt +++ /dev/null @@ -1,11 +0,0 @@ -URI.DefinitionRev -TYPE: int -VERSION: 2.1.0 -DEFAULT: 1 ---DESCRIPTION-- - -

- Revision identifier for your custom definition. See - %HTML.DefinitionRev for details. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt deleted file mode 100755 index 71ce025a2d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt +++ /dev/null @@ -1,14 +0,0 @@ -URI.Disable -TYPE: bool -VERSION: 1.3.0 -DEFAULT: false ---DESCRIPTION-- - -

- Disables all URIs in all forms. Not sure why you'd want to do that - (after all, the Internet's founded on the notion of a hyperlink). -

- ---ALIASES-- -Attr.DisableURI ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt deleted file mode 100755 index 13c122c8ce..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt +++ /dev/null @@ -1,11 +0,0 @@ -URI.DisableExternal -TYPE: bool -VERSION: 1.2.0 -DEFAULT: false ---DESCRIPTION-- -Disables links to external websites. This is a highly effective anti-spam -and anti-pagerank-leech measure, but comes at a hefty price: nolinks or -images outside of your domain will be allowed. Non-linkified URIs will -still be preserved. If you want to be able to link to subdomains or use -absolute URIs, specify %URI.Host for your website. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt deleted file mode 100755 index abcc1efd61..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt +++ /dev/null @@ -1,13 +0,0 @@ -URI.DisableExternalResources -TYPE: bool -VERSION: 1.3.0 -DEFAULT: false ---DESCRIPTION-- -Disables the embedding of external resources, preventing users from -embedding things like images from other hosts. This prevents access -tracking (good for email viewers), bandwidth leeching, cross-site request -forging, goatse.cx posting, and other nasties, but also results in a loss -of end-user functionality (they can't directly post a pic they posted from -Flickr anymore). Use it if you don't have a robust user-content moderation -team. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt deleted file mode 100755 index f891de4996..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt +++ /dev/null @@ -1,15 +0,0 @@ -URI.DisableResources -TYPE: bool -VERSION: 4.2.0 -DEFAULT: false ---DESCRIPTION-- -

- Disables embedding resources, essentially meaning no pictures. You can - still link to them though. See %URI.DisableExternalResources for why - this might be a good idea. -

-

- Note: While this directive has been available since 1.3.0, - it didn't actually start doing anything until 4.2.0. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt deleted file mode 100755 index ee83b121de..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt +++ /dev/null @@ -1,19 +0,0 @@ -URI.Host -TYPE: string/null -VERSION: 1.2.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- Defines the domain name of the server, so we can determine whether or - an absolute URI is from your website or not. Not strictly necessary, - as users should be using relative URIs to reference resources on your - website. It will, however, let you use absolute URIs to link to - subdomains of the domain you post here: i.e. example.com will allow - sub.example.com. However, higher up domains will still be excluded: - if you set %URI.Host to sub.example.com, example.com will be blocked. - Note: This directive overrides %URI.Base because - a given page may be on a sub-domain, but you wish HTML Purifier to be - more relaxed and allow some of the parent domains too. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt deleted file mode 100755 index 0b6df7625d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt +++ /dev/null @@ -1,9 +0,0 @@ -URI.HostBlacklist -TYPE: list -VERSION: 1.3.0 -DEFAULT: array() ---DESCRIPTION-- -List of strings that are forbidden in the host of any URI. Use it to kill -domain names of spam, etc. Note that it will catch anything in the domain, -so moo.com will catch moo.com.example.com. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt deleted file mode 100755 index 4214900a59..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt +++ /dev/null @@ -1,13 +0,0 @@ -URI.MakeAbsolute -TYPE: bool -VERSION: 2.1.0 -DEFAULT: false ---DESCRIPTION-- - -

- Converts all URIs into absolute forms. This is useful when the HTML - being filtered assumes a specific base path, but will actually be - viewed in a different context (and setting an alternate base URI is - not possible). %URI.Base must be set for this directive to work. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt deleted file mode 100755 index 58c81dcc44..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt +++ /dev/null @@ -1,83 +0,0 @@ -URI.Munge -TYPE: string/null -VERSION: 1.3.0 -DEFAULT: NULL ---DESCRIPTION-- - -

- Munges all browsable (usually http, https and ftp) - absolute URIs into another URI, usually a URI redirection service. - This directive accepts a URI, formatted with a %s where - the url-encoded original URI should be inserted (sample: - http://www.google.com/url?q=%s). -

-

- Uses for this directive: -

-
    -
  • - Prevent PageRank leaks, while being fairly transparent - to users (you may also want to add some client side JavaScript to - override the text in the statusbar). Notice: - Many security experts believe that this form of protection does not deter spam-bots. -
  • -
  • - Redirect users to a splash page telling them they are leaving your - website. While this is poor usability practice, it is often mandated - in corporate environments. -
  • -
-

- Prior to HTML Purifier 3.1.1, this directive also enabled the munging - of browsable external resources, which could break things if your redirection - script was a splash page or used meta tags. To revert to - previous behavior, please use %URI.MungeResources. -

-

- You may want to also use %URI.MungeSecretKey along with this directive - in order to enforce what URIs your redirector script allows. Open - redirector scripts can be a security risk and negatively affect the - reputation of your domain name. -

-

- Starting with HTML Purifier 3.1.1, there is also these substitutions: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyDescriptionExample <a href="">
%r1 - The URI embeds a resource
(blank) - The URI is merely a link
%nThe name of the tag this URI came froma
%mThe name of the attribute this URI came fromhref
%pThe name of the CSS property this URI came from, or blank if irrelevant
-

- Admittedly, these letters are somewhat arbitrary; the only stipulation - was that they couldn't be a through f. r is for resource (I would have preferred - e, but you take what you can get), n is for name, m - was picked because it came after n (and I couldn't use a), p is for - property. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt deleted file mode 100755 index 6fce0fdc37..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt +++ /dev/null @@ -1,17 +0,0 @@ -URI.MungeResources -TYPE: bool -VERSION: 3.1.1 -DEFAULT: false ---DESCRIPTION-- -

- If true, any URI munging directives like %URI.Munge - will also apply to embedded resources, such as <img src="">. - Be careful enabling this directive if you have a redirector script - that does not use the Location HTTP header; all of your images - and other embedded resources will break. -

-

- Warning: It is strongly advised you use this in conjunction - %URI.MungeSecretKey to mitigate the security risk of an open redirector. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt deleted file mode 100755 index 0d00f62ea8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt +++ /dev/null @@ -1,30 +0,0 @@ -URI.MungeSecretKey -TYPE: string/null -VERSION: 3.1.1 -DEFAULT: NULL ---DESCRIPTION-- -

- This directive enables secure checksum generation along with %URI.Munge. - It should be set to a secure key that is not shared with anyone else. - The checksum can be placed in the URI using %t. Use of this checksum - affords an additional level of protection by allowing a redirector - to check if a URI has passed through HTML Purifier with this line: -

- -
$checksum === sha1($secret_key . ':' . $url)
- -

- If the output is TRUE, the redirector script should accept the URI. -

- -

- Please note that it would still be possible for an attacker to procure - secure hashes en-mass by abusing your website's Preview feature or the - like, but this service affords an additional level of protection - that should be combined with website blacklisting. -

- -

- Remember this has no effect if %URI.Munge is not on. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt deleted file mode 100755 index 23331a4e79..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt +++ /dev/null @@ -1,9 +0,0 @@ -URI.OverrideAllowedSchemes -TYPE: bool -DEFAULT: true ---DESCRIPTION-- -If this is set to true (which it is by default), you can override -%URI.AllowedSchemes by simply registering a HTMLPurifier_URIScheme to the -registry. If false, you will also have to update that directive in order -to add more schemes. ---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt deleted file mode 100644 index 79084832be..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt +++ /dev/null @@ -1,22 +0,0 @@ -URI.SafeIframeRegexp -TYPE: string/null -VERSION: 4.4.0 -DEFAULT: NULL ---DESCRIPTION-- -

- A PCRE regular expression that will be matched against an iframe URI. This is - a relatively inflexible scheme, but works well enough for the most common - use-case of iframes: embedded video. This directive only has an effect if - %HTML.SafeIframe is enabled. Here are some example values: -

-
    -
  • %^http://www.youtube.com/embed/% - Allow YouTube videos
  • -
  • %^http://player.vimeo.com/video/% - Allow Vimeo videos
  • -
  • %^http://(www.youtube.com/embed/|player.vimeo.com/video/)% - Allow both
  • -
-

- Note that this directive does not give you enough granularity to, say, disable - all autoplay videos. Pipe up on the HTML Purifier forums if this - is a capability you want. -

---# vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/info.ini b/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/info.ini deleted file mode 100755 index 5de4505e1b..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ConfigSchema/schema/info.ini +++ /dev/null @@ -1,3 +0,0 @@ -name = "HTML Purifier" - -; vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ContentSets.php b/oc-includes/htmlpurifier/HTMLPurifier/ContentSets.php deleted file mode 100755 index 3b6e96f5f5..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ContentSets.php +++ /dev/null @@ -1,155 +0,0 @@ - true) indexed by name. - * @note This is in HTMLPurifier_HTMLDefinition->info_content_sets - */ - public $lookup = array(); - - /** - * Synchronized list of defined content sets (keys of info) - */ - protected $keys = array(); - /** - * Synchronized list of defined content values (values of info) - */ - protected $values = array(); - - /** - * Merges in module's content sets, expands identifiers in the content - * sets and populates the keys, values and lookup member variables. - * @param $modules List of HTMLPurifier_HTMLModule - */ - public function __construct($modules) { - if (!is_array($modules)) $modules = array($modules); - // populate content_sets based on module hints - // sorry, no way of overloading - foreach ($modules as $module_i => $module) { - foreach ($module->content_sets as $key => $value) { - $temp = $this->convertToLookup($value); - if (isset($this->lookup[$key])) { - // add it into the existing content set - $this->lookup[$key] = array_merge($this->lookup[$key], $temp); - } else { - $this->lookup[$key] = $temp; - } - } - } - $old_lookup = false; - while ($old_lookup !== $this->lookup) { - $old_lookup = $this->lookup; - foreach ($this->lookup as $i => $set) { - $add = array(); - foreach ($set as $element => $x) { - if (isset($this->lookup[$element])) { - $add += $this->lookup[$element]; - unset($this->lookup[$i][$element]); - } - } - $this->lookup[$i] += $add; - } - } - - foreach ($this->lookup as $key => $lookup) { - $this->info[$key] = implode(' | ', array_keys($lookup)); - } - $this->keys = array_keys($this->info); - $this->values = array_values($this->info); - } - - /** - * Accepts a definition; generates and assigns a ChildDef for it - * @param $def HTMLPurifier_ElementDef reference - * @param $module Module that defined the ElementDef - */ - public function generateChildDef(&$def, $module) { - if (!empty($def->child)) return; // already done! - $content_model = $def->content_model; - if (is_string($content_model)) { - // Assume that $this->keys is alphanumeric - $def->content_model = preg_replace_callback( - '/\b(' . implode('|', $this->keys) . ')\b/', - array($this, 'generateChildDefCallback'), - $content_model - ); - //$def->content_model = str_replace( - // $this->keys, $this->values, $content_model); - } - $def->child = $this->getChildDef($def, $module); - } - - public function generateChildDefCallback($matches) { - return $this->info[$matches[0]]; - } - - /** - * Instantiates a ChildDef based on content_model and content_model_type - * member variables in HTMLPurifier_ElementDef - * @note This will also defer to modules for custom HTMLPurifier_ChildDef - * subclasses that need content set expansion - * @param $def HTMLPurifier_ElementDef to have ChildDef extracted - * @return HTMLPurifier_ChildDef corresponding to ElementDef - */ - public function getChildDef($def, $module) { - $value = $def->content_model; - if (is_object($value)) { - trigger_error( - 'Literal object child definitions should be stored in '. - 'ElementDef->child not ElementDef->content_model', - E_USER_NOTICE - ); - return $value; - } - switch ($def->content_model_type) { - case 'required': - return new HTMLPurifier_ChildDef_Required($value); - case 'optional': - return new HTMLPurifier_ChildDef_Optional($value); - case 'empty': - return new HTMLPurifier_ChildDef_Empty(); - case 'custom': - return new HTMLPurifier_ChildDef_Custom($value); - } - // defer to its module - $return = false; - if ($module->defines_child_def) { // save a func call - $return = $module->getChildDef($def); - } - if ($return !== false) return $return; - // error-out - trigger_error( - 'Could not determine which ChildDef class to instantiate', - E_USER_ERROR - ); - return false; - } - - /** - * Converts a string list of elements separated by pipes into - * a lookup array. - * @param $string List of elements - * @return Lookup array of elements - */ - protected function convertToLookup($string) { - $array = explode('|', str_replace(' ', '', $string)); - $ret = array(); - foreach ($array as $i => $k) { - $ret[$k] = true; - } - return $ret; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Context.php b/oc-includes/htmlpurifier/HTMLPurifier/Context.php deleted file mode 100755 index 9ddf0c5476..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Context.php +++ /dev/null @@ -1,82 +0,0 @@ -_storage[$name])) { - trigger_error("Name $name produces collision, cannot re-register", - E_USER_ERROR); - return; - } - $this->_storage[$name] =& $ref; - } - - /** - * Retrieves a variable reference from the context. - * @param $name String name - * @param $ignore_error Boolean whether or not to ignore error - */ - public function &get($name, $ignore_error = false) { - if (!isset($this->_storage[$name])) { - if (!$ignore_error) { - trigger_error("Attempted to retrieve non-existent variable $name", - E_USER_ERROR); - } - $var = null; // so we can return by reference - return $var; - } - return $this->_storage[$name]; - } - - /** - * Destorys a variable in the context. - * @param $name String name - */ - public function destroy($name) { - if (!isset($this->_storage[$name])) { - trigger_error("Attempted to destroy non-existent variable $name", - E_USER_ERROR); - return; - } - unset($this->_storage[$name]); - } - - /** - * Checks whether or not the variable exists. - * @param $name String name - */ - public function exists($name) { - return isset($this->_storage[$name]); - } - - /** - * Loads a series of variables from an associative array - * @param $context_array Assoc array of variables to load - */ - public function loadArray($context_array) { - foreach ($context_array as $key => $discard) { - $this->register($key, $context_array[$key]); - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Definition.php b/oc-includes/htmlpurifier/HTMLPurifier/Definition.php deleted file mode 100755 index c7f82eba43..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Definition.php +++ /dev/null @@ -1,50 +0,0 @@ -setup) return; - $this->setup = true; - $this->doSetup($config); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache.php b/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache.php deleted file mode 100755 index c6e1e388c6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache.php +++ /dev/null @@ -1,108 +0,0 @@ -type = $type; - } - - /** - * Generates a unique identifier for a particular configuration - * @param Instance of HTMLPurifier_Config - */ - public function generateKey($config) { - return $config->version . ',' . // possibly replace with function calls - $config->getBatchSerial($this->type) . ',' . - $config->get($this->type . '.DefinitionRev'); - } - - /** - * Tests whether or not a key is old with respect to the configuration's - * version and revision number. - * @param $key Key to test - * @param $config Instance of HTMLPurifier_Config to test against - */ - public function isOld($key, $config) { - if (substr_count($key, ',') < 2) return true; - list($version, $hash, $revision) = explode(',', $key, 3); - $compare = version_compare($version, $config->version); - // version mismatch, is always old - if ($compare != 0) return true; - // versions match, ids match, check revision number - if ( - $hash == $config->getBatchSerial($this->type) && - $revision < $config->get($this->type . '.DefinitionRev') - ) return true; - return false; - } - - /** - * Checks if a definition's type jives with the cache's type - * @note Throws an error on failure - * @param $def Definition object to check - * @return Boolean true if good, false if not - */ - public function checkDefType($def) { - if ($def->type !== $this->type) { - trigger_error("Cannot use definition of type {$def->type} in cache for {$this->type}"); - return false; - } - return true; - } - - /** - * Adds a definition object to the cache - */ - abstract public function add($def, $config); - - /** - * Unconditionally saves a definition object to the cache - */ - abstract public function set($def, $config); - - /** - * Replace an object in the cache - */ - abstract public function replace($def, $config); - - /** - * Retrieves a definition object from the cache - */ - abstract public function get($config); - - /** - * Removes a definition object to the cache - */ - abstract public function remove($config); - - /** - * Clears all objects from cache - */ - abstract public function flush($config); - - /** - * Clears all expired (older version or revision) objects from cache - * @note Be carefuly implementing this method as flush. Flush must - * not interfere with other Definition types, and cleanup() - * should not be repeatedly called by userland code. - */ - abstract public function cleanup($config); - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator.php b/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator.php deleted file mode 100755 index b0fb6d0cd6..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator.php +++ /dev/null @@ -1,62 +0,0 @@ -copy(); - // reference is necessary for mocks in PHP 4 - $decorator->cache =& $cache; - $decorator->type = $cache->type; - return $decorator; - } - - /** - * Cross-compatible clone substitute - */ - public function copy() { - return new HTMLPurifier_DefinitionCache_Decorator(); - } - - public function add($def, $config) { - return $this->cache->add($def, $config); - } - - public function set($def, $config) { - return $this->cache->set($def, $config); - } - - public function replace($def, $config) { - return $this->cache->replace($def, $config); - } - - public function get($config) { - return $this->cache->get($config); - } - - public function remove($config) { - return $this->cache->remove($config); - } - - public function flush($config) { - return $this->cache->flush($config); - } - - public function cleanup($config) { - return $this->cache->cleanup($config); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php b/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php deleted file mode 100755 index d4cc35c4bc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php +++ /dev/null @@ -1,43 +0,0 @@ -definitions[$this->generateKey($config)] = $def; - return $status; - } - - public function set($def, $config) { - $status = parent::set($def, $config); - if ($status) $this->definitions[$this->generateKey($config)] = $def; - return $status; - } - - public function replace($def, $config) { - $status = parent::replace($def, $config); - if ($status) $this->definitions[$this->generateKey($config)] = $def; - return $status; - } - - public function get($config) { - $key = $this->generateKey($config); - if (isset($this->definitions[$key])) return $this->definitions[$key]; - $this->definitions[$key] = parent::get($config); - return $this->definitions[$key]; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in b/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in deleted file mode 100755 index 21a8fcfda2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in +++ /dev/null @@ -1,47 +0,0 @@ -checkDefType($def)) return; - $file = $this->generateFilePath($config); - if (file_exists($file)) return false; - if (!$this->_prepareDir($config)) return false; - return $this->_write($file, serialize($def), $config); - } - - public function set($def, $config) { - if (!$this->checkDefType($def)) return; - $file = $this->generateFilePath($config); - if (!$this->_prepareDir($config)) return false; - return $this->_write($file, serialize($def), $config); - } - - public function replace($def, $config) { - if (!$this->checkDefType($def)) return; - $file = $this->generateFilePath($config); - if (!file_exists($file)) return false; - if (!$this->_prepareDir($config)) return false; - return $this->_write($file, serialize($def), $config); - } - - public function get($config) { - $file = $this->generateFilePath($config); - if (!file_exists($file)) return false; - return unserialize(file_get_contents($file)); - } - - public function remove($config) { - $file = $this->generateFilePath($config); - if (!file_exists($file)) return false; - return unlink($file); - } - - public function flush($config) { - if (!$this->_prepareDir($config)) return false; - $dir = $this->generateDirectoryPath($config); - $dh = opendir($dir); - while (false !== ($filename = readdir($dh))) { - if (empty($filename)) continue; - if ($filename[0] === '.') continue; - unlink($dir . '/' . $filename); - } - } - - public function cleanup($config) { - if (!$this->_prepareDir($config)) return false; - $dir = $this->generateDirectoryPath($config); - $dh = opendir($dir); - while (false !== ($filename = readdir($dh))) { - if (empty($filename)) continue; - if ($filename[0] === '.') continue; - $key = substr($filename, 0, strlen($filename) - 4); - if ($this->isOld($key, $config)) unlink($dir . '/' . $filename); - } - } - - /** - * Generates the file path to the serial file corresponding to - * the configuration and definition name - * @todo Make protected - */ - public function generateFilePath($config) { - $key = $this->generateKey($config); - return $this->generateDirectoryPath($config) . '/' . $key . '.ser'; - } - - /** - * Generates the path to the directory contain this cache's serial files - * @note No trailing slash - * @todo Make protected - */ - public function generateDirectoryPath($config) { - $base = $this->generateBaseDirectoryPath($config); - return $base . '/' . $this->type; - } - - /** - * Generates path to base directory that contains all definition type - * serials - * @todo Make protected - */ - public function generateBaseDirectoryPath($config) { - $base = $config->get('Cache.SerializerPath'); - $base = is_null($base) ? HTMLPURIFIER_PREFIX . '/HTMLPurifier/DefinitionCache/Serializer' : $base; - return $base; - } - - /** - * Convenience wrapper function for file_put_contents - * @param $file File name to write to - * @param $data Data to write into file - * @param $config Config object - * @return Number of bytes written if success, or false if failure. - */ - private function _write($file, $data, $config) { - $result = file_put_contents($file, $data); - if ($result !== false) { - // set permissions of the new file (no execute) - $chmod = $config->get('Cache.SerializerPermissions'); - if (!$chmod) { - $chmod = 0644; // invalid config or simpletest - } - $chmod = $chmod & 0666; - chmod($file, $chmod); - } - return $result; - } - - /** - * Prepares the directory that this type stores the serials in - * @param $config Config object - * @return True if successful - */ - private function _prepareDir($config) { - $directory = $this->generateDirectoryPath($config); - $chmod = $config->get('Cache.SerializerPermissions'); - if (!$chmod) { - $chmod = 0755; // invalid config or simpletest - } - if (!is_dir($directory)) { - $base = $this->generateBaseDirectoryPath($config); - if (!is_dir($base)) { - trigger_error('Base directory '.$base.' does not exist, - please create or change using %Cache.SerializerPath', - E_USER_WARNING); - return false; - } elseif (!$this->_testPermissions($base, $chmod)) { - return false; - } - $old = umask(0000); - mkdir($directory, $chmod); - umask($old); - } elseif (!$this->_testPermissions($directory, $chmod)) { - return false; - } - return true; - } - - /** - * Tests permissions on a directory and throws out friendly - * error messages and attempts to chmod it itself if possible - * @param $dir Directory path - * @param $chmod Permissions - * @return True if directory writable - */ - private function _testPermissions($dir, $chmod) { - // early abort, if it is writable, everything is hunky-dory - if (is_writable($dir)) return true; - if (!is_dir($dir)) { - // generally, you'll want to handle this beforehand - // so a more specific error message can be given - trigger_error('Directory '.$dir.' does not exist', - E_USER_WARNING); - return false; - } - if (function_exists('posix_getuid')) { - // POSIX system, we can give more specific advice - if (fileowner($dir) === posix_getuid()) { - // we can chmod it ourselves - $chmod = $chmod | 0700; - if (chmod($dir, $chmod)) return true; - } elseif (filegroup($dir) === posix_getgid()) { - $chmod = $chmod | 0070; - } else { - // PHP's probably running as nobody, so we'll - // need to give global permissions - $chmod = $chmod | 0777; - } - trigger_error('Directory '.$dir.' not writable, '. - 'please chmod to ' . decoct($chmod), - E_USER_WARNING); - } else { - // generic error message - trigger_error('Directory '.$dir.' not writable, '. - 'please alter file permissions', - E_USER_WARNING); - } - return false; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Serializer/README b/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Serializer/README deleted file mode 100755 index 2e35c1c3d0..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCache/Serializer/README +++ /dev/null @@ -1,3 +0,0 @@ -This is a dummy file to prevent Git from ignoring this empty directory. - - vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCacheFactory.php b/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCacheFactory.php deleted file mode 100755 index a6ead62818..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DefinitionCacheFactory.php +++ /dev/null @@ -1,91 +0,0 @@ - array()); - protected $implementations = array(); - protected $decorators = array(); - - /** - * Initialize default decorators - */ - public function setup() { - $this->addDecorator('Cleanup'); - } - - /** - * Retrieves an instance of global definition cache factory. - */ - public static function instance($prototype = null) { - static $instance; - if ($prototype !== null) { - $instance = $prototype; - } elseif ($instance === null || $prototype === true) { - $instance = new HTMLPurifier_DefinitionCacheFactory(); - $instance->setup(); - } - return $instance; - } - - /** - * Registers a new definition cache object - * @param $short Short name of cache object, for reference - * @param $long Full class name of cache object, for construction - */ - public function register($short, $long) { - $this->implementations[$short] = $long; - } - - /** - * Factory method that creates a cache object based on configuration - * @param $name Name of definitions handled by cache - * @param $config Instance of HTMLPurifier_Config - */ - public function create($type, $config) { - $method = $config->get('Cache.DefinitionImpl'); - if ($method === null) { - return new HTMLPurifier_DefinitionCache_Null($type); - } - if (!empty($this->caches[$method][$type])) { - return $this->caches[$method][$type]; - } - if ( - isset($this->implementations[$method]) && - class_exists($class = $this->implementations[$method], false) - ) { - $cache = new $class($type); - } else { - if ($method != 'Serializer') { - trigger_error("Unrecognized DefinitionCache $method, using Serializer instead", E_USER_WARNING); - } - $cache = new HTMLPurifier_DefinitionCache_Serializer($type); - } - foreach ($this->decorators as $decorator) { - $new_cache = $decorator->decorate($cache); - // prevent infinite recursion in PHP 4 - unset($cache); - $cache = $new_cache; - } - $this->caches[$method][$type] = $cache; - return $this->caches[$method][$type]; - } - - /** - * Registers a decorator to add to all new cache objects - * @param - */ - public function addDecorator($decorator) { - if (is_string($decorator)) { - $class = "HTMLPurifier_DefinitionCache_Decorator_$decorator"; - $decorator = new $class; - } - $this->decorators[$decorator->name] = $decorator; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Doctype.php b/oc-includes/htmlpurifier/HTMLPurifier/Doctype.php deleted file mode 100755 index 1e3c574c06..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Doctype.php +++ /dev/null @@ -1,60 +0,0 @@ -renderDoctype. - * If structure changes, please update that function. - */ -class HTMLPurifier_Doctype -{ - /** - * Full name of doctype - */ - public $name; - - /** - * List of standard modules (string identifiers or literal objects) - * that this doctype uses - */ - public $modules = array(); - - /** - * List of modules to use for tidying up code - */ - public $tidyModules = array(); - - /** - * Is the language derived from XML (i.e. XHTML)? - */ - public $xml = true; - - /** - * List of aliases for this doctype - */ - public $aliases = array(); - - /** - * Public DTD identifier - */ - public $dtdPublic; - - /** - * System DTD identifier - */ - public $dtdSystem; - - public function __construct($name = null, $xml = true, $modules = array(), - $tidyModules = array(), $aliases = array(), $dtd_public = null, $dtd_system = null - ) { - $this->name = $name; - $this->xml = $xml; - $this->modules = $modules; - $this->tidyModules = $tidyModules; - $this->aliases = $aliases; - $this->dtdPublic = $dtd_public; - $this->dtdSystem = $dtd_system; - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/DoctypeRegistry.php b/oc-includes/htmlpurifier/HTMLPurifier/DoctypeRegistry.php deleted file mode 100755 index 86049e9391..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/DoctypeRegistry.php +++ /dev/null @@ -1,103 +0,0 @@ -doctypes[$doctype->name] = $doctype; - $name = $doctype->name; - // hookup aliases - foreach ($doctype->aliases as $alias) { - if (isset($this->doctypes[$alias])) continue; - $this->aliases[$alias] = $name; - } - // remove old aliases - if (isset($this->aliases[$name])) unset($this->aliases[$name]); - return $doctype; - } - - /** - * Retrieves reference to a doctype of a certain name - * @note This function resolves aliases - * @note When possible, use the more fully-featured make() - * @param $doctype Name of doctype - * @return Editable doctype object - */ - public function get($doctype) { - if (isset($this->aliases[$doctype])) $doctype = $this->aliases[$doctype]; - if (!isset($this->doctypes[$doctype])) { - trigger_error('Doctype ' . htmlspecialchars($doctype) . ' does not exist', E_USER_ERROR); - $anon = new HTMLPurifier_Doctype($doctype); - return $anon; - } - return $this->doctypes[$doctype]; - } - - /** - * Creates a doctype based on a configuration object, - * will perform initialization on the doctype - * @note Use this function to get a copy of doctype that config - * can hold on to (this is necessary in order to tell - * Generator whether or not the current document is XML - * based or not). - */ - public function make($config) { - return clone $this->get($this->getDoctypeFromConfig($config)); - } - - /** - * Retrieves the doctype from the configuration object - */ - public function getDoctypeFromConfig($config) { - // recommended test - $doctype = $config->get('HTML.Doctype'); - if (!empty($doctype)) return $doctype; - $doctype = $config->get('HTML.CustomDoctype'); - if (!empty($doctype)) return $doctype; - // backwards-compatibility - if ($config->get('HTML.XHTML')) { - $doctype = 'XHTML 1.0'; - } else { - $doctype = 'HTML 4.01'; - } - if ($config->get('HTML.Strict')) { - $doctype .= ' Strict'; - } else { - $doctype .= ' Transitional'; - } - return $doctype; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ElementDef.php b/oc-includes/htmlpurifier/HTMLPurifier/ElementDef.php deleted file mode 100755 index 10f7ab7f8c..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ElementDef.php +++ /dev/null @@ -1,195 +0,0 @@ -setup(), this array may also - * contain an array at index 0 that indicates which attribute - * collections to load into the full array. It may also - * contain string indentifiers in lieu of HTMLPurifier_AttrDef, - * see HTMLPurifier_AttrTypes on how they are expanded during - * HTMLPurifier_HTMLDefinition->setup() processing. - */ - public $attr = array(); - - // XXX: Design note: currently, it's not possible to override - // previously defined AttrTransforms without messing around with - // the final generated config. This is by design; a previous version - // used an associated list of attr_transform, but it was extremely - // easy to accidentally override other attribute transforms by - // forgetting to specify an index (and just using 0.) While we - // could check this by checking the index number and complaining, - // there is a second problem which is that it is not at all easy to - // tell when something is getting overridden. Combine this with a - // codebase where this isn't really being used, and it's perfect for - // nuking. - - /** - * List of tags HTMLPurifier_AttrTransform to be done before validation - */ - public $attr_transform_pre = array(); - - /** - * List of tags HTMLPurifier_AttrTransform to be done after validation - */ - public $attr_transform_post = array(); - - /** - * HTMLPurifier_ChildDef of this tag. - */ - public $child; - - /** - * Abstract string representation of internal ChildDef rules. See - * HTMLPurifier_ContentSets for how this is parsed and then transformed - * into an HTMLPurifier_ChildDef. - * @warning This is a temporary variable that is not available after - * being processed by HTMLDefinition - */ - public $content_model; - - /** - * Value of $child->type, used to determine which ChildDef to use, - * used in combination with $content_model. - * @warning This must be lowercase - * @warning This is a temporary variable that is not available after - * being processed by HTMLDefinition - */ - public $content_model_type; - - - - /** - * Does the element have a content model (#PCDATA | Inline)*? This - * is important for chameleon ins and del processing in - * HTMLPurifier_ChildDef_Chameleon. Dynamically set: modules don't - * have to worry about this one. - */ - public $descendants_are_inline = false; - - /** - * List of the names of required attributes this element has. Dynamically - * populated by HTMLPurifier_HTMLDefinition::getElement - */ - public $required_attr = array(); - - /** - * Lookup table of tags excluded from all descendants of this tag. - * @note SGML permits exclusions for all descendants, but this is - * not possible with DTDs or XML Schemas. W3C has elected to - * use complicated compositions of content_models to simulate - * exclusion for children, but we go the simpler, SGML-style - * route of flat-out exclusions, which correctly apply to - * all descendants and not just children. Note that the XHTML - * Modularization Abstract Modules are blithely unaware of such - * distinctions. - */ - public $excludes = array(); - - /** - * This tag is explicitly auto-closed by the following tags. - */ - public $autoclose = array(); - - /** - * If a foreign element is found in this element, test if it is - * allowed by this sub-element; if it is, instead of closing the - * current element, place it inside this element. - */ - public $wrap; - - /** - * Whether or not this is a formatting element affected by the - * "Active Formatting Elements" algorithm. - */ - public $formatting; - - /** - * Low-level factory constructor for creating new standalone element defs - */ - public static function create($content_model, $content_model_type, $attr) { - $def = new HTMLPurifier_ElementDef(); - $def->content_model = $content_model; - $def->content_model_type = $content_model_type; - $def->attr = $attr; - return $def; - } - - /** - * Merges the values of another element definition into this one. - * Values from the new element def take precedence if a value is - * not mergeable. - */ - public function mergeIn($def) { - - // later keys takes precedence - foreach($def->attr as $k => $v) { - if ($k === 0) { - // merge in the includes - // sorry, no way to override an include - foreach ($v as $v2) { - $this->attr[0][] = $v2; - } - continue; - } - if ($v === false) { - if (isset($this->attr[$k])) unset($this->attr[$k]); - continue; - } - $this->attr[$k] = $v; - } - $this->_mergeAssocArray($this->excludes, $def->excludes); - $this->attr_transform_pre = array_merge($this->attr_transform_pre, $def->attr_transform_pre); - $this->attr_transform_post = array_merge($this->attr_transform_post, $def->attr_transform_post); - - if(!empty($def->content_model)) { - $this->content_model = - str_replace("#SUPER", $this->content_model, $def->content_model); - $this->child = false; - } - if(!empty($def->content_model_type)) { - $this->content_model_type = $def->content_model_type; - $this->child = false; - } - if(!is_null($def->child)) $this->child = $def->child; - if(!is_null($def->formatting)) $this->formatting = $def->formatting; - if($def->descendants_are_inline) $this->descendants_are_inline = $def->descendants_are_inline; - - } - - /** - * Merges one array into another, removes values which equal false - * @param $a1 Array by reference that is merged into - * @param $a2 Array that merges into $a1 - */ - private function _mergeAssocArray(&$a1, $a2) { - foreach ($a2 as $k => $v) { - if ($v === false) { - if (isset($a1[$k])) unset($a1[$k]); - continue; - } - $a1[$k] = $v; - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Encoder.php b/oc-includes/htmlpurifier/HTMLPurifier/Encoder.php deleted file mode 100755 index 77988a1925..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Encoder.php +++ /dev/null @@ -1,545 +0,0 @@ -= $c) { - $r .= self::unsafeIconv($in, $out, substr($text, $i)); - break; - } - // wibble the boundary - if (0x80 != (0xC0 & ord($text[$i + $max_chunk_size]))) { - $chunk_size = $max_chunk_size; - } elseif (0x80 != (0xC0 & ord($text[$i + $max_chunk_size - 1]))) { - $chunk_size = $max_chunk_size - 1; - } elseif (0x80 != (0xC0 & ord($text[$i + $max_chunk_size - 2]))) { - $chunk_size = $max_chunk_size - 2; - } elseif (0x80 != (0xC0 & ord($text[$i + $max_chunk_size - 3]))) { - $chunk_size = $max_chunk_size - 3; - } else { - return false; // rather confusing UTF-8... - } - $chunk = substr($text, $i, $chunk_size); // substr doesn't mind overlong lengths - $r .= self::unsafeIconv($in, $out, $chunk); - $i += $chunk_size; - } - return $r; - } else { - return false; - } - } else { - return false; - } - } - - /** - * Cleans a UTF-8 string for well-formedness and SGML validity - * - * It will parse according to UTF-8 and return a valid UTF8 string, with - * non-SGML codepoints excluded. - * - * @note Just for reference, the non-SGML code points are 0 to 31 and - * 127 to 159, inclusive. However, we allow code points 9, 10 - * and 13, which are the tab, line feed and carriage return - * respectively. 128 and above the code points map to multibyte - * UTF-8 representations. - * - * @note Fallback code adapted from utf8ToUnicode by Henri Sivonen and - * hsivonen@iki.fi at under the - * LGPL license. Notes on what changed are inside, but in general, - * the original code transformed UTF-8 text into an array of integer - * Unicode codepoints. Understandably, transforming that back to - * a string would be somewhat expensive, so the function was modded to - * directly operate on the string. However, this discourages code - * reuse, and the logic enumerated here would be useful for any - * function that needs to be able to understand UTF-8 characters. - * As of right now, only smart lossless character encoding converters - * would need that, and I'm probably not going to implement them. - * Once again, PHP 6 should solve all our problems. - */ - public static function cleanUTF8($str, $force_php = false) { - - // UTF-8 validity is checked since PHP 4.3.5 - // This is an optimization: if the string is already valid UTF-8, no - // need to do PHP stuff. 99% of the time, this will be the case. - // The regexp matches the XML char production, as well as well as excluding - // non-SGML codepoints U+007F to U+009F - if (preg_match('/^[\x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]*$/Du', $str)) { - return $str; - } - - $mState = 0; // cached expected number of octets after the current octet - // until the beginning of the next UTF8 character sequence - $mUcs4 = 0; // cached Unicode character - $mBytes = 1; // cached expected number of octets in the current sequence - - // original code involved an $out that was an array of Unicode - // codepoints. Instead of having to convert back into UTF-8, we've - // decided to directly append valid UTF-8 characters onto a string - // $out once they're done. $char accumulates raw bytes, while $mUcs4 - // turns into the Unicode code point, so there's some redundancy. - - $out = ''; - $char = ''; - - $len = strlen($str); - for($i = 0; $i < $len; $i++) { - $in = ord($str{$i}); - $char .= $str[$i]; // append byte to char - if (0 == $mState) { - // When mState is zero we expect either a US-ASCII character - // or a multi-octet sequence. - if (0 == (0x80 & ($in))) { - // US-ASCII, pass straight through. - if (($in <= 31 || $in == 127) && - !($in == 9 || $in == 13 || $in == 10) // save \r\t\n - ) { - // control characters, remove - } else { - $out .= $char; - } - // reset - $char = ''; - $mBytes = 1; - } elseif (0xC0 == (0xE0 & ($in))) { - // First octet of 2 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x1F) << 6; - $mState = 1; - $mBytes = 2; - } elseif (0xE0 == (0xF0 & ($in))) { - // First octet of 3 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x0F) << 12; - $mState = 2; - $mBytes = 3; - } elseif (0xF0 == (0xF8 & ($in))) { - // First octet of 4 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x07) << 18; - $mState = 3; - $mBytes = 4; - } elseif (0xF8 == (0xFC & ($in))) { - // First octet of 5 octet sequence. - // - // This is illegal because the encoded codepoint must be - // either: - // (a) not the shortest form or - // (b) outside the Unicode range of 0-0x10FFFF. - // Rather than trying to resynchronize, we will carry on - // until the end of the sequence and let the later error - // handling code catch it. - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x03) << 24; - $mState = 4; - $mBytes = 5; - } elseif (0xFC == (0xFE & ($in))) { - // First octet of 6 octet sequence, see comments for 5 - // octet sequence. - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 1) << 30; - $mState = 5; - $mBytes = 6; - } else { - // Current octet is neither in the US-ASCII range nor a - // legal first octet of a multi-octet sequence. - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - $char = ''; - } - } else { - // When mState is non-zero, we expect a continuation of the - // multi-octet sequence - if (0x80 == (0xC0 & ($in))) { - // Legal continuation. - $shift = ($mState - 1) * 6; - $tmp = $in; - $tmp = ($tmp & 0x0000003F) << $shift; - $mUcs4 |= $tmp; - - if (0 == --$mState) { - // End of the multi-octet sequence. mUcs4 now contains - // the final Unicode codepoint to be output - - // Check for illegal sequences and codepoints. - - // From Unicode 3.1, non-shortest form is illegal - if (((2 == $mBytes) && ($mUcs4 < 0x0080)) || - ((3 == $mBytes) && ($mUcs4 < 0x0800)) || - ((4 == $mBytes) && ($mUcs4 < 0x10000)) || - (4 < $mBytes) || - // From Unicode 3.2, surrogate characters = illegal - (($mUcs4 & 0xFFFFF800) == 0xD800) || - // Codepoints outside the Unicode range are illegal - ($mUcs4 > 0x10FFFF) - ) { - - } elseif (0xFEFF != $mUcs4 && // omit BOM - // check for valid Char unicode codepoints - ( - 0x9 == $mUcs4 || - 0xA == $mUcs4 || - 0xD == $mUcs4 || - (0x20 <= $mUcs4 && 0x7E >= $mUcs4) || - // 7F-9F is not strictly prohibited by XML, - // but it is non-SGML, and thus we don't allow it - (0xA0 <= $mUcs4 && 0xD7FF >= $mUcs4) || - (0x10000 <= $mUcs4 && 0x10FFFF >= $mUcs4) - ) - ) { - $out .= $char; - } - // initialize UTF8 cache (reset) - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - $char = ''; - } - } else { - // ((0xC0 & (*in) != 0x80) && (mState != 0)) - // Incomplete multi-octet sequence. - // used to result in complete fail, but we'll reset - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - $char =''; - } - } - } - return $out; - } - - /** - * Translates a Unicode codepoint into its corresponding UTF-8 character. - * @note Based on Feyd's function at - * , - * which is in public domain. - * @note While we're going to do code point parsing anyway, a good - * optimization would be to refuse to translate code points that - * are non-SGML characters. However, this could lead to duplication. - * @note This is very similar to the unichr function in - * maintenance/generate-entity-file.php (although this is superior, - * due to its sanity checks). - */ - - // +----------+----------+----------+----------+ - // | 33222222 | 22221111 | 111111 | | - // | 10987654 | 32109876 | 54321098 | 76543210 | bit - // +----------+----------+----------+----------+ - // | | | | 0xxxxxxx | 1 byte 0x00000000..0x0000007F - // | | | 110yyyyy | 10xxxxxx | 2 byte 0x00000080..0x000007FF - // | | 1110zzzz | 10yyyyyy | 10xxxxxx | 3 byte 0x00000800..0x0000FFFF - // | 11110www | 10wwzzzz | 10yyyyyy | 10xxxxxx | 4 byte 0x00010000..0x0010FFFF - // +----------+----------+----------+----------+ - // | 00000000 | 00011111 | 11111111 | 11111111 | Theoretical upper limit of legal scalars: 2097151 (0x001FFFFF) - // | 00000000 | 00010000 | 11111111 | 11111111 | Defined upper limit of legal scalar codes - // +----------+----------+----------+----------+ - - public static function unichr($code) { - if($code > 1114111 or $code < 0 or - ($code >= 55296 and $code <= 57343) ) { - // bits are set outside the "valid" range as defined - // by UNICODE 4.1.0 - return ''; - } - - $x = $y = $z = $w = 0; - if ($code < 128) { - // regular ASCII character - $x = $code; - } else { - // set up bits for UTF-8 - $x = ($code & 63) | 128; - if ($code < 2048) { - $y = (($code & 2047) >> 6) | 192; - } else { - $y = (($code & 4032) >> 6) | 128; - if($code < 65536) { - $z = (($code >> 12) & 15) | 224; - } else { - $z = (($code >> 12) & 63) | 128; - $w = (($code >> 18) & 7) | 240; - } - } - } - // set up the actual character - $ret = ''; - if($w) $ret .= chr($w); - if($z) $ret .= chr($z); - if($y) $ret .= chr($y); - $ret .= chr($x); - - return $ret; - } - - public static function iconvAvailable() { - static $iconv = null; - if ($iconv === null) { - $iconv = function_exists('iconv') && self::testIconvTruncateBug() != self::ICONV_UNUSABLE; - } - return $iconv; - } - - /** - * Converts a string to UTF-8 based on configuration. - */ - public static function convertToUTF8($str, $config, $context) { - $encoding = $config->get('Core.Encoding'); - if ($encoding === 'utf-8') return $str; - static $iconv = null; - if ($iconv === null) $iconv = self::iconvAvailable(); - if ($iconv && !$config->get('Test.ForceNoIconv')) { - // unaffected by bugs, since UTF-8 support all characters - $str = self::unsafeIconv($encoding, 'utf-8//IGNORE', $str); - if ($str === false) { - // $encoding is not a valid encoding - trigger_error('Invalid encoding ' . $encoding, E_USER_ERROR); - return ''; - } - // If the string is bjorked by Shift_JIS or a similar encoding - // that doesn't support all of ASCII, convert the naughty - // characters to their true byte-wise ASCII/UTF-8 equivalents. - $str = strtr($str, self::testEncodingSupportsASCII($encoding)); - return $str; - } elseif ($encoding === 'iso-8859-1') { - $str = utf8_encode($str); - return $str; - } - $bug = HTMLPurifier_Encoder::testIconvTruncateBug(); - if ($bug == self::ICONV_OK) { - trigger_error('Encoding not supported, please install iconv', E_USER_ERROR); - } else { - trigger_error('You have a buggy version of iconv, see https://bugs.php.net/bug.php?id=48147 and http://sourceware.org/bugzilla/show_bug.cgi?id=13541', E_USER_ERROR); - } - } - - /** - * Converts a string from UTF-8 based on configuration. - * @note Currently, this is a lossy conversion, with unexpressable - * characters being omitted. - */ - public static function convertFromUTF8($str, $config, $context) { - $encoding = $config->get('Core.Encoding'); - if ($escape = $config->get('Core.EscapeNonASCIICharacters')) { - $str = self::convertToASCIIDumbLossless($str); - } - if ($encoding === 'utf-8') return $str; - static $iconv = null; - if ($iconv === null) $iconv = self::iconvAvailable(); - if ($iconv && !$config->get('Test.ForceNoIconv')) { - // Undo our previous fix in convertToUTF8, otherwise iconv will barf - $ascii_fix = self::testEncodingSupportsASCII($encoding); - if (!$escape && !empty($ascii_fix)) { - $clear_fix = array(); - foreach ($ascii_fix as $utf8 => $native) $clear_fix[$utf8] = ''; - $str = strtr($str, $clear_fix); - } - $str = strtr($str, array_flip($ascii_fix)); - // Normal stuff - $str = self::iconv('utf-8', $encoding . '//IGNORE', $str); - return $str; - } elseif ($encoding === 'iso-8859-1') { - $str = utf8_decode($str); - return $str; - } - trigger_error('Encoding not supported', E_USER_ERROR); - // You might be tempted to assume that the ASCII representation - // might be OK, however, this is *not* universally true over all - // encodings. So we take the conservative route here, rather - // than forcibly turn on %Core.EscapeNonASCIICharacters - } - - /** - * Lossless (character-wise) conversion of HTML to ASCII - * @param $str UTF-8 string to be converted to ASCII - * @returns ASCII encoded string with non-ASCII character entity-ized - * @warning Adapted from MediaWiki, claiming fair use: this is a common - * algorithm. If you disagree with this license fudgery, - * implement it yourself. - * @note Uses decimal numeric entities since they are best supported. - * @note This is a DUMB function: it has no concept of keeping - * character entities that the projected character encoding - * can allow. We could possibly implement a smart version - * but that would require it to also know which Unicode - * codepoints the charset supported (not an easy task). - * @note Sort of with cleanUTF8() but it assumes that $str is - * well-formed UTF-8 - */ - public static function convertToASCIIDumbLossless($str) { - $bytesleft = 0; - $result = ''; - $working = 0; - $len = strlen($str); - for( $i = 0; $i < $len; $i++ ) { - $bytevalue = ord( $str[$i] ); - if( $bytevalue <= 0x7F ) { //0xxx xxxx - $result .= chr( $bytevalue ); - $bytesleft = 0; - } elseif( $bytevalue <= 0xBF ) { //10xx xxxx - $working = $working << 6; - $working += ($bytevalue & 0x3F); - $bytesleft--; - if( $bytesleft <= 0 ) { - $result .= "&#" . $working . ";"; - } - } elseif( $bytevalue <= 0xDF ) { //110x xxxx - $working = $bytevalue & 0x1F; - $bytesleft = 1; - } elseif( $bytevalue <= 0xEF ) { //1110 xxxx - $working = $bytevalue & 0x0F; - $bytesleft = 2; - } else { //1111 0xxx - $working = $bytevalue & 0x07; - $bytesleft = 3; - } - } - return $result; - } - - /** No bugs detected in iconv. */ - const ICONV_OK = 0; - - /** Iconv truncates output if converting from UTF-8 to another - * character set with //IGNORE, and a non-encodable character is found */ - const ICONV_TRUNCATES = 1; - - /** Iconv does not support //IGNORE, making it unusable for - * transcoding purposes */ - const ICONV_UNUSABLE = 2; - - /** - * glibc iconv has a known bug where it doesn't handle the magic - * //IGNORE stanza correctly. In particular, rather than ignore - * characters, it will return an EILSEQ after consuming some number - * of characters, and expect you to restart iconv as if it were - * an E2BIG. Old versions of PHP did not respect the errno, and - * returned the fragment, so as a result you would see iconv - * mysteriously truncating output. We can work around this by - * manually chopping our input into segments of about 8000 - * characters, as long as PHP ignores the error code. If PHP starts - * paying attention to the error code, iconv becomes unusable. - * - * @returns Error code indicating severity of bug. - */ - public static function testIconvTruncateBug() { - static $code = null; - if ($code === null) { - // better not use iconv, otherwise infinite loop! - $r = self::unsafeIconv('utf-8', 'ascii//IGNORE', "\xCE\xB1" . str_repeat('a', 9000)); - if ($r === false) { - $code = self::ICONV_UNUSABLE; - } elseif (($c = strlen($r)) < 9000) { - $code = self::ICONV_TRUNCATES; - } elseif ($c > 9000) { - trigger_error('Your copy of iconv is extremely buggy. Please notify HTML Purifier maintainers: include your iconv version as per phpversion()', E_USER_ERROR); - } else { - $code = self::ICONV_OK; - } - } - return $code; - } - - /** - * This expensive function tests whether or not a given character - * encoding supports ASCII. 7/8-bit encodings like Shift_JIS will - * fail this test, and require special processing. Variable width - * encodings shouldn't ever fail. - * - * @param string $encoding Encoding name to test, as per iconv format - * @param bool $bypass Whether or not to bypass the precompiled arrays. - * @return Array of UTF-8 characters to their corresponding ASCII, - * which can be used to "undo" any overzealous iconv action. - */ - public static function testEncodingSupportsASCII($encoding, $bypass = false) { - // All calls to iconv here are unsafe, proof by case analysis: - // If ICONV_OK, no difference. - // If ICONV_TRUNCATE, all calls involve one character inputs, - // so bug is not triggered. - // If ICONV_UNUSABLE, this call is irrelevant - static $encodings = array(); - if (!$bypass) { - if (isset($encodings[$encoding])) return $encodings[$encoding]; - $lenc = strtolower($encoding); - switch ($lenc) { - case 'shift_jis': - return array("\xC2\xA5" => '\\', "\xE2\x80\xBE" => '~'); - case 'johab': - return array("\xE2\x82\xA9" => '\\'); - } - if (strpos($lenc, 'iso-8859-') === 0) return array(); - } - $ret = array(); - if (self::unsafeIconv('UTF-8', $encoding, 'a') === false) return false; - for ($i = 0x20; $i <= 0x7E; $i++) { // all printable ASCII chars - $c = chr($i); // UTF-8 char - $r = self::unsafeIconv('UTF-8', "$encoding//IGNORE", $c); // initial conversion - if ( - $r === '' || - // This line is needed for iconv implementations that do not - // omit characters that do not exist in the target character set - ($r === $c && self::unsafeIconv($encoding, 'UTF-8//IGNORE', $r) !== $c) - ) { - // Reverse engineer: what's the UTF-8 equiv of this byte - // sequence? This assumes that there's no variable width - // encoding that doesn't support ASCII. - $ret[self::unsafeIconv($encoding, 'UTF-8//IGNORE', $c)] = $c; - } - } - $encodings[$encoding] = $ret; - return $ret; - } - - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/EntityLookup.php b/oc-includes/htmlpurifier/HTMLPurifier/EntityLookup.php deleted file mode 100755 index b4dfce94c3..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/EntityLookup.php +++ /dev/null @@ -1,44 +0,0 @@ -table = unserialize(file_get_contents($file)); - } - - /** - * Retrieves sole instance of the object. - * @param Optional prototype of custom lookup table to overload with. - */ - public static function instance($prototype = false) { - // no references, since PHP doesn't copy unless modified - static $instance = null; - if ($prototype) { - $instance = $prototype; - } elseif (!$instance) { - $instance = new HTMLPurifier_EntityLookup(); - $instance->setup(); - } - return $instance; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/EntityLookup/entities.ser b/oc-includes/htmlpurifier/HTMLPurifier/EntityLookup/entities.ser deleted file mode 100755 index e8b08128be..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/EntityLookup/entities.ser +++ /dev/null @@ -1 +0,0 @@ -a:253:{s:4:"fnof";s:2:"ƒ";s:5:"Alpha";s:2:"Α";s:4:"Beta";s:2:"Β";s:5:"Gamma";s:2:"Γ";s:5:"Delta";s:2:"Δ";s:7:"Epsilon";s:2:"Ε";s:4:"Zeta";s:2:"Ζ";s:3:"Eta";s:2:"Η";s:5:"Theta";s:2:"Θ";s:4:"Iota";s:2:"Ι";s:5:"Kappa";s:2:"Κ";s:6:"Lambda";s:2:"Λ";s:2:"Mu";s:2:"Μ";s:2:"Nu";s:2:"Ν";s:2:"Xi";s:2:"Ξ";s:7:"Omicron";s:2:"Ο";s:2:"Pi";s:2:"Π";s:3:"Rho";s:2:"Ρ";s:5:"Sigma";s:2:"Σ";s:3:"Tau";s:2:"Τ";s:7:"Upsilon";s:2:"Υ";s:3:"Phi";s:2:"Φ";s:3:"Chi";s:2:"Χ";s:3:"Psi";s:2:"Ψ";s:5:"Omega";s:2:"Ω";s:5:"alpha";s:2:"α";s:4:"beta";s:2:"β";s:5:"gamma";s:2:"γ";s:5:"delta";s:2:"δ";s:7:"epsilon";s:2:"ε";s:4:"zeta";s:2:"ζ";s:3:"eta";s:2:"η";s:5:"theta";s:2:"θ";s:4:"iota";s:2:"ι";s:5:"kappa";s:2:"κ";s:6:"lambda";s:2:"λ";s:2:"mu";s:2:"μ";s:2:"nu";s:2:"ν";s:2:"xi";s:2:"ξ";s:7:"omicron";s:2:"ο";s:2:"pi";s:2:"π";s:3:"rho";s:2:"ρ";s:6:"sigmaf";s:2:"ς";s:5:"sigma";s:2:"σ";s:3:"tau";s:2:"τ";s:7:"upsilon";s:2:"υ";s:3:"phi";s:2:"φ";s:3:"chi";s:2:"χ";s:3:"psi";s:2:"ψ";s:5:"omega";s:2:"ω";s:8:"thetasym";s:2:"ϑ";s:5:"upsih";s:2:"ϒ";s:3:"piv";s:2:"ϖ";s:4:"bull";s:3:"•";s:6:"hellip";s:3:"…";s:5:"prime";s:3:"′";s:5:"Prime";s:3:"″";s:5:"oline";s:3:"‾";s:5:"frasl";s:3:"⁄";s:6:"weierp";s:3:"℘";s:5:"image";s:3:"ℑ";s:4:"real";s:3:"ℜ";s:5:"trade";s:3:"™";s:7:"alefsym";s:3:"ℵ";s:4:"larr";s:3:"←";s:4:"uarr";s:3:"↑";s:4:"rarr";s:3:"→";s:4:"darr";s:3:"↓";s:4:"harr";s:3:"↔";s:5:"crarr";s:3:"↵";s:4:"lArr";s:3:"⇐";s:4:"uArr";s:3:"⇑";s:4:"rArr";s:3:"⇒";s:4:"dArr";s:3:"⇓";s:4:"hArr";s:3:"⇔";s:6:"forall";s:3:"∀";s:4:"part";s:3:"∂";s:5:"exist";s:3:"∃";s:5:"empty";s:3:"∅";s:5:"nabla";s:3:"∇";s:4:"isin";s:3:"∈";s:5:"notin";s:3:"∉";s:2:"ni";s:3:"∋";s:4:"prod";s:3:"∏";s:3:"sum";s:3:"∑";s:5:"minus";s:3:"−";s:6:"lowast";s:3:"∗";s:5:"radic";s:3:"√";s:4:"prop";s:3:"∝";s:5:"infin";s:3:"∞";s:3:"ang";s:3:"∠";s:3:"and";s:3:"∧";s:2:"or";s:3:"∨";s:3:"cap";s:3:"∩";s:3:"cup";s:3:"∪";s:3:"int";s:3:"∫";s:6:"there4";s:3:"∴";s:3:"sim";s:3:"∼";s:4:"cong";s:3:"≅";s:5:"asymp";s:3:"≈";s:2:"ne";s:3:"≠";s:5:"equiv";s:3:"≡";s:2:"le";s:3:"≤";s:2:"ge";s:3:"≥";s:3:"sub";s:3:"⊂";s:3:"sup";s:3:"⊃";s:4:"nsub";s:3:"⊄";s:4:"sube";s:3:"⊆";s:4:"supe";s:3:"⊇";s:5:"oplus";s:3:"⊕";s:6:"otimes";s:3:"⊗";s:4:"perp";s:3:"⊥";s:4:"sdot";s:3:"⋅";s:5:"lceil";s:3:"⌈";s:5:"rceil";s:3:"⌉";s:6:"lfloor";s:3:"⌊";s:6:"rfloor";s:3:"⌋";s:4:"lang";s:3:"〈";s:4:"rang";s:3:"〉";s:3:"loz";s:3:"◊";s:6:"spades";s:3:"♠";s:5:"clubs";s:3:"♣";s:6:"hearts";s:3:"♥";s:5:"diams";s:3:"♦";s:4:"quot";s:1:""";s:3:"amp";s:1:"&";s:2:"lt";s:1:"<";s:2:"gt";s:1:">";s:4:"apos";s:1:"'";s:5:"OElig";s:2:"Œ";s:5:"oelig";s:2:"œ";s:6:"Scaron";s:2:"Š";s:6:"scaron";s:2:"š";s:4:"Yuml";s:2:"Ÿ";s:4:"circ";s:2:"ˆ";s:5:"tilde";s:2:"˜";s:4:"ensp";s:3:" ";s:4:"emsp";s:3:" ";s:6:"thinsp";s:3:" ";s:4:"zwnj";s:3:"‌";s:3:"zwj";s:3:"‍";s:3:"lrm";s:3:"‎";s:3:"rlm";s:3:"‏";s:5:"ndash";s:3:"–";s:5:"mdash";s:3:"—";s:5:"lsquo";s:3:"‘";s:5:"rsquo";s:3:"’";s:5:"sbquo";s:3:"‚";s:5:"ldquo";s:3:"“";s:5:"rdquo";s:3:"”";s:5:"bdquo";s:3:"„";s:6:"dagger";s:3:"†";s:6:"Dagger";s:3:"‡";s:6:"permil";s:3:"‰";s:6:"lsaquo";s:3:"‹";s:6:"rsaquo";s:3:"›";s:4:"euro";s:3:"€";s:4:"nbsp";s:2:" ";s:5:"iexcl";s:2:"¡";s:4:"cent";s:2:"¢";s:5:"pound";s:2:"£";s:6:"curren";s:2:"¤";s:3:"yen";s:2:"¥";s:6:"brvbar";s:2:"¦";s:4:"sect";s:2:"§";s:3:"uml";s:2:"¨";s:4:"copy";s:2:"©";s:4:"ordf";s:2:"ª";s:5:"laquo";s:2:"«";s:3:"not";s:2:"¬";s:3:"shy";s:2:"­";s:3:"reg";s:2:"®";s:4:"macr";s:2:"¯";s:3:"deg";s:2:"°";s:6:"plusmn";s:2:"±";s:4:"sup2";s:2:"²";s:4:"sup3";s:2:"³";s:5:"acute";s:2:"´";s:5:"micro";s:2:"µ";s:4:"para";s:2:"¶";s:6:"middot";s:2:"·";s:5:"cedil";s:2:"¸";s:4:"sup1";s:2:"¹";s:4:"ordm";s:2:"º";s:5:"raquo";s:2:"»";s:6:"frac14";s:2:"¼";s:6:"frac12";s:2:"½";s:6:"frac34";s:2:"¾";s:6:"iquest";s:2:"¿";s:6:"Agrave";s:2:"À";s:6:"Aacute";s:2:"Á";s:5:"Acirc";s:2:"Â";s:6:"Atilde";s:2:"Ã";s:4:"Auml";s:2:"Ä";s:5:"Aring";s:2:"Å";s:5:"AElig";s:2:"Æ";s:6:"Ccedil";s:2:"Ç";s:6:"Egrave";s:2:"È";s:6:"Eacute";s:2:"É";s:5:"Ecirc";s:2:"Ê";s:4:"Euml";s:2:"Ë";s:6:"Igrave";s:2:"Ì";s:6:"Iacute";s:2:"Í";s:5:"Icirc";s:2:"Î";s:4:"Iuml";s:2:"Ï";s:3:"ETH";s:2:"Ð";s:6:"Ntilde";s:2:"Ñ";s:6:"Ograve";s:2:"Ò";s:6:"Oacute";s:2:"Ó";s:5:"Ocirc";s:2:"Ô";s:6:"Otilde";s:2:"Õ";s:4:"Ouml";s:2:"Ö";s:5:"times";s:2:"×";s:6:"Oslash";s:2:"Ø";s:6:"Ugrave";s:2:"Ù";s:6:"Uacute";s:2:"Ú";s:5:"Ucirc";s:2:"Û";s:4:"Uuml";s:2:"Ü";s:6:"Yacute";s:2:"Ý";s:5:"THORN";s:2:"Þ";s:5:"szlig";s:2:"ß";s:6:"agrave";s:2:"à";s:6:"aacute";s:2:"á";s:5:"acirc";s:2:"â";s:6:"atilde";s:2:"ã";s:4:"auml";s:2:"ä";s:5:"aring";s:2:"å";s:5:"aelig";s:2:"æ";s:6:"ccedil";s:2:"ç";s:6:"egrave";s:2:"è";s:6:"eacute";s:2:"é";s:5:"ecirc";s:2:"ê";s:4:"euml";s:2:"ë";s:6:"igrave";s:2:"ì";s:6:"iacute";s:2:"í";s:5:"icirc";s:2:"î";s:4:"iuml";s:2:"ï";s:3:"eth";s:2:"ð";s:6:"ntilde";s:2:"ñ";s:6:"ograve";s:2:"ò";s:6:"oacute";s:2:"ó";s:5:"ocirc";s:2:"ô";s:6:"otilde";s:2:"õ";s:4:"ouml";s:2:"ö";s:6:"divide";s:2:"÷";s:6:"oslash";s:2:"ø";s:6:"ugrave";s:2:"ù";s:6:"uacute";s:2:"ú";s:5:"ucirc";s:2:"û";s:4:"uuml";s:2:"ü";s:6:"yacute";s:2:"ý";s:5:"thorn";s:2:"þ";s:4:"yuml";s:2:"ÿ";} \ No newline at end of file diff --git a/oc-includes/htmlpurifier/HTMLPurifier/EntityParser.php b/oc-includes/htmlpurifier/HTMLPurifier/EntityParser.php deleted file mode 100755 index 8c384472dc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/EntityParser.php +++ /dev/null @@ -1,144 +0,0 @@ - '"', - 38 => '&', - 39 => "'", - 60 => '<', - 62 => '>' - ); - - /** - * Stripped entity names to decimal conversion table for special entities. - */ - protected $_special_ent2dec = - array( - 'quot' => 34, - 'amp' => 38, - 'lt' => 60, - 'gt' => 62 - ); - - /** - * Substitutes non-special entities with their parsed equivalents. Since - * running this whenever you have parsed character is t3h 5uck, we run - * it before everything else. - * - * @param $string String to have non-special entities parsed. - * @returns Parsed string. - */ - public function substituteNonSpecialEntities($string) { - // it will try to detect missing semicolons, but don't rely on it - return preg_replace_callback( - $this->_substituteEntitiesRegex, - array($this, 'nonSpecialEntityCallback'), - $string - ); - } - - /** - * Callback function for substituteNonSpecialEntities() that does the work. - * - * @param $matches PCRE matches array, with 0 the entire match, and - * either index 1, 2 or 3 set with a hex value, dec value, - * or string (respectively). - * @returns Replacement string. - */ - - protected function nonSpecialEntityCallback($matches) { - // replaces all but big five - $entity = $matches[0]; - $is_num = (@$matches[0][1] === '#'); - if ($is_num) { - $is_hex = (@$entity[2] === 'x'); - $code = $is_hex ? hexdec($matches[1]) : (int) $matches[2]; - - // abort for special characters - if (isset($this->_special_dec2str[$code])) return $entity; - - return HTMLPurifier_Encoder::unichr($code); - } else { - if (isset($this->_special_ent2dec[$matches[3]])) return $entity; - if (!$this->_entity_lookup) { - $this->_entity_lookup = HTMLPurifier_EntityLookup::instance(); - } - if (isset($this->_entity_lookup->table[$matches[3]])) { - return $this->_entity_lookup->table[$matches[3]]; - } else { - return $entity; - } - } - } - - /** - * Substitutes only special entities with their parsed equivalents. - * - * @notice We try to avoid calling this function because otherwise, it - * would have to be called a lot (for every parsed section). - * - * @param $string String to have non-special entities parsed. - * @returns Parsed string. - */ - public function substituteSpecialEntities($string) { - return preg_replace_callback( - $this->_substituteEntitiesRegex, - array($this, 'specialEntityCallback'), - $string); - } - - /** - * Callback function for substituteSpecialEntities() that does the work. - * - * This callback has same syntax as nonSpecialEntityCallback(). - * - * @param $matches PCRE-style matches array, with 0 the entire match, and - * either index 1, 2 or 3 set with a hex value, dec value, - * or string (respectively). - * @returns Replacement string. - */ - protected function specialEntityCallback($matches) { - $entity = $matches[0]; - $is_num = (@$matches[0][1] === '#'); - if ($is_num) { - $is_hex = (@$entity[2] === 'x'); - $int = $is_hex ? hexdec($matches[1]) : (int) $matches[2]; - return isset($this->_special_dec2str[$int]) ? - $this->_special_dec2str[$int] : - $entity; - } else { - return isset($this->_special_ent2dec[$matches[3]]) ? - $this->_special_ent2dec[$matches[3]] : - $entity; - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ErrorCollector.php b/oc-includes/htmlpurifier/HTMLPurifier/ErrorCollector.php deleted file mode 100755 index 6713eaf773..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ErrorCollector.php +++ /dev/null @@ -1,209 +0,0 @@ -locale =& $context->get('Locale'); - $this->context = $context; - $this->_current =& $this->_stacks[0]; - $this->errors =& $this->_stacks[0]; - } - - /** - * Sends an error message to the collector for later use - * @param $severity int Error severity, PHP error style (don't use E_USER_) - * @param $msg string Error message text - * @param $subst1 string First substitution for $msg - * @param $subst2 string ... - */ - public function send($severity, $msg) { - - $args = array(); - if (func_num_args() > 2) { - $args = func_get_args(); - array_shift($args); - unset($args[0]); - } - - $token = $this->context->get('CurrentToken', true); - $line = $token ? $token->line : $this->context->get('CurrentLine', true); - $col = $token ? $token->col : $this->context->get('CurrentCol', true); - $attr = $this->context->get('CurrentAttr', true); - - // perform special substitutions, also add custom parameters - $subst = array(); - if (!is_null($token)) { - $args['CurrentToken'] = $token; - } - if (!is_null($attr)) { - $subst['$CurrentAttr.Name'] = $attr; - if (isset($token->attr[$attr])) $subst['$CurrentAttr.Value'] = $token->attr[$attr]; - } - - if (empty($args)) { - $msg = $this->locale->getMessage($msg); - } else { - $msg = $this->locale->formatMessage($msg, $args); - } - - if (!empty($subst)) $msg = strtr($msg, $subst); - - // (numerically indexed) - $error = array( - self::LINENO => $line, - self::SEVERITY => $severity, - self::MESSAGE => $msg, - self::CHILDREN => array() - ); - $this->_current[] = $error; - - - // NEW CODE BELOW ... - - $struct = null; - // Top-level errors are either: - // TOKEN type, if $value is set appropriately, or - // "syntax" type, if $value is null - $new_struct = new HTMLPurifier_ErrorStruct(); - $new_struct->type = HTMLPurifier_ErrorStruct::TOKEN; - if ($token) $new_struct->value = clone $token; - if (is_int($line) && is_int($col)) { - if (isset($this->lines[$line][$col])) { - $struct = $this->lines[$line][$col]; - } else { - $struct = $this->lines[$line][$col] = $new_struct; - } - // These ksorts may present a performance problem - ksort($this->lines[$line], SORT_NUMERIC); - } else { - if (isset($this->lines[-1])) { - $struct = $this->lines[-1]; - } else { - $struct = $this->lines[-1] = $new_struct; - } - } - ksort($this->lines, SORT_NUMERIC); - - // Now, check if we need to operate on a lower structure - if (!empty($attr)) { - $struct = $struct->getChild(HTMLPurifier_ErrorStruct::ATTR, $attr); - if (!$struct->value) { - $struct->value = array($attr, 'PUT VALUE HERE'); - } - } - if (!empty($cssprop)) { - $struct = $struct->getChild(HTMLPurifier_ErrorStruct::CSSPROP, $cssprop); - if (!$struct->value) { - // if we tokenize CSS this might be a little more difficult to do - $struct->value = array($cssprop, 'PUT VALUE HERE'); - } - } - - // Ok, structs are all setup, now time to register the error - $struct->addError($severity, $msg); - } - - /** - * Retrieves raw error data for custom formatter to use - * @param List of arrays in format of array(line of error, - * error severity, error message, - * recursive sub-errors array) - */ - public function getRaw() { - return $this->errors; - } - - /** - * Default HTML formatting implementation for error messages - * @param $config Configuration array, vital for HTML output nature - * @param $errors Errors array to display; used for recursion. - */ - public function getHTMLFormatted($config, $errors = null) { - $ret = array(); - - $this->generator = new HTMLPurifier_Generator($config, $this->context); - if ($errors === null) $errors = $this->errors; - - // 'At line' message needs to be removed - - // generation code for new structure goes here. It needs to be recursive. - foreach ($this->lines as $line => $col_array) { - if ($line == -1) continue; - foreach ($col_array as $col => $struct) { - $this->_renderStruct($ret, $struct, $line, $col); - } - } - if (isset($this->lines[-1])) { - $this->_renderStruct($ret, $this->lines[-1]); - } - - if (empty($errors)) { - return '

' . $this->locale->getMessage('ErrorCollector: No errors') . '

'; - } else { - return '
  • ' . implode('
  • ', $ret) . '
'; - } - - } - - private function _renderStruct(&$ret, $struct, $line = null, $col = null) { - $stack = array($struct); - $context_stack = array(array()); - while ($current = array_pop($stack)) { - $context = array_pop($context_stack); - foreach ($current->errors as $error) { - list($severity, $msg) = $error; - $string = ''; - $string .= '
'; - // W3C uses an icon to indicate the severity of the error. - $error = $this->locale->getErrorName($severity); - $string .= "$error "; - if (!is_null($line) && !is_null($col)) { - $string .= "Line $line, Column $col: "; - } else { - $string .= 'End of Document: '; - } - $string .= '' . $this->generator->escape($msg) . ' '; - $string .= '
'; - // Here, have a marker for the character on the column appropriate. - // Be sure to clip extremely long lines. - //$string .= '
';
-                //$string .= '';
-                //$string .= '
'; - $ret[] = $string; - } - foreach ($current->children as $type => $array) { - $context[] = $current; - $stack = array_merge($stack, array_reverse($array, true)); - for ($i = count($array); $i > 0; $i--) { - $context_stack[] = $context; - } - } - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/ErrorStruct.php b/oc-includes/htmlpurifier/HTMLPurifier/ErrorStruct.php deleted file mode 100755 index 9bc8996ec1..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/ErrorStruct.php +++ /dev/null @@ -1,60 +0,0 @@ -children[$type][$id])) { - $this->children[$type][$id] = new HTMLPurifier_ErrorStruct(); - $this->children[$type][$id]->type = $type; - } - return $this->children[$type][$id]; - } - - public function addError($severity, $message) { - $this->errors[] = array($severity, $message); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Exception.php b/oc-includes/htmlpurifier/HTMLPurifier/Exception.php deleted file mode 100755 index be85b4c560..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Exception.php +++ /dev/null @@ -1,12 +0,0 @@ -preFilter, - * 2->preFilter, 3->preFilter, purify, 3->postFilter, 2->postFilter, - * 1->postFilter. - * - * @note Methods are not declared abstract as it is perfectly legitimate - * for an implementation not to want anything to happen on a step - */ - -class HTMLPurifier_Filter -{ - - /** - * Name of the filter for identification purposes - */ - public $name; - - /** - * Pre-processor function, handles HTML before HTML Purifier - */ - public function preFilter($html, $config, $context) { - return $html; - } - - /** - * Post-processor function, handles HTML after HTML Purifier - */ - public function postFilter($html, $config, $context) { - return $html; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php b/oc-includes/htmlpurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php deleted file mode 100755 index df937ace73..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php +++ /dev/null @@ -1,289 +0,0 @@ - blocks from input HTML, cleans them up - * using CSSTidy, and then places them in $purifier->context->get('StyleBlocks') - * so they can be used elsewhere in the document. - * - * @note - * See tests/HTMLPurifier/Filter/ExtractStyleBlocksTest.php for - * sample usage. - * - * @note - * This filter can also be used on stylesheets not included in the - * document--something purists would probably prefer. Just directly - * call HTMLPurifier_Filter_ExtractStyleBlocks->cleanCSS() - */ -class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter -{ - - public $name = 'ExtractStyleBlocks'; - private $_styleMatches = array(); - private $_tidy; - - private $_id_attrdef; - private $_class_attrdef; - private $_enum_attrdef; - - public function __construct() { - $this->_tidy = new csstidy(); - $this->_tidy->set_cfg('lowercase_s', false); - $this->_id_attrdef = new HTMLPurifier_AttrDef_HTML_ID(true); - $this->_class_attrdef = new HTMLPurifier_AttrDef_CSS_Ident(); - $this->_enum_attrdef = new HTMLPurifier_AttrDef_Enum(array('first-child', 'link', 'visited', 'active', 'hover', 'focus')); - } - - /** - * Save the contents of CSS blocks to style matches - * @param $matches preg_replace style $matches array - */ - protected function styleCallback($matches) { - $this->_styleMatches[] = $matches[1]; - } - - /** - * Removes inline #isU', array($this, 'styleCallback'), $html); - $style_blocks = $this->_styleMatches; - $this->_styleMatches = array(); // reset - $context->register('StyleBlocks', $style_blocks); // $context must not be reused - if ($this->_tidy) { - foreach ($style_blocks as &$style) { - $style = $this->cleanCSS($style, $config, $context); - } - } - return $html; - } - - /** - * Takes CSS (the stuff found in in a font-family prop). - if ($config->get('Filter.ExtractStyleBlocks.Escaping')) { - $css = str_replace( - array('<', '>', '&'), - array('\3C ', '\3E ', '\26 '), - $css - ); - } - return $css; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Filter/YouTube.php b/oc-includes/htmlpurifier/HTMLPurifier/Filter/YouTube.php deleted file mode 100755 index 23df221eaa..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Filter/YouTube.php +++ /dev/null @@ -1,39 +0,0 @@ -]+>.+?'. - 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s'; - $pre_replace = '\1'; - return preg_replace($pre_regex, $pre_replace, $html); - } - - public function postFilter($html, $config, $context) { - $post_regex = '#((?:v|cp)/[A-Za-z0-9\-_=]+)#'; - return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html); - } - - protected function armorUrl($url) { - return str_replace('--', '--', $url); - } - - protected function postFilterCallback($matches) { - $url = $this->armorUrl($matches[1]); - return ''. - ''. - ''. - ''; - - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Generator.php b/oc-includes/htmlpurifier/HTMLPurifier/Generator.php deleted file mode 100755 index fee1a5f84e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Generator.php +++ /dev/null @@ -1,254 +0,0 @@ - tags - */ - private $_scriptFix = false; - - /** - * Cache of HTMLDefinition during HTML output to determine whether or - * not attributes should be minimized. - */ - private $_def; - - /** - * Cache of %Output.SortAttr - */ - private $_sortAttr; - - /** - * Cache of %Output.FlashCompat - */ - private $_flashCompat; - - /** - * Cache of %Output.FixInnerHTML - */ - private $_innerHTMLFix; - - /** - * Stack for keeping track of object information when outputting IE - * compatibility code. - */ - private $_flashStack = array(); - - /** - * Configuration for the generator - */ - protected $config; - - /** - * @param $config Instance of HTMLPurifier_Config - * @param $context Instance of HTMLPurifier_Context - */ - public function __construct($config, $context) { - $this->config = $config; - $this->_scriptFix = $config->get('Output.CommentScriptContents'); - $this->_innerHTMLFix = $config->get('Output.FixInnerHTML'); - $this->_sortAttr = $config->get('Output.SortAttr'); - $this->_flashCompat = $config->get('Output.FlashCompat'); - $this->_def = $config->getHTMLDefinition(); - $this->_xhtml = $this->_def->doctype->xml; - } - - /** - * Generates HTML from an array of tokens. - * @param $tokens Array of HTMLPurifier_Token - * @param $config HTMLPurifier_Config object - * @return Generated HTML - */ - public function generateFromTokens($tokens) { - if (!$tokens) return ''; - - // Basic algorithm - $html = ''; - for ($i = 0, $size = count($tokens); $i < $size; $i++) { - if ($this->_scriptFix && $tokens[$i]->name === 'script' - && $i + 2 < $size && $tokens[$i+2] instanceof HTMLPurifier_Token_End) { - // script special case - // the contents of the script block must be ONE token - // for this to work. - $html .= $this->generateFromToken($tokens[$i++]); - $html .= $this->generateScriptFromToken($tokens[$i++]); - } - $html .= $this->generateFromToken($tokens[$i]); - } - - // Tidy cleanup - if (extension_loaded('tidy') && $this->config->get('Output.TidyFormat')) { - $tidy = new Tidy; - $tidy->parseString($html, array( - 'indent'=> true, - 'output-xhtml' => $this->_xhtml, - 'show-body-only' => true, - 'indent-spaces' => 2, - 'wrap' => 68, - ), 'utf8'); - $tidy->cleanRepair(); - $html = (string) $tidy; // explicit cast necessary - } - - // Normalize newlines to system defined value - if ($this->config->get('Core.NormalizeNewlines')) { - $nl = $this->config->get('Output.Newline'); - if ($nl === null) $nl = PHP_EOL; - if ($nl !== "\n") $html = str_replace("\n", $nl, $html); - } - return $html; - } - - /** - * Generates HTML from a single token. - * @param $token HTMLPurifier_Token object. - * @return Generated HTML - */ - public function generateFromToken($token) { - if (!$token instanceof HTMLPurifier_Token) { - trigger_error('Cannot generate HTML from non-HTMLPurifier_Token object', E_USER_WARNING); - return ''; - - } elseif ($token instanceof HTMLPurifier_Token_Start) { - $attr = $this->generateAttributes($token->attr, $token->name); - if ($this->_flashCompat) { - if ($token->name == "object") { - $flash = new stdclass(); - $flash->attr = $token->attr; - $flash->param = array(); - $this->_flashStack[] = $flash; - } - } - return '<' . $token->name . ($attr ? ' ' : '') . $attr . '>'; - - } elseif ($token instanceof HTMLPurifier_Token_End) { - $_extra = ''; - if ($this->_flashCompat) { - if ($token->name == "object" && !empty($this->_flashStack)) { - // doesn't do anything for now - } - } - return $_extra . 'name . '>'; - - } elseif ($token instanceof HTMLPurifier_Token_Empty) { - if ($this->_flashCompat && $token->name == "param" && !empty($this->_flashStack)) { - $this->_flashStack[count($this->_flashStack)-1]->param[$token->attr['name']] = $token->attr['value']; - } - $attr = $this->generateAttributes($token->attr, $token->name); - return '<' . $token->name . ($attr ? ' ' : '') . $attr . - ( $this->_xhtml ? ' /': '' ) //
v.
- . '>'; - - } elseif ($token instanceof HTMLPurifier_Token_Text) { - return $this->escape($token->data, ENT_NOQUOTES); - - } elseif ($token instanceof HTMLPurifier_Token_Comment) { - return ''; - } else { - return ''; - - } - } - - /** - * Special case processor for the contents of script tags - * @warning This runs into problems if there's already a literal - * --> somewhere inside the script contents. - */ - public function generateScriptFromToken($token) { - if (!$token instanceof HTMLPurifier_Token_Text) return $this->generateFromToken($token); - // Thanks - $data = preg_replace('#//\s*$#', '', $token->data); - return ''; - } - - /** - * Generates attribute declarations from attribute array. - * @note This does not include the leading or trailing space. - * @param $assoc_array_of_attributes Attribute array - * @param $element Name of element attributes are for, used to check - * attribute minimization. - * @return Generate HTML fragment for insertion. - */ - public function generateAttributes($assoc_array_of_attributes, $element = false) { - $html = ''; - if ($this->_sortAttr) ksort($assoc_array_of_attributes); - foreach ($assoc_array_of_attributes as $key => $value) { - if (!$this->_xhtml) { - // Remove namespaced attributes - if (strpos($key, ':') !== false) continue; - // Check if we should minimize the attribute: val="val" -> val - if ($element && !empty($this->_def->info[$element]->attr[$key]->minimized)) { - $html .= $key . ' '; - continue; - } - } - // Workaround for Internet Explorer innerHTML bug. - // Essentially, Internet Explorer, when calculating - // innerHTML, omits quotes if there are no instances of - // angled brackets, quotes or spaces. However, when parsing - // HTML (for example, when you assign to innerHTML), it - // treats backticks as quotes. Thus, - // `` - // becomes - // `` - // becomes - // - // Fortunately, all we need to do is trigger an appropriate - // quoting style, which we do by adding an extra space. - // This also is consistent with the W3C spec, which states - // that user agents may ignore leading or trailing - // whitespace (in fact, most don't, at least for attributes - // like alt, but an extra space at the end is barely - // noticeable). Still, we have a configuration knob for - // this, since this transformation is not necesary if you - // don't process user input with innerHTML or you don't plan - // on supporting Internet Explorer. - if ($this->_innerHTMLFix) { - if (strpos($value, '`') !== false) { - // check if correct quoting style would not already be - // triggered - if (strcspn($value, '"\' <>') === strlen($value)) { - // protect! - $value .= ' '; - } - } - } - $html .= $key.'="'.$this->escape($value).'" '; - } - return rtrim($html); - } - - /** - * Escapes raw text data. - * @todo This really ought to be protected, but until we have a facility - * for properly generating HTML here w/o using tokens, it stays - * public. - * @param $string String data to escape for HTML. - * @param $quote Quoting style, like htmlspecialchars. ENT_NOQUOTES is - * permissible for non-attribute output. - * @return String escaped data. - */ - public function escape($string, $quote = null) { - // Workaround for APC bug on Mac Leopard reported by sidepodcast - // http://htmlpurifier.org/phorum/read.php?3,4823,4846 - if ($quote === null) $quote = ENT_COMPAT; - return htmlspecialchars($string, $quote, 'UTF-8'); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLDefinition.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLDefinition.php deleted file mode 100755 index b079d44c13..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLDefinition.php +++ /dev/null @@ -1,425 +0,0 @@ -getAnonymousModule(); - if (!isset($module->info[$element_name])) { - $element = $module->addBlankElement($element_name); - } else { - $element = $module->info[$element_name]; - } - $element->attr[$attr_name] = $def; - } - - /** - * Adds a custom element to your HTML definition - * @note See HTMLPurifier_HTMLModule::addElement for detailed - * parameter and return value descriptions. - */ - public function addElement($element_name, $type, $contents, $attr_collections, $attributes = array()) { - $module = $this->getAnonymousModule(); - // assume that if the user is calling this, the element - // is safe. This may not be a good idea - $element = $module->addElement($element_name, $type, $contents, $attr_collections, $attributes); - return $element; - } - - /** - * Adds a blank element to your HTML definition, for overriding - * existing behavior - * @note See HTMLPurifier_HTMLModule::addBlankElement for detailed - * parameter and return value descriptions. - */ - public function addBlankElement($element_name) { - $module = $this->getAnonymousModule(); - $element = $module->addBlankElement($element_name); - return $element; - } - - /** - * Retrieves a reference to the anonymous module, so you can - * bust out advanced features without having to make your own - * module. - */ - public function getAnonymousModule() { - if (!$this->_anonModule) { - $this->_anonModule = new HTMLPurifier_HTMLModule(); - $this->_anonModule->name = 'Anonymous'; - } - return $this->_anonModule; - } - - private $_anonModule = null; - - - // PUBLIC BUT INTERNAL VARIABLES -------------------------------------- - - public $type = 'HTML'; - public $manager; /**< Instance of HTMLPurifier_HTMLModuleManager */ - - /** - * Performs low-cost, preliminary initialization. - */ - public function __construct() { - $this->manager = new HTMLPurifier_HTMLModuleManager(); - } - - protected function doSetup($config) { - $this->processModules($config); - $this->setupConfigStuff($config); - unset($this->manager); - - // cleanup some of the element definitions - foreach ($this->info as $k => $v) { - unset($this->info[$k]->content_model); - unset($this->info[$k]->content_model_type); - } - } - - /** - * Extract out the information from the manager - */ - protected function processModules($config) { - - if ($this->_anonModule) { - // for user specific changes - // this is late-loaded so we don't have to deal with PHP4 - // reference wonky-ness - $this->manager->addModule($this->_anonModule); - unset($this->_anonModule); - } - - $this->manager->setup($config); - $this->doctype = $this->manager->doctype; - - foreach ($this->manager->modules as $module) { - foreach($module->info_tag_transform as $k => $v) { - if ($v === false) unset($this->info_tag_transform[$k]); - else $this->info_tag_transform[$k] = $v; - } - foreach($module->info_attr_transform_pre as $k => $v) { - if ($v === false) unset($this->info_attr_transform_pre[$k]); - else $this->info_attr_transform_pre[$k] = $v; - } - foreach($module->info_attr_transform_post as $k => $v) { - if ($v === false) unset($this->info_attr_transform_post[$k]); - else $this->info_attr_transform_post[$k] = $v; - } - foreach ($module->info_injector as $k => $v) { - if ($v === false) unset($this->info_injector[$k]); - else $this->info_injector[$k] = $v; - } - } - - $this->info = $this->manager->getElements(); - $this->info_content_sets = $this->manager->contentSets->lookup; - - } - - /** - * Sets up stuff based on config. We need a better way of doing this. - */ - protected function setupConfigStuff($config) { - - $block_wrapper = $config->get('HTML.BlockWrapper'); - if (isset($this->info_content_sets['Block'][$block_wrapper])) { - $this->info_block_wrapper = $block_wrapper; - } else { - trigger_error('Cannot use non-block element as block wrapper', - E_USER_ERROR); - } - - $parent = $config->get('HTML.Parent'); - $def = $this->manager->getElement($parent, true); - if ($def) { - $this->info_parent = $parent; - $this->info_parent_def = $def; - } else { - trigger_error('Cannot use unrecognized element as parent', - E_USER_ERROR); - $this->info_parent_def = $this->manager->getElement($this->info_parent, true); - } - - // support template text - $support = "(for information on implementing this, see the ". - "support forums) "; - - // setup allowed elements ----------------------------------------- - - $allowed_elements = $config->get('HTML.AllowedElements'); - $allowed_attributes = $config->get('HTML.AllowedAttributes'); // retrieve early - - if (!is_array($allowed_elements) && !is_array($allowed_attributes)) { - $allowed = $config->get('HTML.Allowed'); - if (is_string($allowed)) { - list($allowed_elements, $allowed_attributes) = $this->parseTinyMCEAllowedList($allowed); - } - } - - if (is_array($allowed_elements)) { - foreach ($this->info as $name => $d) { - if(!isset($allowed_elements[$name])) unset($this->info[$name]); - unset($allowed_elements[$name]); - } - // emit errors - foreach ($allowed_elements as $element => $d) { - $element = htmlspecialchars($element); // PHP doesn't escape errors, be careful! - trigger_error("Element '$element' is not supported $support", E_USER_WARNING); - } - } - - // setup allowed attributes --------------------------------------- - - $allowed_attributes_mutable = $allowed_attributes; // by copy! - if (is_array($allowed_attributes)) { - - // This actually doesn't do anything, since we went away from - // global attributes. It's possible that userland code uses - // it, but HTMLModuleManager doesn't! - foreach ($this->info_global_attr as $attr => $x) { - $keys = array($attr, "*@$attr", "*.$attr"); - $delete = true; - foreach ($keys as $key) { - if ($delete && isset($allowed_attributes[$key])) { - $delete = false; - } - if (isset($allowed_attributes_mutable[$key])) { - unset($allowed_attributes_mutable[$key]); - } - } - if ($delete) unset($this->info_global_attr[$attr]); - } - - foreach ($this->info as $tag => $info) { - foreach ($info->attr as $attr => $x) { - $keys = array("$tag@$attr", $attr, "*@$attr", "$tag.$attr", "*.$attr"); - $delete = true; - foreach ($keys as $key) { - if ($delete && isset($allowed_attributes[$key])) { - $delete = false; - } - if (isset($allowed_attributes_mutable[$key])) { - unset($allowed_attributes_mutable[$key]); - } - } - if ($delete) { - if ($this->info[$tag]->attr[$attr]->required) { - trigger_error("Required attribute '$attr' in element '$tag' was not allowed, which means '$tag' will not be allowed either", E_USER_WARNING); - } - unset($this->info[$tag]->attr[$attr]); - } - } - } - // emit errors - foreach ($allowed_attributes_mutable as $elattr => $d) { - $bits = preg_split('/[.@]/', $elattr, 2); - $c = count($bits); - switch ($c) { - case 2: - if ($bits[0] !== '*') { - $element = htmlspecialchars($bits[0]); - $attribute = htmlspecialchars($bits[1]); - if (!isset($this->info[$element])) { - trigger_error("Cannot allow attribute '$attribute' if element '$element' is not allowed/supported $support"); - } else { - trigger_error("Attribute '$attribute' in element '$element' not supported $support", - E_USER_WARNING); - } - break; - } - // otherwise fall through - case 1: - $attribute = htmlspecialchars($bits[0]); - trigger_error("Global attribute '$attribute' is not ". - "supported in any elements $support", - E_USER_WARNING); - break; - } - } - - } - - // setup forbidden elements --------------------------------------- - - $forbidden_elements = $config->get('HTML.ForbiddenElements'); - $forbidden_attributes = $config->get('HTML.ForbiddenAttributes'); - - foreach ($this->info as $tag => $info) { - if (isset($forbidden_elements[$tag])) { - unset($this->info[$tag]); - continue; - } - foreach ($info->attr as $attr => $x) { - if ( - isset($forbidden_attributes["$tag@$attr"]) || - isset($forbidden_attributes["*@$attr"]) || - isset($forbidden_attributes[$attr]) - ) { - unset($this->info[$tag]->attr[$attr]); - continue; - } // this segment might get removed eventually - elseif (isset($forbidden_attributes["$tag.$attr"])) { - // $tag.$attr are not user supplied, so no worries! - trigger_error("Error with $tag.$attr: tag.attr syntax not supported for HTML.ForbiddenAttributes; use tag@attr instead", E_USER_WARNING); - } - } - } - foreach ($forbidden_attributes as $key => $v) { - if (strlen($key) < 2) continue; - if ($key[0] != '*') continue; - if ($key[1] == '.') { - trigger_error("Error with $key: *.attr syntax not supported for HTML.ForbiddenAttributes; use attr instead", E_USER_WARNING); - } - } - - // setup injectors ----------------------------------------------------- - foreach ($this->info_injector as $i => $injector) { - if ($injector->checkNeeded($config) !== false) { - // remove injector that does not have it's required - // elements/attributes present, and is thus not needed. - unset($this->info_injector[$i]); - } - } - } - - /** - * Parses a TinyMCE-flavored Allowed Elements and Attributes list into - * separate lists for processing. Format is element[attr1|attr2],element2... - * @warning Although it's largely drawn from TinyMCE's implementation, - * it is different, and you'll probably have to modify your lists - * @param $list String list to parse - * @param array($allowed_elements, $allowed_attributes) - * @todo Give this its own class, probably static interface - */ - public function parseTinyMCEAllowedList($list) { - - $list = str_replace(array(' ', "\t"), '', $list); - - $elements = array(); - $attributes = array(); - - $chunks = preg_split('/(,|[\n\r]+)/', $list); - foreach ($chunks as $chunk) { - if (empty($chunk)) continue; - // remove TinyMCE element control characters - if (!strpos($chunk, '[')) { - $element = $chunk; - $attr = false; - } else { - list($element, $attr) = explode('[', $chunk); - } - if ($element !== '*') $elements[$element] = true; - if (!$attr) continue; - $attr = substr($attr, 0, strlen($attr) - 1); // remove trailing ] - $attr = explode('|', $attr); - foreach ($attr as $key) { - $attributes["$element.$key"] = true; - } - } - - return array($elements, $attributes); - - } - - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule.php deleted file mode 100755 index 072cf68084..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule.php +++ /dev/null @@ -1,244 +0,0 @@ -info, since the object's data is only info, - * with extra behavior associated with it. - */ - public $attr_collections = array(); - - /** - * Associative array of deprecated tag name to HTMLPurifier_TagTransform - */ - public $info_tag_transform = array(); - - /** - * List of HTMLPurifier_AttrTransform to be performed before validation. - */ - public $info_attr_transform_pre = array(); - - /** - * List of HTMLPurifier_AttrTransform to be performed after validation. - */ - public $info_attr_transform_post = array(); - - /** - * List of HTMLPurifier_Injector to be performed during well-formedness fixing. - * An injector will only be invoked if all of it's pre-requisites are met; - * if an injector fails setup, there will be no error; it will simply be - * silently disabled. - */ - public $info_injector = array(); - - /** - * Boolean flag that indicates whether or not getChildDef is implemented. - * For optimization reasons: may save a call to a function. Be sure - * to set it if you do implement getChildDef(), otherwise it will have - * no effect! - */ - public $defines_child_def = false; - - /** - * Boolean flag whether or not this module is safe. If it is not safe, all - * of its members are unsafe. Modules are safe by default (this might be - * slightly dangerous, but it doesn't make much sense to force HTML Purifier, - * which is based off of safe HTML, to explicitly say, "This is safe," even - * though there are modules which are "unsafe") - * - * @note Previously, safety could be applied at an element level granularity. - * We've removed this ability, so in order to add "unsafe" elements - * or attributes, a dedicated module with this property set to false - * must be used. - */ - public $safe = true; - - /** - * Retrieves a proper HTMLPurifier_ChildDef subclass based on - * content_model and content_model_type member variables of - * the HTMLPurifier_ElementDef class. There is a similar function - * in HTMLPurifier_HTMLDefinition. - * @param $def HTMLPurifier_ElementDef instance - * @return HTMLPurifier_ChildDef subclass - */ - public function getChildDef($def) {return false;} - - // -- Convenience ----------------------------------------------------- - - /** - * Convenience function that sets up a new element - * @param $element Name of element to add - * @param $type What content set should element be registered to? - * Set as false to skip this step. - * @param $contents Allowed children in form of: - * "$content_model_type: $content_model" - * @param $attr_includes What attribute collections to register to - * element? - * @param $attr What unique attributes does the element define? - * @note See ElementDef for in-depth descriptions of these parameters. - * @return Created element definition object, so you - * can set advanced parameters - */ - public function addElement($element, $type, $contents, $attr_includes = array(), $attr = array()) { - $this->elements[] = $element; - // parse content_model - list($content_model_type, $content_model) = $this->parseContents($contents); - // merge in attribute inclusions - $this->mergeInAttrIncludes($attr, $attr_includes); - // add element to content sets - if ($type) $this->addElementToContentSet($element, $type); - // create element - $this->info[$element] = HTMLPurifier_ElementDef::create( - $content_model, $content_model_type, $attr - ); - // literal object $contents means direct child manipulation - if (!is_string($contents)) $this->info[$element]->child = $contents; - return $this->info[$element]; - } - - /** - * Convenience function that creates a totally blank, non-standalone - * element. - * @param $element Name of element to create - * @return Created element - */ - public function addBlankElement($element) { - if (!isset($this->info[$element])) { - $this->elements[] = $element; - $this->info[$element] = new HTMLPurifier_ElementDef(); - $this->info[$element]->standalone = false; - } else { - trigger_error("Definition for $element already exists in module, cannot redefine"); - } - return $this->info[$element]; - } - - /** - * Convenience function that registers an element to a content set - * @param Element to register - * @param Name content set (warning: case sensitive, usually upper-case - * first letter) - */ - public function addElementToContentSet($element, $type) { - if (!isset($this->content_sets[$type])) $this->content_sets[$type] = ''; - else $this->content_sets[$type] .= ' | '; - $this->content_sets[$type] .= $element; - } - - /** - * Convenience function that transforms single-string contents - * into separate content model and content model type - * @param $contents Allowed children in form of: - * "$content_model_type: $content_model" - * @note If contents is an object, an array of two nulls will be - * returned, and the callee needs to take the original $contents - * and use it directly. - */ - public function parseContents($contents) { - if (!is_string($contents)) return array(null, null); // defer - switch ($contents) { - // check for shorthand content model forms - case 'Empty': - return array('empty', ''); - case 'Inline': - return array('optional', 'Inline | #PCDATA'); - case 'Flow': - return array('optional', 'Flow | #PCDATA'); - } - list($content_model_type, $content_model) = explode(':', $contents); - $content_model_type = strtolower(trim($content_model_type)); - $content_model = trim($content_model); - return array($content_model_type, $content_model); - } - - /** - * Convenience function that merges a list of attribute includes into - * an attribute array. - * @param $attr Reference to attr array to modify - * @param $attr_includes Array of includes / string include to merge in - */ - public function mergeInAttrIncludes(&$attr, $attr_includes) { - if (!is_array($attr_includes)) { - if (empty($attr_includes)) $attr_includes = array(); - else $attr_includes = array($attr_includes); - } - $attr[0] = $attr_includes; - } - - /** - * Convenience function that generates a lookup table with boolean - * true as value. - * @param $list List of values to turn into a lookup - * @note You can also pass an arbitrary number of arguments in - * place of the regular argument - * @return Lookup array equivalent of list - */ - public function makeLookup($list) { - if (is_string($list)) $list = func_get_args(); - $ret = array(); - foreach ($list as $value) { - if (is_null($value)) continue; - $ret[$value] = true; - } - return $ret; - } - - /** - * Lazy load construction of the module after determining whether - * or not it's needed, and also when a finalized configuration object - * is available. - * @param $config Instance of HTMLPurifier_Config - */ - public function setup($config) {} - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Bdo.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Bdo.php deleted file mode 100755 index 23ac3da3a2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Bdo.php +++ /dev/null @@ -1,31 +0,0 @@ - array('dir' => false) - ); - - public function setup($config) { - $bdo = $this->addElement( - 'bdo', 'Inline', 'Inline', array('Core', 'Lang'), - array( - 'dir' => 'Enum#ltr,rtl', // required - // The Abstract Module specification has the attribute - // inclusions wrong for bdo: bdo allows Lang - ) - ); - $bdo->attr_transform_post[] = new HTMLPurifier_AttrTransform_BdoDir(); - - $this->attr_collections['I18N']['dir'] = 'Enum#ltr,rtl'; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/CommonAttributes.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/CommonAttributes.php deleted file mode 100755 index 7c15da84fc..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/CommonAttributes.php +++ /dev/null @@ -1,26 +0,0 @@ - array( - 0 => array('Style'), - // 'xml:space' => false, - 'class' => 'Class', - 'id' => 'ID', - 'title' => 'CDATA', - ), - 'Lang' => array(), - 'I18N' => array( - 0 => array('Lang'), // proprietary, for xml:lang/lang - ), - 'Common' => array( - 0 => array('Core', 'I18N') - ) - ); - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Edit.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Edit.php deleted file mode 100755 index ff93690555..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Edit.php +++ /dev/null @@ -1,38 +0,0 @@ - 'URI', - // 'datetime' => 'Datetime', // not implemented - ); - $this->addElement('del', 'Inline', $contents, 'Common', $attr); - $this->addElement('ins', 'Inline', $contents, 'Common', $attr); - } - - // HTML 4.01 specifies that ins/del must not contain block - // elements when used in an inline context, chameleon is - // a complicated workaround to acheive this effect - - // Inline context ! Block context (exclamation mark is - // separator, see getChildDef for parsing) - - public $defines_child_def = true; - public function getChildDef($def) { - if ($def->content_model_type != 'chameleon') return false; - $value = explode('!', $def->content_model); - return new HTMLPurifier_ChildDef_Chameleon($value[0], $value[1]); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Forms.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Forms.php deleted file mode 100755 index b963529a77..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Forms.php +++ /dev/null @@ -1,119 +0,0 @@ - 'Form', - 'Inline' => 'Formctrl', - ); - - public function setup($config) { - $form = $this->addElement('form', 'Form', - 'Required: Heading | List | Block | fieldset', 'Common', array( - 'accept' => 'ContentTypes', - 'accept-charset' => 'Charsets', - 'action*' => 'URI', - 'method' => 'Enum#get,post', - // really ContentType, but these two are the only ones used today - 'enctype' => 'Enum#application/x-www-form-urlencoded,multipart/form-data', - )); - $form->excludes = array('form' => true); - - $input = $this->addElement('input', 'Formctrl', 'Empty', 'Common', array( - 'accept' => 'ContentTypes', - 'accesskey' => 'Character', - 'alt' => 'Text', - 'checked' => 'Bool#checked', - 'disabled' => 'Bool#disabled', - 'maxlength' => 'Number', - 'name' => 'CDATA', - 'readonly' => 'Bool#readonly', - 'size' => 'Number', - 'src' => 'URI#embedded', - 'tabindex' => 'Number', - 'type' => 'Enum#text,password,checkbox,button,radio,submit,reset,file,hidden,image', - 'value' => 'CDATA', - )); - $input->attr_transform_post[] = new HTMLPurifier_AttrTransform_Input(); - - $this->addElement('select', 'Formctrl', 'Required: optgroup | option', 'Common', array( - 'disabled' => 'Bool#disabled', - 'multiple' => 'Bool#multiple', - 'name' => 'CDATA', - 'size' => 'Number', - 'tabindex' => 'Number', - )); - - $this->addElement('option', false, 'Optional: #PCDATA', 'Common', array( - 'disabled' => 'Bool#disabled', - 'label' => 'Text', - 'selected' => 'Bool#selected', - 'value' => 'CDATA', - )); - // It's illegal for there to be more than one selected, but not - // be multiple. Also, no selected means undefined behavior. This might - // be difficult to implement; perhaps an injector, or a context variable. - - $textarea = $this->addElement('textarea', 'Formctrl', 'Optional: #PCDATA', 'Common', array( - 'accesskey' => 'Character', - 'cols*' => 'Number', - 'disabled' => 'Bool#disabled', - 'name' => 'CDATA', - 'readonly' => 'Bool#readonly', - 'rows*' => 'Number', - 'tabindex' => 'Number', - )); - $textarea->attr_transform_pre[] = new HTMLPurifier_AttrTransform_Textarea(); - - $button = $this->addElement('button', 'Formctrl', 'Optional: #PCDATA | Heading | List | Block | Inline', 'Common', array( - 'accesskey' => 'Character', - 'disabled' => 'Bool#disabled', - 'name' => 'CDATA', - 'tabindex' => 'Number', - 'type' => 'Enum#button,submit,reset', - 'value' => 'CDATA', - )); - - // For exclusions, ideally we'd specify content sets, not literal elements - $button->excludes = $this->makeLookup( - 'form', 'fieldset', // Form - 'input', 'select', 'textarea', 'label', 'button', // Formctrl - 'a', // as per HTML 4.01 spec, this is omitted by modularization - 'isindex', 'iframe' // legacy items - ); - - // Extra exclusion: img usemap="" is not permitted within this element. - // We'll omit this for now, since we don't have any good way of - // indicating it yet. - - // This is HIGHLY user-unfriendly; we need a custom child-def for this - $this->addElement('fieldset', 'Form', 'Custom: (#WS?,legend,(Flow|#PCDATA)*)', 'Common'); - - $label = $this->addElement('label', 'Formctrl', 'Optional: #PCDATA | Inline', 'Common', array( - 'accesskey' => 'Character', - // 'for' => 'IDREF', // IDREF not implemented, cannot allow - )); - $label->excludes = array('label' => true); - - $this->addElement('legend', false, 'Optional: #PCDATA | Inline', 'Common', array( - 'accesskey' => 'Character', - )); - - $this->addElement('optgroup', false, 'Required: option', 'Common', array( - 'disabled' => 'Bool#disabled', - 'label*' => 'Text', - )); - - // Don't forget an injector for . This one's a little complex - // because it maps to multiple elements. - - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Hypertext.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Hypertext.php deleted file mode 100755 index d7e9bdd27e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Hypertext.php +++ /dev/null @@ -1,31 +0,0 @@ -addElement( - 'a', 'Inline', 'Inline', 'Common', - array( - // 'accesskey' => 'Character', - // 'charset' => 'Charset', - 'href' => 'URI', - // 'hreflang' => 'LanguageCode', - 'rel' => new HTMLPurifier_AttrDef_HTML_LinkTypes('rel'), - 'rev' => new HTMLPurifier_AttrDef_HTML_LinkTypes('rev'), - // 'tabindex' => 'Number', - // 'type' => 'ContentType', - ) - ); - $a->formatting = true; - $a->excludes = array('a' => true); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Iframe.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Iframe.php deleted file mode 100644 index 287071edf2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Iframe.php +++ /dev/null @@ -1,38 +0,0 @@ -get('HTML.SafeIframe')) { - $this->safe = true; - } - $this->addElement( - 'iframe', 'Inline', 'Flow', 'Common', - array( - 'src' => 'URI#embedded', - 'width' => 'Length', - 'height' => 'Length', - 'name' => 'ID', - 'scrolling' => 'Enum#yes,no,auto', - 'frameborder' => 'Enum#0,1', - 'longdesc' => 'URI', - 'marginheight' => 'Pixels', - 'marginwidth' => 'Pixels', - ) - ); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Image.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Image.php deleted file mode 100755 index 948d435bcd..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Image.php +++ /dev/null @@ -1,40 +0,0 @@ -get('HTML.MaxImgLength'); - $img = $this->addElement( - 'img', 'Inline', 'Empty', 'Common', - array( - 'alt*' => 'Text', - // According to the spec, it's Length, but percents can - // be abused, so we allow only Pixels. - 'height' => 'Pixels#' . $max, - 'width' => 'Pixels#' . $max, - 'longdesc' => 'URI', - 'src*' => new HTMLPurifier_AttrDef_URI(true), // embedded - ) - ); - if ($max === null || $config->get('HTML.Trusted')) { - $img->attr['height'] = - $img->attr['width'] = 'Length'; - } - - // kind of strange, but splitting things up would be inefficient - $img->attr_transform_pre[] = - $img->attr_transform_post[] = - new HTMLPurifier_AttrTransform_ImgRequired(); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Legacy.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Legacy.php deleted file mode 100755 index f278eeced2..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Legacy.php +++ /dev/null @@ -1,159 +0,0 @@ -addElement('basefont', 'Inline', 'Empty', false, array( - 'color' => 'Color', - 'face' => 'Text', // extremely broad, we should - 'size' => 'Text', // tighten it - 'id' => 'ID' - )); - $this->addElement('center', 'Block', 'Flow', 'Common'); - $this->addElement('dir', 'Block', 'Required: li', 'Common', array( - 'compact' => 'Bool#compact' - )); - $this->addElement('font', 'Inline', 'Inline', array('Core', 'I18N'), array( - 'color' => 'Color', - 'face' => 'Text', // extremely broad, we should - 'size' => 'Text', // tighten it - )); - $this->addElement('menu', 'Block', 'Required: li', 'Common', array( - 'compact' => 'Bool#compact' - )); - - $s = $this->addElement('s', 'Inline', 'Inline', 'Common'); - $s->formatting = true; - - $strike = $this->addElement('strike', 'Inline', 'Inline', 'Common'); - $strike->formatting = true; - - $u = $this->addElement('u', 'Inline', 'Inline', 'Common'); - $u->formatting = true; - - // setup modifications to old elements - - $align = 'Enum#left,right,center,justify'; - - $address = $this->addBlankElement('address'); - $address->content_model = 'Inline | #PCDATA | p'; - $address->content_model_type = 'optional'; - $address->child = false; - - $blockquote = $this->addBlankElement('blockquote'); - $blockquote->content_model = 'Flow | #PCDATA'; - $blockquote->content_model_type = 'optional'; - $blockquote->child = false; - - $br = $this->addBlankElement('br'); - $br->attr['clear'] = 'Enum#left,all,right,none'; - - $caption = $this->addBlankElement('caption'); - $caption->attr['align'] = 'Enum#top,bottom,left,right'; - - $div = $this->addBlankElement('div'); - $div->attr['align'] = $align; - - $dl = $this->addBlankElement('dl'); - $dl->attr['compact'] = 'Bool#compact'; - - for ($i = 1; $i <= 6; $i++) { - $h = $this->addBlankElement("h$i"); - $h->attr['align'] = $align; - } - - $hr = $this->addBlankElement('hr'); - $hr->attr['align'] = $align; - $hr->attr['noshade'] = 'Bool#noshade'; - $hr->attr['size'] = 'Pixels'; - $hr->attr['width'] = 'Length'; - - $img = $this->addBlankElement('img'); - $img->attr['align'] = 'IAlign'; - $img->attr['border'] = 'Pixels'; - $img->attr['hspace'] = 'Pixels'; - $img->attr['vspace'] = 'Pixels'; - - // figure out this integer business - - $li = $this->addBlankElement('li'); - $li->attr['value'] = new HTMLPurifier_AttrDef_Integer(); - $li->attr['type'] = 'Enum#s:1,i,I,a,A,disc,square,circle'; - - $ol = $this->addBlankElement('ol'); - $ol->attr['compact'] = 'Bool#compact'; - $ol->attr['start'] = new HTMLPurifier_AttrDef_Integer(); - $ol->attr['type'] = 'Enum#s:1,i,I,a,A'; - - $p = $this->addBlankElement('p'); - $p->attr['align'] = $align; - - $pre = $this->addBlankElement('pre'); - $pre->attr['width'] = 'Number'; - - // script omitted - - $table = $this->addBlankElement('table'); - $table->attr['align'] = 'Enum#left,center,right'; - $table->attr['bgcolor'] = 'Color'; - - $tr = $this->addBlankElement('tr'); - $tr->attr['bgcolor'] = 'Color'; - - $th = $this->addBlankElement('th'); - $th->attr['bgcolor'] = 'Color'; - $th->attr['height'] = 'Length'; - $th->attr['nowrap'] = 'Bool#nowrap'; - $th->attr['width'] = 'Length'; - - $td = $this->addBlankElement('td'); - $td->attr['bgcolor'] = 'Color'; - $td->attr['height'] = 'Length'; - $td->attr['nowrap'] = 'Bool#nowrap'; - $td->attr['width'] = 'Length'; - - $ul = $this->addBlankElement('ul'); - $ul->attr['compact'] = 'Bool#compact'; - $ul->attr['type'] = 'Enum#square,disc,circle'; - - // "safe" modifications to "unsafe" elements - // WARNING: If you want to add support for an unsafe, legacy - // attribute, make a new TrustedLegacy module with the trusted - // bit set appropriately - - $form = $this->addBlankElement('form'); - $form->content_model = 'Flow | #PCDATA'; - $form->content_model_type = 'optional'; - $form->attr['target'] = 'FrameTarget'; - - $input = $this->addBlankElement('input'); - $input->attr['align'] = 'IAlign'; - - $legend = $this->addBlankElement('legend'); - $legend->attr['align'] = 'LAlign'; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/List.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/List.php deleted file mode 100755 index 79ccefafd9..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/List.php +++ /dev/null @@ -1,43 +0,0 @@ - 'List'); - - public function setup($config) { - $ol = $this->addElement('ol', 'List', new HTMLPurifier_ChildDef_List(), 'Common'); - $ul = $this->addElement('ul', 'List', new HTMLPurifier_ChildDef_List(), 'Common'); - // XXX The wrap attribute is handled by MakeWellFormed. This is all - // quite unsatisfactory, because we generated this - // *specifically* for lists, and now a big chunk of the handling - // is done properly by the List ChildDef. So actually, we just - // want enough information to make autoclosing work properly, - // and then hand off the tricky stuff to the ChildDef. - $ol->wrap = 'li'; - $ul->wrap = 'li'; - $this->addElement('dl', 'List', 'Required: dt | dd', 'Common'); - - $this->addElement('li', false, 'Flow', 'Common'); - - $this->addElement('dd', false, 'Flow', 'Common'); - $this->addElement('dt', false, 'Inline', 'Common'); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Name.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Name.php deleted file mode 100755 index 3a1271a976..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Name.php +++ /dev/null @@ -1,21 +0,0 @@ -addBlankElement($name); - $element->attr['name'] = 'CDATA'; - if (!$config->get('HTML.Attr.Name.UseCDATA')) { - $element->attr_transform_post[] = new HTMLPurifier_AttrTransform_NameSync(); - } - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Nofollow.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Nofollow.php deleted file mode 100755 index 3aa6654a5c..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Nofollow.php +++ /dev/null @@ -1,19 +0,0 @@ -addBlankElement('a'); - $a->attr_transform_post[] = new HTMLPurifier_AttrTransform_Nofollow(); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php deleted file mode 100755 index 5f1b14abb8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php +++ /dev/null @@ -1,14 +0,0 @@ - array( - 'lang' => 'LanguageCode', - ) - ); -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Object.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Object.php deleted file mode 100755 index 193c1011f8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Object.php +++ /dev/null @@ -1,47 +0,0 @@ - to cater to legacy browsers: this - * module does not allow this sort of behavior - */ -class HTMLPurifier_HTMLModule_Object extends HTMLPurifier_HTMLModule -{ - - public $name = 'Object'; - public $safe = false; - - public function setup($config) { - - $this->addElement('object', 'Inline', 'Optional: #PCDATA | Flow | param', 'Common', - array( - 'archive' => 'URI', - 'classid' => 'URI', - 'codebase' => 'URI', - 'codetype' => 'Text', - 'data' => 'URI', - 'declare' => 'Bool#declare', - 'height' => 'Length', - 'name' => 'CDATA', - 'standby' => 'Text', - 'tabindex' => 'Number', - 'type' => 'ContentType', - 'width' => 'Length' - ) - ); - - $this->addElement('param', false, 'Empty', false, - array( - 'id' => 'ID', - 'name*' => 'Text', - 'type' => 'Text', - 'value' => 'Text', - 'valuetype' => 'Enum#data,ref,object' - ) - ); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Presentation.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Presentation.php deleted file mode 100755 index 8ff0b5ed78..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Presentation.php +++ /dev/null @@ -1,36 +0,0 @@ -addElement('hr', 'Block', 'Empty', 'Common'); - $this->addElement('sub', 'Inline', 'Inline', 'Common'); - $this->addElement('sup', 'Inline', 'Inline', 'Common'); - $b = $this->addElement('b', 'Inline', 'Inline', 'Common'); - $b->formatting = true; - $big = $this->addElement('big', 'Inline', 'Inline', 'Common'); - $big->formatting = true; - $i = $this->addElement('i', 'Inline', 'Inline', 'Common'); - $i->formatting = true; - $small = $this->addElement('small', 'Inline', 'Inline', 'Common'); - $small->formatting = true; - $tt = $this->addElement('tt', 'Inline', 'Inline', 'Common'); - $tt->formatting = true; - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Proprietary.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Proprietary.php deleted file mode 100755 index dd36a3de0e..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Proprietary.php +++ /dev/null @@ -1,33 +0,0 @@ -addElement('marquee', 'Inline', 'Flow', 'Common', - array( - 'direction' => 'Enum#left,right,up,down', - 'behavior' => 'Enum#alternate', - 'width' => 'Length', - 'height' => 'Length', - 'scrolldelay' => 'Number', - 'scrollamount' => 'Number', - 'loop' => 'Number', - 'bgcolor' => 'Color', - 'hspace' => 'Pixels', - 'vspace' => 'Pixels', - ) - ); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Ruby.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Ruby.php deleted file mode 100755 index b26a0a30a0..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Ruby.php +++ /dev/null @@ -1,27 +0,0 @@ -addElement('ruby', 'Inline', - 'Custom: ((rb, (rt | (rp, rt, rp))) | (rbc, rtc, rtc?))', - 'Common'); - $this->addElement('rbc', false, 'Required: rb', 'Common'); - $this->addElement('rtc', false, 'Required: rt', 'Common'); - $rb = $this->addElement('rb', false, 'Inline', 'Common'); - $rb->excludes = array('ruby' => true); - $rt = $this->addElement('rt', false, 'Inline', 'Common', array('rbspan' => 'Number')); - $rt->excludes = array('ruby' => true); - $this->addElement('rp', false, 'Optional: #PCDATA', 'Common'); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeEmbed.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeEmbed.php deleted file mode 100755 index 9f3758a322..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeEmbed.php +++ /dev/null @@ -1,34 +0,0 @@ -get('HTML.MaxImgLength'); - $embed = $this->addElement( - 'embed', 'Inline', 'Empty', 'Common', - array( - 'src*' => 'URI#embedded', - 'type' => 'Enum#application/x-shockwave-flash', - 'width' => 'Pixels#' . $max, - 'height' => 'Pixels#' . $max, - 'allowscriptaccess' => 'Enum#never', - 'allownetworking' => 'Enum#internal', - 'flashvars' => 'Text', - 'wmode' => 'Enum#window,transparent,opaque', - 'name' => 'ID', - ) - ); - $embed->attr_transform_post[] = new HTMLPurifier_AttrTransform_SafeEmbed(); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeObject.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeObject.php deleted file mode 100755 index 00da342ef8..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeObject.php +++ /dev/null @@ -1,52 +0,0 @@ -get('HTML.MaxImgLength'); - $object = $this->addElement( - 'object', - 'Inline', - 'Optional: param | Flow | #PCDATA', - 'Common', - array( - // While technically not required by the spec, we're forcing - // it to this value. - 'type' => 'Enum#application/x-shockwave-flash', - 'width' => 'Pixels#' . $max, - 'height' => 'Pixels#' . $max, - 'data' => 'URI#embedded', - 'codebase' => new HTMLPurifier_AttrDef_Enum(array( - 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0')), - ) - ); - $object->attr_transform_post[] = new HTMLPurifier_AttrTransform_SafeObject(); - - $param = $this->addElement('param', false, 'Empty', false, - array( - 'id' => 'ID', - 'name*' => 'Text', - 'value' => 'Text' - ) - ); - $param->attr_transform_post[] = new HTMLPurifier_AttrTransform_SafeParam(); - $this->info_injector[] = 'SafeObject'; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php deleted file mode 100644 index e32a6b6c51..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php +++ /dev/null @@ -1,37 +0,0 @@ -get('HTML.SafeScripting'); - $script = $this->addElement( - 'script', - 'Inline', - 'Empty', - null, - array( - // While technically not required by the spec, we're forcing - // it to this value. - 'type' => 'Enum#text/javascript', - 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed)) - ) - ); - $script->attr_transform_pre[] = - $script->attr_transform_post[] = new HTMLPurifier_AttrTransform_ScriptRequired(); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Scripting.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Scripting.php deleted file mode 100755 index 2ac0d8021d..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Scripting.php +++ /dev/null @@ -1,54 +0,0 @@ - 'script | noscript', 'Inline' => 'script | noscript'); - public $safe = false; - - public function setup($config) { - // TODO: create custom child-definition for noscript that - // auto-wraps stray #PCDATA in a similar manner to - // blockquote's custom definition (we would use it but - // blockquote's contents are optional while noscript's contents - // are required) - - // TODO: convert this to new syntax, main problem is getting - // both content sets working - - // In theory, this could be safe, but I don't see any reason to - // allow it. - $this->info['noscript'] = new HTMLPurifier_ElementDef(); - $this->info['noscript']->attr = array( 0 => array('Common') ); - $this->info['noscript']->content_model = 'Heading | List | Block'; - $this->info['noscript']->content_model_type = 'required'; - - $this->info['script'] = new HTMLPurifier_ElementDef(); - $this->info['script']->attr = array( - 'defer' => new HTMLPurifier_AttrDef_Enum(array('defer')), - 'src' => new HTMLPurifier_AttrDef_URI(true), - 'type' => new HTMLPurifier_AttrDef_Enum(array('text/javascript')) - ); - $this->info['script']->content_model = '#PCDATA'; - $this->info['script']->content_model_type = 'optional'; - $this->info['script']->attr_transform_pre[] = - $this->info['script']->attr_transform_post[] = - new HTMLPurifier_AttrTransform_ScriptRequired(); - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/StyleAttribute.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/StyleAttribute.php deleted file mode 100755 index eb78464cc0..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/StyleAttribute.php +++ /dev/null @@ -1,24 +0,0 @@ - array('style' => false), // see constructor - 'Core' => array(0 => array('Style')) - ); - - public function setup($config) { - $this->attr_collections['Style']['style'] = new HTMLPurifier_AttrDef_CSS(); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tables.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tables.php deleted file mode 100755 index 45c42bb3e4..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tables.php +++ /dev/null @@ -1,69 +0,0 @@ -addElement('caption', false, 'Inline', 'Common'); - - $this->addElement('table', 'Block', - new HTMLPurifier_ChildDef_Table(), 'Common', - array( - 'border' => 'Pixels', - 'cellpadding' => 'Length', - 'cellspacing' => 'Length', - 'frame' => 'Enum#void,above,below,hsides,lhs,rhs,vsides,box,border', - 'rules' => 'Enum#none,groups,rows,cols,all', - 'summary' => 'Text', - 'width' => 'Length' - ) - ); - - // common attributes - $cell_align = array( - 'align' => 'Enum#left,center,right,justify,char', - 'charoff' => 'Length', - 'valign' => 'Enum#top,middle,bottom,baseline', - ); - - $cell_t = array_merge( - array( - 'abbr' => 'Text', - 'colspan' => 'Number', - 'rowspan' => 'Number', - // Apparently, as of HTML5 this attribute only applies - // to 'th' elements. - 'scope' => 'Enum#row,col,rowgroup,colgroup', - ), - $cell_align - ); - $this->addElement('td', false, 'Flow', 'Common', $cell_t); - $this->addElement('th', false, 'Flow', 'Common', $cell_t); - - $this->addElement('tr', false, 'Required: td | th', 'Common', $cell_align); - - $cell_col = array_merge( - array( - 'span' => 'Number', - 'width' => 'MultiLength', - ), - $cell_align - ); - $this->addElement('col', false, 'Empty', 'Common', $cell_col); - $this->addElement('colgroup', false, 'Optional: col', 'Common', $cell_col); - - $this->addElement('tbody', false, 'Required: tr', 'Common', $cell_align); - $this->addElement('thead', false, 'Required: tr', 'Common', $cell_align); - $this->addElement('tfoot', false, 'Required: tr', 'Common', $cell_align); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Target.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Target.php deleted file mode 100755 index 2b844ecc45..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Target.php +++ /dev/null @@ -1,23 +0,0 @@ -addBlankElement($name); - $e->attr = array( - 'target' => new HTMLPurifier_AttrDef_HTML_FrameTarget() - ); - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/TargetBlank.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/TargetBlank.php deleted file mode 100644 index e1305ec5db..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/TargetBlank.php +++ /dev/null @@ -1,19 +0,0 @@ -addBlankElement('a'); - $a->attr_transform_post[] = new HTMLPurifier_AttrTransform_TargetBlank(); - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Text.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Text.php deleted file mode 100755 index ae77c71886..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Text.php +++ /dev/null @@ -1,71 +0,0 @@ - 'Heading | Block | Inline' - ); - - public function setup($config) { - - // Inline Phrasal ------------------------------------------------- - $this->addElement('abbr', 'Inline', 'Inline', 'Common'); - $this->addElement('acronym', 'Inline', 'Inline', 'Common'); - $this->addElement('cite', 'Inline', 'Inline', 'Common'); - $this->addElement('dfn', 'Inline', 'Inline', 'Common'); - $this->addElement('kbd', 'Inline', 'Inline', 'Common'); - $this->addElement('q', 'Inline', 'Inline', 'Common', array('cite' => 'URI')); - $this->addElement('samp', 'Inline', 'Inline', 'Common'); - $this->addElement('var', 'Inline', 'Inline', 'Common'); - - $em = $this->addElement('em', 'Inline', 'Inline', 'Common'); - $em->formatting = true; - - $strong = $this->addElement('strong', 'Inline', 'Inline', 'Common'); - $strong->formatting = true; - - $code = $this->addElement('code', 'Inline', 'Inline', 'Common'); - $code->formatting = true; - - // Inline Structural ---------------------------------------------- - $this->addElement('span', 'Inline', 'Inline', 'Common'); - $this->addElement('br', 'Inline', 'Empty', 'Core'); - - // Block Phrasal -------------------------------------------------- - $this->addElement('address', 'Block', 'Inline', 'Common'); - $this->addElement('blockquote', 'Block', 'Optional: Heading | Block | List', 'Common', array('cite' => 'URI') ); - $pre = $this->addElement('pre', 'Block', 'Inline', 'Common'); - $pre->excludes = $this->makeLookup( - 'img', 'big', 'small', 'object', 'applet', 'font', 'basefont' ); - $this->addElement('h1', 'Heading', 'Inline', 'Common'); - $this->addElement('h2', 'Heading', 'Inline', 'Common'); - $this->addElement('h3', 'Heading', 'Inline', 'Common'); - $this->addElement('h4', 'Heading', 'Inline', 'Common'); - $this->addElement('h5', 'Heading', 'Inline', 'Common'); - $this->addElement('h6', 'Heading', 'Inline', 'Common'); - - // Block Structural ----------------------------------------------- - $p = $this->addElement('p', 'Block', 'Inline', 'Common'); - $p->autoclose = array_flip(array("address", "blockquote", "center", "dir", "div", "dl", "fieldset", "ol", "p", "ul")); - - $this->addElement('div', 'Block', 'Flow', 'Common'); - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy.php deleted file mode 100755 index 21783f18eb..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy.php +++ /dev/null @@ -1,207 +0,0 @@ - 'none', 'light', 'medium', 'heavy'); - - /** - * Default level to place all fixes in. Disabled by default - */ - public $defaultLevel = null; - - /** - * Lists of fixes used by getFixesForLevel(). Format is: - * HTMLModule_Tidy->fixesForLevel[$level] = array('fix-1', 'fix-2'); - */ - public $fixesForLevel = array( - 'light' => array(), - 'medium' => array(), - 'heavy' => array() - ); - - /** - * Lazy load constructs the module by determining the necessary - * fixes to create and then delegating to the populate() function. - * @todo Wildcard matching and error reporting when an added or - * subtracted fix has no effect. - */ - public function setup($config) { - - // create fixes, initialize fixesForLevel - $fixes = $this->makeFixes(); - $this->makeFixesForLevel($fixes); - - // figure out which fixes to use - $level = $config->get('HTML.TidyLevel'); - $fixes_lookup = $this->getFixesForLevel($level); - - // get custom fix declarations: these need namespace processing - $add_fixes = $config->get('HTML.TidyAdd'); - $remove_fixes = $config->get('HTML.TidyRemove'); - - foreach ($fixes as $name => $fix) { - // needs to be refactored a little to implement globbing - if ( - isset($remove_fixes[$name]) || - (!isset($add_fixes[$name]) && !isset($fixes_lookup[$name])) - ) { - unset($fixes[$name]); - } - } - - // populate this module with necessary fixes - $this->populate($fixes); - - } - - /** - * Retrieves all fixes per a level, returning fixes for that specific - * level as well as all levels below it. - * @param $level String level identifier, see $levels for valid values - * @return Lookup up table of fixes - */ - public function getFixesForLevel($level) { - if ($level == $this->levels[0]) { - return array(); - } - $activated_levels = array(); - for ($i = 1, $c = count($this->levels); $i < $c; $i++) { - $activated_levels[] = $this->levels[$i]; - if ($this->levels[$i] == $level) break; - } - if ($i == $c) { - trigger_error( - 'Tidy level ' . htmlspecialchars($level) . ' not recognized', - E_USER_WARNING - ); - return array(); - } - $ret = array(); - foreach ($activated_levels as $level) { - foreach ($this->fixesForLevel[$level] as $fix) { - $ret[$fix] = true; - } - } - return $ret; - } - - /** - * Dynamically populates the $fixesForLevel member variable using - * the fixes array. It may be custom overloaded, used in conjunction - * with $defaultLevel, or not used at all. - */ - public function makeFixesForLevel($fixes) { - if (!isset($this->defaultLevel)) return; - if (!isset($this->fixesForLevel[$this->defaultLevel])) { - trigger_error( - 'Default level ' . $this->defaultLevel . ' does not exist', - E_USER_ERROR - ); - return; - } - $this->fixesForLevel[$this->defaultLevel] = array_keys($fixes); - } - - /** - * Populates the module with transforms and other special-case code - * based on a list of fixes passed to it - * @param $lookup Lookup table of fixes to activate - */ - public function populate($fixes) { - foreach ($fixes as $name => $fix) { - // determine what the fix is for - list($type, $params) = $this->getFixType($name); - switch ($type) { - case 'attr_transform_pre': - case 'attr_transform_post': - $attr = $params['attr']; - if (isset($params['element'])) { - $element = $params['element']; - if (empty($this->info[$element])) { - $e = $this->addBlankElement($element); - } else { - $e = $this->info[$element]; - } - } else { - $type = "info_$type"; - $e = $this; - } - // PHP does some weird parsing when I do - // $e->$type[$attr], so I have to assign a ref. - $f =& $e->$type; - $f[$attr] = $fix; - break; - case 'tag_transform': - $this->info_tag_transform[$params['element']] = $fix; - break; - case 'child': - case 'content_model_type': - $element = $params['element']; - if (empty($this->info[$element])) { - $e = $this->addBlankElement($element); - } else { - $e = $this->info[$element]; - } - $e->$type = $fix; - break; - default: - trigger_error("Fix type $type not supported", E_USER_ERROR); - break; - } - } - } - - /** - * Parses a fix name and determines what kind of fix it is, as well - * as other information defined by the fix - * @param $name String name of fix - * @return array(string $fix_type, array $fix_parameters) - * @note $fix_parameters is type dependant, see populate() for usage - * of these parameters - */ - public function getFixType($name) { - // parse it - $property = $attr = null; - if (strpos($name, '#') !== false) list($name, $property) = explode('#', $name); - if (strpos($name, '@') !== false) list($name, $attr) = explode('@', $name); - - // figure out the parameters - $params = array(); - if ($name !== '') $params['element'] = $name; - if (!is_null($attr)) $params['attr'] = $attr; - - // special case: attribute transform - if (!is_null($attr)) { - if (is_null($property)) $property = 'pre'; - $type = 'attr_transform_' . $property; - return array($type, $params); - } - - // special case: tag transform - if (is_null($property)) { - return array('tag_transform', $params); - } - - return array($property, $params); - - } - - /** - * Defines all fixes the module will perform in a compact - * associative array of fix name to fix implementation. - */ - public function makeFixes() {} - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Name.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Name.php deleted file mode 100755 index 61ff85ce2f..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Name.php +++ /dev/null @@ -1,24 +0,0 @@ -content_model_type != 'strictblockquote') return parent::getChildDef($def); - return new HTMLPurifier_ChildDef_StrictBlockquote($def->content_model); - } -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php deleted file mode 100755 index 9960b1dd10..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php +++ /dev/null @@ -1,9 +0,0 @@ - 'text-align:left;', - 'right' => 'text-align:right;', - 'top' => 'caption-side:top;', - 'bottom' => 'caption-side:bottom;' // not supported by IE - )); - - // @align for img ------------------------------------------------- - $r['img@align'] = - new HTMLPurifier_AttrTransform_EnumToCSS('align', array( - 'left' => 'float:left;', - 'right' => 'float:right;', - 'top' => 'vertical-align:top;', - 'middle' => 'vertical-align:middle;', - 'bottom' => 'vertical-align:baseline;', - )); - - // @align for table ----------------------------------------------- - $r['table@align'] = - new HTMLPurifier_AttrTransform_EnumToCSS('align', array( - 'left' => 'float:left;', - 'center' => 'margin-left:auto;margin-right:auto;', - 'right' => 'float:right;' - )); - - // @align for hr ----------------------------------------------- - $r['hr@align'] = - new HTMLPurifier_AttrTransform_EnumToCSS('align', array( - // we use both text-align and margin because these work - // for different browsers (IE and Firefox, respectively) - // and the melange makes for a pretty cross-compatible - // solution - 'left' => 'margin-left:0;margin-right:auto;text-align:left;', - 'center' => 'margin-left:auto;margin-right:auto;text-align:center;', - 'right' => 'margin-left:auto;margin-right:0;text-align:right;' - )); - - // @align for h1, h2, h3, h4, h5, h6, p, div ---------------------- - // {{{ - $align_lookup = array(); - $align_values = array('left', 'right', 'center', 'justify'); - foreach ($align_values as $v) $align_lookup[$v] = "text-align:$v;"; - // }}} - $r['h1@align'] = - $r['h2@align'] = - $r['h3@align'] = - $r['h4@align'] = - $r['h5@align'] = - $r['h6@align'] = - $r['p@align'] = - $r['div@align'] = - new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup); - - // @bgcolor for table, tr, td, th --------------------------------- - $r['table@bgcolor'] = - $r['td@bgcolor'] = - $r['th@bgcolor'] = - new HTMLPurifier_AttrTransform_BgColor(); - - // @border for img ------------------------------------------------ - $r['img@border'] = new HTMLPurifier_AttrTransform_Border(); - - // @clear for br -------------------------------------------------- - $r['br@clear'] = - new HTMLPurifier_AttrTransform_EnumToCSS('clear', array( - 'left' => 'clear:left;', - 'right' => 'clear:right;', - 'all' => 'clear:both;', - 'none' => 'clear:none;', - )); - - // @height for td, th --------------------------------------------- - $r['td@height'] = - $r['th@height'] = - new HTMLPurifier_AttrTransform_Length('height'); - - // @hspace for img ------------------------------------------------ - $r['img@hspace'] = new HTMLPurifier_AttrTransform_ImgSpace('hspace'); - - // @noshade for hr ------------------------------------------------ - // this transformation is not precise but often good enough. - // different browsers use different styles to designate noshade - $r['hr@noshade'] = - new HTMLPurifier_AttrTransform_BoolToCSS( - 'noshade', - 'color:#808080;background-color:#808080;border:0;' - ); - - // @nowrap for td, th --------------------------------------------- - $r['td@nowrap'] = - $r['th@nowrap'] = - new HTMLPurifier_AttrTransform_BoolToCSS( - 'nowrap', - 'white-space:nowrap;' - ); - - // @size for hr -------------------------------------------------- - $r['hr@size'] = new HTMLPurifier_AttrTransform_Length('size', 'height'); - - // @type for li, ol, ul ------------------------------------------- - // {{{ - $ul_types = array( - 'disc' => 'list-style-type:disc;', - 'square' => 'list-style-type:square;', - 'circle' => 'list-style-type:circle;' - ); - $ol_types = array( - '1' => 'list-style-type:decimal;', - 'i' => 'list-style-type:lower-roman;', - 'I' => 'list-style-type:upper-roman;', - 'a' => 'list-style-type:lower-alpha;', - 'A' => 'list-style-type:upper-alpha;' - ); - $li_types = $ul_types + $ol_types; - // }}} - - $r['ul@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ul_types); - $r['ol@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ol_types, true); - $r['li@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $li_types, true); - - // @vspace for img ------------------------------------------------ - $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace'); - - // @width for hr, td, th ------------------------------------------ - $r['td@width'] = - $r['th@width'] = - $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width'); - - return $r; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php deleted file mode 100755 index 9c0e031984..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php +++ /dev/null @@ -1,14 +0,0 @@ - array( - 'xml:lang' => 'LanguageCode', - ) - ); -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModuleManager.php b/oc-includes/htmlpurifier/HTMLPurifier/HTMLModuleManager.php deleted file mode 100755 index 2153086830..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/HTMLModuleManager.php +++ /dev/null @@ -1,418 +0,0 @@ -attrTypes = new HTMLPurifier_AttrTypes(); - $this->doctypes = new HTMLPurifier_DoctypeRegistry(); - - // setup basic modules - $common = array( - 'CommonAttributes', 'Text', 'Hypertext', 'List', - 'Presentation', 'Edit', 'Bdo', 'Tables', 'Image', - 'StyleAttribute', - // Unsafe: - 'Scripting', 'Object', 'Forms', - // Sorta legacy, but present in strict: - 'Name', - ); - $transitional = array('Legacy', 'Target', 'Iframe'); - $xml = array('XMLCommonAttributes'); - $non_xml = array('NonXMLCommonAttributes'); - - // setup basic doctypes - $this->doctypes->register( - 'HTML 4.01 Transitional', false, - array_merge($common, $transitional, $non_xml), - array('Tidy_Transitional', 'Tidy_Proprietary'), - array(), - '-//W3C//DTD HTML 4.01 Transitional//EN', - 'http://www.w3.org/TR/html4/loose.dtd' - ); - - $this->doctypes->register( - 'HTML 4.01 Strict', false, - array_merge($common, $non_xml), - array('Tidy_Strict', 'Tidy_Proprietary', 'Tidy_Name'), - array(), - '-//W3C//DTD HTML 4.01//EN', - 'http://www.w3.org/TR/html4/strict.dtd' - ); - - $this->doctypes->register( - 'XHTML 1.0 Transitional', true, - array_merge($common, $transitional, $xml, $non_xml), - array('Tidy_Transitional', 'Tidy_XHTML', 'Tidy_Proprietary', 'Tidy_Name'), - array(), - '-//W3C//DTD XHTML 1.0 Transitional//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' - ); - - $this->doctypes->register( - 'XHTML 1.0 Strict', true, - array_merge($common, $xml, $non_xml), - array('Tidy_Strict', 'Tidy_XHTML', 'Tidy_Strict', 'Tidy_Proprietary', 'Tidy_Name'), - array(), - '-//W3C//DTD XHTML 1.0 Strict//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd' - ); - - $this->doctypes->register( - 'XHTML 1.1', true, - // Iframe is a real XHTML 1.1 module, despite being - // "transitional"! - array_merge($common, $xml, array('Ruby', 'Iframe')), - array('Tidy_Strict', 'Tidy_XHTML', 'Tidy_Proprietary', 'Tidy_Strict', 'Tidy_Name'), // Tidy_XHTML1_1 - array(), - '-//W3C//DTD XHTML 1.1//EN', - 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd' - ); - - } - - /** - * Registers a module to the recognized module list, useful for - * overloading pre-existing modules. - * @param $module Mixed: string module name, with or without - * HTMLPurifier_HTMLModule prefix, or instance of - * subclass of HTMLPurifier_HTMLModule. - * @param $overload Boolean whether or not to overload previous modules. - * If this is not set, and you do overload a module, - * HTML Purifier will complain with a warning. - * @note This function will not call autoload, you must instantiate - * (and thus invoke) autoload outside the method. - * @note If a string is passed as a module name, different variants - * will be tested in this order: - * - Check for HTMLPurifier_HTMLModule_$name - * - Check all prefixes with $name in order they were added - * - Check for literal object name - * - Throw fatal error - * If your object name collides with an internal class, specify - * your module manually. All modules must have been included - * externally: registerModule will not perform inclusions for you! - */ - public function registerModule($module, $overload = false) { - if (is_string($module)) { - // attempt to load the module - $original_module = $module; - $ok = false; - foreach ($this->prefixes as $prefix) { - $module = $prefix . $original_module; - if (class_exists($module)) { - $ok = true; - break; - } - } - if (!$ok) { - $module = $original_module; - if (!class_exists($module)) { - trigger_error($original_module . ' module does not exist', - E_USER_ERROR); - return; - } - } - $module = new $module(); - } - if (empty($module->name)) { - trigger_error('Module instance of ' . get_class($module) . ' must have name'); - return; - } - if (!$overload && isset($this->registeredModules[$module->name])) { - trigger_error('Overloading ' . $module->name . ' without explicit overload parameter', E_USER_WARNING); - } - $this->registeredModules[$module->name] = $module; - } - - /** - * Adds a module to the current doctype by first registering it, - * and then tacking it on to the active doctype - */ - public function addModule($module) { - $this->registerModule($module); - if (is_object($module)) $module = $module->name; - $this->userModules[] = $module; - } - - /** - * Adds a class prefix that registerModule() will use to resolve a - * string name to a concrete class - */ - public function addPrefix($prefix) { - $this->prefixes[] = $prefix; - } - - /** - * Performs processing on modules, after being called you may - * use getElement() and getElements() - * @param $config Instance of HTMLPurifier_Config - */ - public function setup($config) { - - $this->trusted = $config->get('HTML.Trusted'); - - // generate - $this->doctype = $this->doctypes->make($config); - $modules = $this->doctype->modules; - - // take out the default modules that aren't allowed - $lookup = $config->get('HTML.AllowedModules'); - $special_cases = $config->get('HTML.CoreModules'); - - if (is_array($lookup)) { - foreach ($modules as $k => $m) { - if (isset($special_cases[$m])) continue; - if (!isset($lookup[$m])) unset($modules[$k]); - } - } - - // custom modules - if ($config->get('HTML.Proprietary')) { - $modules[] = 'Proprietary'; - } - if ($config->get('HTML.SafeObject')) { - $modules[] = 'SafeObject'; - } - if ($config->get('HTML.SafeEmbed')) { - $modules[] = 'SafeEmbed'; - } - if ($config->get('HTML.SafeScripting') !== array()) { - $modules[] = 'SafeScripting'; - } - if ($config->get('HTML.Nofollow')) { - $modules[] = 'Nofollow'; - } - if ($config->get('HTML.TargetBlank')) { - $modules[] = 'TargetBlank'; - } - - // merge in custom modules - $modules = array_merge($modules, $this->userModules); - - foreach ($modules as $module) { - $this->processModule($module); - $this->modules[$module]->setup($config); - } - - foreach ($this->doctype->tidyModules as $module) { - $this->processModule($module); - $this->modules[$module]->setup($config); - } - - // prepare any injectors - foreach ($this->modules as $module) { - $n = array(); - foreach ($module->info_injector as $i => $injector) { - if (!is_object($injector)) { - $class = "HTMLPurifier_Injector_$injector"; - $injector = new $class; - } - $n[$injector->name] = $injector; - } - $module->info_injector = $n; - } - - // setup lookup table based on all valid modules - foreach ($this->modules as $module) { - foreach ($module->info as $name => $def) { - if (!isset($this->elementLookup[$name])) { - $this->elementLookup[$name] = array(); - } - $this->elementLookup[$name][] = $module->name; - } - } - - // note the different choice - $this->contentSets = new HTMLPurifier_ContentSets( - // content set assembly deals with all possible modules, - // not just ones deemed to be "safe" - $this->modules - ); - $this->attrCollections = new HTMLPurifier_AttrCollections( - $this->attrTypes, - // there is no way to directly disable a global attribute, - // but using AllowedAttributes or simply not including - // the module in your custom doctype should be sufficient - $this->modules - ); - } - - /** - * Takes a module and adds it to the active module collection, - * registering it if necessary. - */ - public function processModule($module) { - if (!isset($this->registeredModules[$module]) || is_object($module)) { - $this->registerModule($module); - } - $this->modules[$module] = $this->registeredModules[$module]; - } - - /** - * Retrieves merged element definitions. - * @return Array of HTMLPurifier_ElementDef - */ - public function getElements() { - - $elements = array(); - foreach ($this->modules as $module) { - if (!$this->trusted && !$module->safe) continue; - foreach ($module->info as $name => $v) { - if (isset($elements[$name])) continue; - $elements[$name] = $this->getElement($name); - } - } - - // remove dud elements, this happens when an element that - // appeared to be safe actually wasn't - foreach ($elements as $n => $v) { - if ($v === false) unset($elements[$n]); - } - - return $elements; - - } - - /** - * Retrieves a single merged element definition - * @param $name Name of element - * @param $trusted Boolean trusted overriding parameter: set to true - * if you want the full version of an element - * @return Merged HTMLPurifier_ElementDef - * @note You may notice that modules are getting iterated over twice (once - * in getElements() and once here). This - * is because - */ - public function getElement($name, $trusted = null) { - - if (!isset($this->elementLookup[$name])) { - return false; - } - - // setup global state variables - $def = false; - if ($trusted === null) $trusted = $this->trusted; - - // iterate through each module that has registered itself to this - // element - foreach($this->elementLookup[$name] as $module_name) { - - $module = $this->modules[$module_name]; - - // refuse to create/merge from a module that is deemed unsafe-- - // pretend the module doesn't exist--when trusted mode is not on. - if (!$trusted && !$module->safe) { - continue; - } - - // clone is used because, ideally speaking, the original - // definition should not be modified. Usually, this will - // make no difference, but for consistency's sake - $new_def = clone $module->info[$name]; - - if (!$def && $new_def->standalone) { - $def = $new_def; - } elseif ($def) { - // This will occur even if $new_def is standalone. In practice, - // this will usually result in a full replacement. - $def->mergeIn($new_def); - } else { - // :TODO: - // non-standalone definitions that don't have a standalone - // to merge into could be deferred to the end - // HOWEVER, it is perfectly valid for a non-standalone - // definition to lack a standalone definition, even - // after all processing: this allows us to safely - // specify extra attributes for elements that may not be - // enabled all in one place. In particular, this might - // be the case for trusted elements. WARNING: care must - // be taken that the /extra/ definitions are all safe. - continue; - } - - // attribute value expansions - $this->attrCollections->performInclusions($def->attr); - $this->attrCollections->expandIdentifiers($def->attr, $this->attrTypes); - - // descendants_are_inline, for ChildDef_Chameleon - if (is_string($def->content_model) && - strpos($def->content_model, 'Inline') !== false) { - if ($name != 'del' && $name != 'ins') { - // this is for you, ins/del - $def->descendants_are_inline = true; - } - } - - $this->contentSets->generateChildDef($def, $module); - } - - // This can occur if there is a blank definition, but no base to - // mix it in with - if (!$def) return false; - - // add information on required attributes - foreach ($def->attr as $attr_name => $attr_def) { - if ($attr_def->required) { - $def->required_attr[] = $attr_name; - } - } - - return $def; - - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/IDAccumulator.php b/oc-includes/htmlpurifier/HTMLPurifier/IDAccumulator.php deleted file mode 100755 index 73215295a5..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/IDAccumulator.php +++ /dev/null @@ -1,53 +0,0 @@ -load($config->get('Attr.IDBlacklist')); - return $id_accumulator; - } - - /** - * Add an ID to the lookup table. - * @param $id ID to be added. - * @return Bool status, true if success, false if there's a dupe - */ - public function add($id) { - if (isset($this->ids[$id])) return false; - return $this->ids[$id] = true; - } - - /** - * Load a list of IDs into the lookup table - * @param $array_of_ids Array of IDs to load - * @note This function doesn't care about duplicates - */ - public function load($array_of_ids) { - foreach ($array_of_ids as $id) { - $this->ids[$id] = true; - } - } - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Injector.php b/oc-includes/htmlpurifier/HTMLPurifier/Injector.php deleted file mode 100755 index 5922f81305..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Injector.php +++ /dev/null @@ -1,239 +0,0 @@ -processToken() - * documentation. - * - * @todo Allow injectors to request a re-run on their output. This - * would help if an operation is recursive. - */ -abstract class HTMLPurifier_Injector -{ - - /** - * Advisory name of injector, this is for friendly error messages - */ - public $name; - - /** - * Instance of HTMLPurifier_HTMLDefinition - */ - protected $htmlDefinition; - - /** - * Reference to CurrentNesting variable in Context. This is an array - * list of tokens that we are currently "inside" - */ - protected $currentNesting; - - /** - * Reference to InputTokens variable in Context. This is an array - * list of the input tokens that are being processed. - */ - protected $inputTokens; - - /** - * Reference to InputIndex variable in Context. This is an integer - * array index for $this->inputTokens that indicates what token - * is currently being processed. - */ - protected $inputIndex; - - /** - * Array of elements and attributes this injector creates and therefore - * need to be allowed by the definition. Takes form of - * array('element' => array('attr', 'attr2'), 'element2') - */ - public $needed = array(); - - /** - * Index of inputTokens to rewind to. - */ - protected $rewind = false; - - /** - * Rewind to a spot to re-perform processing. This is useful if you - * deleted a node, and now need to see if this change affected any - * earlier nodes. Rewinding does not affect other injectors, and can - * result in infinite loops if not used carefully. - * @warning HTML Purifier will prevent you from fast-forwarding with this - * function. - */ - public function rewind($index) { - $this->rewind = $index; - } - - /** - * Retrieves rewind, and then unsets it. - */ - public function getRewind() { - $r = $this->rewind; - $this->rewind = false; - return $r; - } - - /** - * Prepares the injector by giving it the config and context objects: - * this allows references to important variables to be made within - * the injector. This function also checks if the HTML environment - * will work with the Injector (see checkNeeded()). - * @param $config Instance of HTMLPurifier_Config - * @param $context Instance of HTMLPurifier_Context - * @return Boolean false if success, string of missing needed element/attribute if failure - */ - public function prepare($config, $context) { - $this->htmlDefinition = $config->getHTMLDefinition(); - // Even though this might fail, some unit tests ignore this and - // still test checkNeeded, so be careful. Maybe get rid of that - // dependency. - $result = $this->checkNeeded($config); - if ($result !== false) return $result; - $this->currentNesting =& $context->get('CurrentNesting'); - $this->inputTokens =& $context->get('InputTokens'); - $this->inputIndex =& $context->get('InputIndex'); - return false; - } - - /** - * This function checks if the HTML environment - * will work with the Injector: if p tags are not allowed, the - * Auto-Paragraphing injector should not be enabled. - * @param $config Instance of HTMLPurifier_Config - * @param $context Instance of HTMLPurifier_Context - * @return Boolean false if success, string of missing needed element/attribute if failure - */ - public function checkNeeded($config) { - $def = $config->getHTMLDefinition(); - foreach ($this->needed as $element => $attributes) { - if (is_int($element)) $element = $attributes; - if (!isset($def->info[$element])) return $element; - if (!is_array($attributes)) continue; - foreach ($attributes as $name) { - if (!isset($def->info[$element]->attr[$name])) return "$element.$name"; - } - } - return false; - } - - /** - * Tests if the context node allows a certain element - * @param $name Name of element to test for - * @return True if element is allowed, false if it is not - */ - public function allowsElement($name) { - if (!empty($this->currentNesting)) { - $parent_token = array_pop($this->currentNesting); - $this->currentNesting[] = $parent_token; - $parent = $this->htmlDefinition->info[$parent_token->name]; - } else { - $parent = $this->htmlDefinition->info_parent_def; - } - if (!isset($parent->child->elements[$name]) || isset($parent->excludes[$name])) { - return false; - } - // check for exclusion - for ($i = count($this->currentNesting) - 2; $i >= 0; $i--) { - $node = $this->currentNesting[$i]; - $def = $this->htmlDefinition->info[$node->name]; - if (isset($def->excludes[$name])) return false; - } - return true; - } - - /** - * Iterator function, which starts with the next token and continues until - * you reach the end of the input tokens. - * @warning Please prevent previous references from interfering with this - * functions by setting $i = null beforehand! - * @param &$i Current integer index variable for inputTokens - * @param &$current Current token variable. Do NOT use $token, as that variable is also a reference - */ - protected function forward(&$i, &$current) { - if ($i === null) $i = $this->inputIndex + 1; - else $i++; - if (!isset($this->inputTokens[$i])) return false; - $current = $this->inputTokens[$i]; - return true; - } - - /** - * Similar to _forward, but accepts a third parameter $nesting (which - * should be initialized at 0) and stops when we hit the end tag - * for the node $this->inputIndex starts in. - */ - protected function forwardUntilEndToken(&$i, &$current, &$nesting) { - $result = $this->forward($i, $current); - if (!$result) return false; - if ($nesting === null) $nesting = 0; - if ($current instanceof HTMLPurifier_Token_Start) $nesting++; - elseif ($current instanceof HTMLPurifier_Token_End) { - if ($nesting <= 0) return false; - $nesting--; - } - return true; - } - - /** - * Iterator function, starts with the previous token and continues until - * you reach the beginning of input tokens. - * @warning Please prevent previous references from interfering with this - * functions by setting $i = null beforehand! - * @param &$i Current integer index variable for inputTokens - * @param &$current Current token variable. Do NOT use $token, as that variable is also a reference - */ - protected function backward(&$i, &$current) { - if ($i === null) $i = $this->inputIndex - 1; - else $i--; - if ($i < 0) return false; - $current = $this->inputTokens[$i]; - return true; - } - - /** - * Initializes the iterator at the current position. Use in a do {} while; - * loop to force the _forward and _backward functions to start at the - * current location. - * @warning Please prevent previous references from interfering with this - * functions by setting $i = null beforehand! - * @param &$i Current integer index variable for inputTokens - * @param &$current Current token variable. Do NOT use $token, as that variable is also a reference - */ - protected function current(&$i, &$current) { - if ($i === null) $i = $this->inputIndex; - $current = $this->inputTokens[$i]; - } - - /** - * Handler that is called when a text token is processed - */ - public function handleText(&$token) {} - - /** - * Handler that is called when a start or empty token is processed - */ - public function handleElement(&$token) {} - - /** - * Handler that is called when an end token is processed - */ - public function handleEnd(&$token) { - $this->notifyEnd($token); - } - - /** - * Notifier that is called when an end token is processed - * @note This differs from handlers in that the token is read-only - * @deprecated - */ - public function notifyEnd($token) {} - - -} - -// vim: et sw=4 sts=4 diff --git a/oc-includes/htmlpurifier/HTMLPurifier/Injector/AutoParagraph.php b/oc-includes/htmlpurifier/HTMLPurifier/Injector/AutoParagraph.php deleted file mode 100755 index afa7608924..0000000000 --- a/oc-includes/htmlpurifier/HTMLPurifier/Injector/AutoParagraph.php +++ /dev/null @@ -1,345 +0,0 @@ -armor['MakeWellFormed_TagClosedError'] = true; - return $par; - } - - public function handleText(&$token) { - $text = $token->data; - // Does the current parent allow

tags? - if ($this->allowsElement('p')) { - if (empty($this->currentNesting) || strpos($text, "\n\n") !== false) { - // Note that we have differing behavior when dealing with text - // in the anonymous root node, or a node inside the document. - // If the text as a double-newline, the treatment is the same; - // if it doesn't, see the next if-block if you're in the document. - - $i = $nesting = null; - if (!$this->forwardUntilEndToken($i, $current, $nesting) && $token->is_whitespace) { - // State 1.1: ... ^ (whitespace, then document end) - // ---- - // This is a degenerate case - } else { - if (!$token->is_whitespace || $this->_isInline($current)) { - // State 1.2: PAR1 - // ---- - - // State 1.3: PAR1\n\nPAR2 - // ------------ - - // State 1.4:

PAR1\n\nPAR2 (see State 2) - // ------------ - $token = array($this->_pStart()); - $this->_splitText($text, $token); - } else { - // State 1.5: \n
- // -- - } - } - } else { - // State 2:
PAR1... (similar to 1.4) - // ---- - - // We're in an element that allows paragraph tags, but we're not - // sure if we're going to need them. - if ($this->_pLookAhead()) { - // State 2.1:
PAR1PAR1\n\nPAR2 - // ---- - // Note: This will always be the first child, since any - // previous inline element would have triggered this very - // same routine, and found the double newline. One possible - // exception would be a comment. - $token = array($this->_pStart(), $token); - } else { - // State 2.2.1:
PAR1
- // ---- - - // State 2.2.2:
PAR1PAR1
- // ---- - } - } - // Is the current parent a

tag? - } elseif ( - !empty($this->currentNesting) && - $this->currentNesting[count($this->currentNesting)-1]->name == 'p' - ) { - // State 3.1: ...

PAR1 - // ---- - - // State 3.2: ...

PAR1\n\nPAR2 - // ------------ - $token = array(); - $this->_splitText($text, $token); - // Abort! - } else { - // State 4.1: ...PAR1 - // ---- - - // State 4.2: ...PAR1\n\nPAR2 - // ------------ - } - } - - public function handleElement(&$token) { - // We don't have to check if we're already in a

tag for block - // tokens, because the tag would have been autoclosed by MakeWellFormed. - if ($this->allowsElement('p')) { - if (!empty($this->currentNesting)) { - if ($this->_isInline($token)) { - // State 1:

... - // --- - - // Check if this token is adjacent to the parent token - // (seek backwards until token isn't whitespace) - $i = null; - $this->backward($i, $prev); - - if (!$prev instanceof HTMLPurifier_Token_Start) { - // Token wasn't adjacent - - if ( - $prev instanceof HTMLPurifier_Token_Text && - substr($prev->data, -2) === "\n\n" - ) { - // State 1.1.4:

PAR1

\n\n - // --- - - // Quite frankly, this should be handled by splitText - $token = array($this->_pStart(), $token); - } else { - // State 1.1.1:

PAR1

- // --- - - // State 1.1.2:

- // --- - - // State 1.1.3:
PAR - // --- - } - - } else { - // State 1.2.1:
- // --- - - // Lookahead to see if

is needed. - if ($this->_pLookAhead()) { - // State 1.3.1:

PAR1\n\nPAR2 - // --- - $token = array($this->_pStart(), $token); - } else { - // State 1.3.2:
PAR1
- // --- - - // State 1.3.3:
PAR1
\n\n
- // --- - } - } - } else { - // State 2.3: ...
- // ----- - } - } else { - if ($this->_isInline($token)) { - // State 3.1: - // --- - // This is where the {p} tag is inserted, not reflected in - // inputTokens yet, however. - $token = array($this->_pStart(), $token); - } else { - // State 3.2:
- // ----- - } - - $i = null; - if ($this->backward($i, $prev)) { - if ( - !$prev instanceof HTMLPurifier_Token_Text - ) { - // State 3.1.1: ...

{p} - // --- - - // State 3.2.1: ...

- // ----- - - if (!is_array($token)) $token = array($token); - array_unshift($token, new HTMLPurifier_Token_Text("\n\n")); - } else { - // State 3.1.2: ...

\n\n{p} - // --- - - // State 3.2.2: ...

\n\n
- // ----- - - // Note: PAR cannot occur because PAR would have been - // wrapped in

tags. - } - } - } - } else { - // State 2.2: