From 17ff6b67f36bb1645dcbf8d7ba4574f8666a0963 Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 1 Jan 2020 13:02:37 +0800 Subject: [PATCH] =?UTF-8?q?KERNEL-1298=20=E6=89=93=E5=8C=85jdk7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.third_step0-jdk11.gradle | 117 ++++++ build.third_step1-jdk11.gradle | 4 +- build.third_step1.gradle | 4 +- build.third_step2-jdk11.gradle | 130 ++++++ build.third_step3-jdk11.gradle | 81 ++++ build.third_step4-jdk11.gradle | 84 ++++ build.third_step5-jdk11.gradle | 79 ++++ build.third_step6-jdk11.gradle | 76 ++++ build.third_step7-jdk11.gradle | 77 ++++ .../xmlgraphics-batik/lib/xml-apis-1.3.04.jar | Bin 194354 -> 0 bytes .../lib/xml-apis-ext-1.3.04.jar | Bin 85686 -> 0 bytes .../org/w3c/css/sac/AttributeCondition.java | 68 ++++ .../java/org/w3c/css/sac/CSSException.java | 142 +++++++ .../org/w3c/css/sac/CSSParseException.java | 173 ++++++++ .../w3c/css/sac/CharacterDataSelector.java | 24 ++ .../org/w3c/css/sac/CombinatorCondition.java | 28 ++ .../main/java/org/w3c/css/sac/Condition.java | 140 +++++++ .../org/w3c/css/sac/ConditionFactory.java | 197 ++++++++++ .../org/w3c/css/sac/ConditionalSelector.java | 28 ++ .../org/w3c/css/sac/ContentCondition.java | 21 + .../org/w3c/css/sac/DescendantSelector.java | 28 ++ .../java/org/w3c/css/sac/DocumentHandler.java | 191 +++++++++ .../java/org/w3c/css/sac/ElementSelector.java | 41 ++ .../java/org/w3c/css/sac/ErrorHandler.java | 108 +++++ .../java/org/w3c/css/sac/InputSource.java | 258 ++++++++++++ .../java/org/w3c/css/sac/LangCondition.java | 21 + .../java/org/w3c/css/sac/LexicalUnit.java | 370 ++++++++++++++++++ .../main/java/org/w3c/css/sac/Locator.java | 70 ++++ .../org/w3c/css/sac/NegativeCondition.java | 22 ++ .../org/w3c/css/sac/NegativeSelector.java | 22 ++ .../src/main/java/org/w3c/css/sac/Parser.java | 221 +++++++++++ .../org/w3c/css/sac/PositionalCondition.java | 36 ++ .../sac/ProcessingInstructionSelector.java | 31 ++ .../java/org/w3c/css/sac/SACMediaList.java | 27 ++ .../main/java/org/w3c/css/sac/Selector.java | 143 +++++++ .../java/org/w3c/css/sac/SelectorFactory.java | 168 ++++++++ .../java/org/w3c/css/sac/SelectorList.java | 32 ++ .../java/org/w3c/css/sac/SiblingSelector.java | 36 ++ .../java/org/w3c/css/sac/SimpleSelector.java | 21 + .../w3c/css/sac/helpers/ParserFactory.java | 40 ++ .../java/org/w3c/dom/ElementTraversal.java | 64 +++ .../org/w3c/dom/smil/ElementTimeControl.java | 184 +++++++++ .../main/java/org/w3c/dom/smil/TimeEvent.java | 102 +++++ .../w3c/dom/svg/EventListenerInitializer.java | 45 +++ .../java/org/w3c/dom/svg/GetSVGDocument.java | 9 + .../java/org/w3c/dom/svg/SVGAElement.java | 16 + .../w3c/dom/svg/SVGAltGlyphDefElement.java | 6 + .../org/w3c/dom/svg/SVGAltGlyphElement.java | 15 + .../w3c/dom/svg/SVGAltGlyphItemElement.java | 6 + .../main/java/org/w3c/dom/svg/SVGAngle.java | 27 ++ .../w3c/dom/svg/SVGAnimateColorElement.java | 6 + .../org/w3c/dom/svg/SVGAnimateElement.java | 6 + .../w3c/dom/svg/SVGAnimateMotionElement.java | 6 + .../dom/svg/SVGAnimateTransformElement.java | 6 + .../org/w3c/dom/svg/SVGAnimatedAngle.java | 7 + .../org/w3c/dom/svg/SVGAnimatedBoolean.java | 11 + .../w3c/dom/svg/SVGAnimatedEnumeration.java | 11 + .../org/w3c/dom/svg/SVGAnimatedInteger.java | 11 + .../org/w3c/dom/svg/SVGAnimatedLength.java | 7 + .../w3c/dom/svg/SVGAnimatedLengthList.java | 7 + .../org/w3c/dom/svg/SVGAnimatedNumber.java | 11 + .../w3c/dom/svg/SVGAnimatedNumberList.java | 7 + .../org/w3c/dom/svg/SVGAnimatedPathData.java | 9 + .../org/w3c/dom/svg/SVGAnimatedPoints.java | 7 + .../svg/SVGAnimatedPreserveAspectRatio.java | 7 + .../java/org/w3c/dom/svg/SVGAnimatedRect.java | 7 + .../org/w3c/dom/svg/SVGAnimatedString.java | 11 + .../w3c/dom/svg/SVGAnimatedTransformList.java | 7 + .../org/w3c/dom/svg/SVGAnimationElement.java | 20 + .../main/java/org/w3c/dom/svg/SVGCSSRule.java | 10 + .../org/w3c/dom/svg/SVGCircleElement.java | 17 + .../org/w3c/dom/svg/SVGClipPathElement.java | 13 + .../main/java/org/w3c/dom/svg/SVGColor.java | 25 ++ .../w3c/dom/svg/SVGColorProfileElement.java | 19 + .../org/w3c/dom/svg/SVGColorProfileRule.java | 18 + .../SVGComponentTransferFunctionElement.java | 21 + .../org/w3c/dom/svg/SVGCursorElement.java | 11 + .../w3c/dom/svg/SVGDefinitionSrcElement.java | 6 + .../java/org/w3c/dom/svg/SVGDefsElement.java | 14 + .../java/org/w3c/dom/svg/SVGDescElement.java | 8 + .../java/org/w3c/dom/svg/SVGDocument.java | 15 + .../main/java/org/w3c/dom/svg/SVGElement.java | 17 + .../org/w3c/dom/svg/SVGElementInstance.java | 16 + .../w3c/dom/svg/SVGElementInstanceList.java | 8 + .../org/w3c/dom/svg/SVGEllipseElement.java | 18 + .../main/java/org/w3c/dom/svg/SVGEvent.java | 8 + .../java/org/w3c/dom/svg/SVGException.java | 13 + .../dom/svg/SVGExternalResourcesRequired.java | 6 + .../org/w3c/dom/svg/SVGFEBlendElement.java | 18 + .../w3c/dom/svg/SVGFEColorMatrixElement.java | 17 + .../svg/SVGFEComponentTransferElement.java | 8 + .../w3c/dom/svg/SVGFECompositeElement.java | 23 ++ .../dom/svg/SVGFEConvolveMatrixElement.java | 24 ++ .../dom/svg/SVGFEDiffuseLightingElement.java | 11 + .../dom/svg/SVGFEDisplacementMapElement.java | 19 + .../w3c/dom/svg/SVGFEDistantLightElement.java | 8 + .../org/w3c/dom/svg/SVGFEFloodElement.java | 8 + .../org/w3c/dom/svg/SVGFEFuncAElement.java | 6 + .../org/w3c/dom/svg/SVGFEFuncBElement.java | 6 + .../org/w3c/dom/svg/SVGFEFuncGElement.java | 6 + .../org/w3c/dom/svg/SVGFEFuncRElement.java | 6 + .../w3c/dom/svg/SVGFEGaussianBlurElement.java | 12 + .../org/w3c/dom/svg/SVGFEImageElement.java | 13 + .../org/w3c/dom/svg/SVGFEMergeElement.java | 7 + .../w3c/dom/svg/SVGFEMergeNodeElement.java | 7 + .../w3c/dom/svg/SVGFEMorphologyElement.java | 16 + .../org/w3c/dom/svg/SVGFEOffsetElement.java | 10 + .../w3c/dom/svg/SVGFEPointLightElement.java | 9 + .../dom/svg/SVGFESpecularLightingElement.java | 11 + .../w3c/dom/svg/SVGFESpotLightElement.java | 14 + .../org/w3c/dom/svg/SVGFETileElement.java | 8 + .../w3c/dom/svg/SVGFETurbulenceElement.java | 22 ++ .../org/w3c/dom/svg/SVGFilterElement.java | 21 + .../SVGFilterPrimitiveStandardAttributes.java | 11 + .../java/org/w3c/dom/svg/SVGFitToViewBox.java | 7 + .../java/org/w3c/dom/svg/SVGFontElement.java | 8 + .../org/w3c/dom/svg/SVGFontFaceElement.java | 6 + .../w3c/dom/svg/SVGFontFaceFormatElement.java | 6 + .../w3c/dom/svg/SVGFontFaceNameElement.java | 6 + .../w3c/dom/svg/SVGFontFaceSrcElement.java | 6 + .../w3c/dom/svg/SVGFontFaceUriElement.java | 6 + .../w3c/dom/svg/SVGForeignObjectElement.java | 18 + .../java/org/w3c/dom/svg/SVGGElement.java | 14 + .../java/org/w3c/dom/svg/SVGGlyphElement.java | 7 + .../org/w3c/dom/svg/SVGGlyphRefElement.java | 28 ++ .../org/w3c/dom/svg/SVGGradientElement.java | 19 + .../java/org/w3c/dom/svg/SVGHKernElement.java | 6 + .../java/org/w3c/dom/svg/SVGICCColor.java | 11 + .../java/org/w3c/dom/svg/SVGImageElement.java | 20 + .../java/org/w3c/dom/svg/SVGLangSpace.java | 13 + .../main/java/org/w3c/dom/svg/SVGLength.java | 33 ++ .../java/org/w3c/dom/svg/SVGLengthList.java | 23 ++ .../java/org/w3c/dom/svg/SVGLineElement.java | 18 + .../w3c/dom/svg/SVGLinearGradientElement.java | 10 + .../java/org/w3c/dom/svg/SVGLocatable.java | 13 + .../java/org/w3c/dom/svg/SVGMPathElement.java | 8 + .../org/w3c/dom/svg/SVGMarkerElement.java | 29 ++ .../java/org/w3c/dom/svg/SVGMaskElement.java | 17 + .../main/java/org/w3c/dom/svg/SVGMatrix.java | 39 ++ .../org/w3c/dom/svg/SVGMetadataElement.java | 6 + .../w3c/dom/svg/SVGMissingGlyphElement.java | 7 + .../main/java/org/w3c/dom/svg/SVGNumber.java | 10 + .../java/org/w3c/dom/svg/SVGNumberList.java | 23 ++ .../main/java/org/w3c/dom/svg/SVGPaint.java | 25 ++ .../java/org/w3c/dom/svg/SVGPathElement.java | 39 ++ .../main/java/org/w3c/dom/svg/SVGPathSeg.java | 29 ++ .../org/w3c/dom/svg/SVGPathSegArcAbs.java | 29 ++ .../org/w3c/dom/svg/SVGPathSegArcRel.java | 29 ++ .../org/w3c/dom/svg/SVGPathSegClosePath.java | 6 + .../dom/svg/SVGPathSegCurvetoCubicAbs.java | 26 ++ .../dom/svg/SVGPathSegCurvetoCubicRel.java | 26 ++ .../svg/SVGPathSegCurvetoCubicSmoothAbs.java | 20 + .../svg/SVGPathSegCurvetoCubicSmoothRel.java | 20 + .../svg/SVGPathSegCurvetoQuadraticAbs.java | 20 + .../svg/SVGPathSegCurvetoQuadraticRel.java | 20 + .../SVGPathSegCurvetoQuadraticSmoothAbs.java | 14 + .../SVGPathSegCurvetoQuadraticSmoothRel.java | 14 + .../org/w3c/dom/svg/SVGPathSegLinetoAbs.java | 14 + .../svg/SVGPathSegLinetoHorizontalAbs.java | 11 + .../svg/SVGPathSegLinetoHorizontalRel.java | 11 + .../org/w3c/dom/svg/SVGPathSegLinetoRel.java | 14 + .../dom/svg/SVGPathSegLinetoVerticalAbs.java | 11 + .../dom/svg/SVGPathSegLinetoVerticalRel.java | 11 + .../java/org/w3c/dom/svg/SVGPathSegList.java | 23 ++ .../org/w3c/dom/svg/SVGPathSegMovetoAbs.java | 14 + .../org/w3c/dom/svg/SVGPathSegMovetoRel.java | 14 + .../org/w3c/dom/svg/SVGPatternElement.java | 20 + .../main/java/org/w3c/dom/svg/SVGPoint.java | 15 + .../java/org/w3c/dom/svg/SVGPointList.java | 23 ++ .../org/w3c/dom/svg/SVGPolygonElement.java | 15 + .../org/w3c/dom/svg/SVGPolylineElement.java | 15 + .../w3c/dom/svg/SVGPreserveAspectRatio.java | 30 ++ .../w3c/dom/svg/SVGRadialGradientElement.java | 11 + .../main/java/org/w3c/dom/svg/SVGRect.java | 19 + .../java/org/w3c/dom/svg/SVGRectElement.java | 20 + .../org/w3c/dom/svg/SVGRenderingIntent.java | 12 + .../java/org/w3c/dom/svg/SVGSVGElement.java | 73 ++++ .../org/w3c/dom/svg/SVGScriptElement.java | 13 + .../java/org/w3c/dom/svg/SVGSetElement.java | 6 + .../java/org/w3c/dom/svg/SVGStopElement.java | 8 + .../java/org/w3c/dom/svg/SVGStringList.java | 23 ++ .../java/org/w3c/dom/svg/SVGStylable.java | 12 + .../java/org/w3c/dom/svg/SVGStyleElement.java | 20 + .../org/w3c/dom/svg/SVGSwitchElement.java | 14 + .../org/w3c/dom/svg/SVGSymbolElement.java | 13 + .../java/org/w3c/dom/svg/SVGTRefElement.java | 7 + .../java/org/w3c/dom/svg/SVGTSpanElement.java | 6 + .../main/java/org/w3c/dom/svg/SVGTests.java | 10 + .../w3c/dom/svg/SVGTextContentElement.java | 37 ++ .../java/org/w3c/dom/svg/SVGTextElement.java | 7 + .../org/w3c/dom/svg/SVGTextPathElement.java | 19 + .../dom/svg/SVGTextPositioningElement.java | 11 + .../java/org/w3c/dom/svg/SVGTitleElement.java | 8 + .../java/org/w3c/dom/svg/SVGTransform.java | 24 ++ .../org/w3c/dom/svg/SVGTransformList.java | 25 ++ .../org/w3c/dom/svg/SVGTransformable.java | 7 + .../java/org/w3c/dom/svg/SVGURIReference.java | 6 + .../java/org/w3c/dom/svg/SVGUnitTypes.java | 9 + .../java/org/w3c/dom/svg/SVGUseElement.java | 21 + .../java/org/w3c/dom/svg/SVGVKernElement.java | 6 + .../java/org/w3c/dom/svg/SVGViewElement.java | 10 + .../java/org/w3c/dom/svg/SVGViewSpec.java | 13 + .../java/org/w3c/dom/svg/SVGZoomAndPan.java | 15 + .../java/org/w3c/dom/svg/SVGZoomEvent.java | 13 + 204 files changed, 6050 insertions(+), 4 deletions(-) create mode 100644 build.third_step0-jdk11.gradle create mode 100644 build.third_step2-jdk11.gradle create mode 100644 build.third_step3-jdk11.gradle create mode 100644 build.third_step4-jdk11.gradle create mode 100644 build.third_step5-jdk11.gradle create mode 100644 build.third_step6-jdk11.gradle create mode 100644 build.third_step7-jdk11.gradle delete mode 100644 fine-xmlgraphics/xmlgraphics-batik/lib/xml-apis-1.3.04.jar delete mode 100644 fine-xmlgraphics/xmlgraphics-batik/lib/xml-apis-ext-1.3.04.jar create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/AttributeCondition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSException.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSParseException.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CharacterDataSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CombinatorCondition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Condition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionFactory.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionalSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ContentCondition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DescendantSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DocumentHandler.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ElementSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ErrorHandler.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/InputSource.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LangCondition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LexicalUnit.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Locator.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeCondition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Parser.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/PositionalCondition.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ProcessingInstructionSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SACMediaList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Selector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorFactory.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SiblingSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SimpleSelector.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/helpers/ParserFactory.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/ElementTraversal.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/ElementTimeControl.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/TimeEvent.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/EventListenerInitializer.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/GetSVGDocument.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphDefElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphItemElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAngle.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateColorElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateMotionElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateTransformElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedAngle.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedBoolean.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedEnumeration.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedInteger.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLength.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLengthList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumber.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumberList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPathData.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPoints.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPreserveAspectRatio.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedRect.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedString.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedTransformList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimationElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCSSRule.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCircleElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGClipPathElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColor.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileRule.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGComponentTransferFunctionElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCursorElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefinitionSrcElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefsElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDescElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDocument.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstance.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstanceList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEllipseElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEvent.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGException.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGExternalResourcesRequired.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEBlendElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEColorMatrixElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEComponentTransferElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFECompositeElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEConvolveMatrixElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDiffuseLightingElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDisplacementMapElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDistantLightElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFloodElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncAElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncBElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncGElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncRElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEGaussianBlurElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEImageElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeNodeElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMorphologyElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEOffsetElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEPointLightElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpecularLightingElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpotLightElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETileElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETurbulenceElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterPrimitiveStandardAttributes.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFitToViewBox.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceFormatElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceNameElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceSrcElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceUriElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGForeignObjectElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphRefElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGradientElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGHKernElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGICCColor.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGImageElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLangSpace.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLength.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLengthList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLineElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLinearGradientElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLocatable.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMPathElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMarkerElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMaskElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMatrix.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMetadataElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMissingGlyphElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumber.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumberList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPaint.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSeg.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegClosePath.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoAbs.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoRel.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPatternElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPoint.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPointList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolygonElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolylineElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPreserveAspectRatio.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRadialGradientElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRect.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRectElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRenderingIntent.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSVGElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGScriptElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSetElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStopElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStringList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStylable.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStyleElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSwitchElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSymbolElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTRefElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTSpanElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTests.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextContentElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPathElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPositioningElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTitleElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransform.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformList.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformable.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGURIReference.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUnitTypes.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUseElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGVKernElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewElement.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewSpec.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomAndPan.java create mode 100644 fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomEvent.java diff --git a/build.third_step0-jdk11.gradle b/build.third_step0-jdk11.gradle new file mode 100644 index 000000000..8885765cd --- /dev/null +++ b/build.third_step0-jdk11.gradle @@ -0,0 +1,117 @@ +apply plugin: 'java' +apply plugin: 'maven-publish' +def classesDir='build/classes/main' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file(classesDir) +} + +configurations.all { + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' +} +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + + +//解压lib下的jar到classes文件夹 +version='10.0' +jar{ + baseName="fine-third" + zip64 true +} + +repositories { + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + + +sourceSets{ + main{ + java{ + srcDirs=[] + } + } + +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) + +def srcDir="." +def MVN_BRANCH = branchVariable.toUpperCase() + +// @branch - 分支信息 +def maven_version="${version}-${MVN_BRANCH}-SNAPSHOT" +def jar_version = version + +configurations { + thirdjar + sigar +} + +dependencies { + // thirdjar "com.fr.third:fine-third-base:10.0-BASE-SNAPSHOT" + // sigar "com.fr.third:sigar:1.6.0" + testCompile 'junit:junit:4.12' +} + + +publishing { + publications { + third(MavenPublication) { + groupId "com.fr.third" + artifactId "fine-third" + version maven_version + from components.java + } + } + repositories { + maven { + + url "http://mvn.finedevelop.com/repository/fanruan/" + credentials { + username = findProperty("NEXUS_USERNAME") + password = findProperty("NEXUS_PASSWORD") + } + + } + } +} + +task unpack(type:Copy) { + delete classesDir + destinationDir=file(classesDir) + println(configurations.thirdjar.singleFile) + // from { + // zipTree(configurations.thirdjar.singleFile) + // } + // from { + // zipTree(configurations.sigar.singleFile) + // } + from { + zipTree("fine-quartz/lib/c3p0-0.9.1.1.jar") + } + from { + zipTree("fine-spring/lib/aopalliance-1.0.jar") + } + from { + zipTree("fine-poi/lib/curvesapi-1.03.jar") + } + from { + zipTree("fine-freehep/lib/fine-font-10.0.jar") + } + fileTree(dir:"build/libs",include:"**/*.jar").each { + File file -> from { + zipTree(file) + } + } + +} + +jar.dependsOn unpack + diff --git a/build.third_step1-jdk11.gradle b/build.third_step1-jdk11.gradle index 08d34bf78..5879f42b9 100644 --- a/build.third_step1-jdk11.gradle +++ b/build.third_step1-jdk11.gradle @@ -6,9 +6,9 @@ tasks.withType(JavaCompile){ } //源码版本 -sourceCompatibility=1.7 +sourceCompatibility=11 //构建的class版本 -targetCompatibility=1.7 +targetCompatibility=11 def jarname="fine-third-10.0.jar" def classesDir='build/classes/1' diff --git a/build.third_step1.gradle b/build.third_step1.gradle index f6a97f427..bc63554c2 100644 --- a/build.third_step1.gradle +++ b/build.third_step1.gradle @@ -82,7 +82,7 @@ sourceSets{ "${srcDir}/fine-third-default/fine-sjsxp/src/main/java", "${srcDir}/fine-third-default/fine-stax/src/main/java", "${srcDir}/fine-third-default/fine-sun-jpeg/src/main/java", - "${srcDir}/fine-third-jdk8/xml-apis/src/main/java" + // "${srcDir}/fine-third-jdk8/xml-apis/src/main/java" ] } } @@ -185,7 +185,7 @@ task copyFiles(type:Copy,dependsOn:'compileJava'){ with dataContent.call("${srcDir}/fine-third-default/fine-sjsxp/src/main/java") with dataContent.call("${srcDir}/fine-third-default/fine-stax/src/main/java") with dataContent.call("${srcDir}/fine-third-default/fine-sun-jpeg/src/main/java") - with dataContent.call("${srcDir}/fine-third-jdk8/xml-apis/src/main/java") + // with dataContent.call("${srcDir}/fine-third-jdk8/xml-apis/src/main/java") into "${classesDir}" } } diff --git a/build.third_step2-jdk11.gradle b/build.third_step2-jdk11.gradle new file mode 100644 index 000000000..102341f25 --- /dev/null +++ b/build.third_step2-jdk11.gradle @@ -0,0 +1,130 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file('build/classes/2') +} + +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + +def jarname="fine-third-10.0.jar" +def classesDir='build/classes/2' +//解压lib下的jar到classes文件夹 +jar{ + baseName="fine-third_2-10.0" +} + +def srcDir="." + +//设置源码路径 +sourceSets{ + main{ + java{ + srcDirs=[ + "${srcDir}/fine-bcprov-old/src/main/java", + "${srcDir}/fine-byte-buddy/src", + "${srcDir}/fine-cglib/src", + "${srcDir}/fine-commons-fileupload/src", + "${srcDir}/fine-httpcomponents/http-client/fluent-hc/src/main/java", + "${srcDir}/fine-httpcomponents/http-client/httpclient/src/main/java", + "${srcDir}/fine-httpcomponents/http-client/httpclient/src/main/java-deprecated", + "${srcDir}/fine-httpcomponents/http-client/httpclient-win/src/main/java", + "${srcDir}/fine-httpcomponents/http-client/httpmime/src/main/java", + "${srcDir}/fine-httpcomponents/http-client/httpmime/src/main/java-deprecated", + "${srcDir}/fine-httpcomponents/http-core/httpcore/src/main/java", + "${srcDir}/fine-httpcomponents/http-core/httpcore/src/main/java-deprecated", + "${srcDir}/fine-httpcomponents/http-core/httpcore-ab/src/main/java", + "${srcDir}/fine-httpcomponents/http-core/httpcore-nio/src/main/java", + "${srcDir}/fine-httpcomponents/http-core/httpcore-nio/src/main/java-deprecated", + "${srcDir}/fine-jai/src/main/java", + "${srcDir}/fine-kryo/src", + "${srcDir}/fine-log4j/src", + "${srcDir}/fine-poi/src", + "${srcDir}/fine-poi-old/src/main/java", + "${srcDir}/fine-redisson/src", + "${srcDir}/fine-xmlgraphics/xmlgraphics-batik/src/main/java", + "${srcDir}/fine-xmlgraphics/xmlgraphics-commons/src/main/java" + ] + } + } + +} + +sourceSets.main.output.classesDir = file('build/classes/2') +repositories{ + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) +def MVN_BRANCH = branchVariable.toUpperCase() + +//指定依赖 +dependencies{ + compile fileTree(dir:"${srcDir}/fine-byte-buddy/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/fine-commons-fileupload/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/fine-httpcomponents/http-client/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/fine-httpcomponents/http-core/lib",include: '**/*.jar') + compile fileTree(dir:"${srcDir}/fine-poi/lib",include: '**/*.jar') + compile fileTree(dir:"${srcDir}/fine-poi-old/lib",include: '**/*.jar') + compile fileTree(dir:"${srcDir}/fine-redisson/lib",include: '**/*.jar') + compile fileTree(dir:"${srcDir}/fine-xmlgraphics/xmlgraphics-batik/lib",include: '**/*.jar') + compile fileTree(dir:"${srcDir}/fine-xmlgraphics/xmlgraphics-commons/lib",include: '**/*.jar') + compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar') + compile fileTree(dir:System.getenv("JAVA_HOME"),include:"lib/tools.jar") + compile group: "com.fr.third.server", name: "servlet-api", version: "3.0" + testCompile 'junit:junit:4.12' +} + +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } + +} + + + +task copyFiles(type:Copy,dependsOn:'compileJava'){ + copy{ + println "------------------------------------------------copyfiles" + with dataContent.call("${srcDir}/fine-bcprov-old/src/main/java") + with dataContent.call("${srcDir}/fine-byte-buddy/src") + with dataContent.call("${srcDir}/fine-cglib/src") + with dataContent.call("${srcDir}/fine-cglib/resources") + with dataContent.call("${srcDir}/fine-commons-fileupload/src") + with dataContent.call("${srcDir}/fine-httpcomponents/http-client/fluent-hc/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-client/httpclient/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-client/httpclient/src/main/java-deprecated") + with dataContent.call("${srcDir}/fine-httpcomponents/http-client/httpclient-win/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-client/httpmime/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-client/httpmime/src/main/java-deprecated") + with dataContent.call("${srcDir}/fine-httpcomponents/http-core/httpcore/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-core/httpcore/src/main/java-deprecated") + with dataContent.call("${srcDir}/fine-httpcomponents/http-core/httpcore-ab/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-core/httpcore-nio/src/main/java") + with dataContent.call("${srcDir}/fine-httpcomponents/http-core/httpcore-nio/src/main/java-deprecated") + with dataContent.call("${srcDir}/fine-jai/src/main/java") + with dataContent.call("${srcDir}/fine-kryo/src") + with dataContent.call("${srcDir}/fine-log4j/src") + with dataContent.call("${srcDir}/fine-log4j/resources") + with dataContent.call("${srcDir}/fine-poi/src") + with dataContent.call("${srcDir}/fine-poi-old/src") + with dataContent.call("${srcDir}/fine-redisson/src") + with dataContent.call("${srcDir}/fine-xmlgraphics/xmlgraphics-batik/src/main/java") + with dataContent.call("${srcDir}/fine-xmlgraphics/xmlgraphics-batik/src/main/resources") + with dataContent.call("${srcDir}/fine-xmlgraphics/xmlgraphics-commons/src/main/java") + into "${classesDir}" + } +} + +jar.dependsOn copyFiles diff --git a/build.third_step3-jdk11.gradle b/build.third_step3-jdk11.gradle new file mode 100644 index 000000000..30d126db7 --- /dev/null +++ b/build.third_step3-jdk11.gradle @@ -0,0 +1,81 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file('build/classes/3') +} + +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + +def jarname="fine-third-10.0.jar" +def classesDir='build/classes/3' +//解压lib下的jar到classes文件夹 +jar{ + baseName="fine-third_3-10.0" +} + +def srcDir="." + +//设置源码路径 +sourceSets{ + main{ + java{ + srcDirs=[ + "${srcDir}/fine-itext/src", + "${srcDir}/fine-javassist/src/main/java", + "${srcDir}/fine-jedis/src", + "${srcDir}/fine-jboss-logging/src" + ] + } + } + +} +sourceSets.main.output.classesDir = file('build/classes/3') + +repositories{ + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) +def MVN_BRANCH = branchVariable.toUpperCase() + +//指定依赖 +dependencies{ + compile fileTree(dir:"${srcDir}/fine-jboss-logging/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar') + compile fileTree(dir:System.getenv("JAVA_HOME"),include:"lib/tools.jar") + compile group: "com.fr.third.server", name: "servlet-api", version: "3.0" + testCompile 'junit:junit:4.12' +} + +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } + +} + + + +task copyFiles(type:Copy,dependsOn:'compileJava'){ + copy{ + println "------------------------------------------------copyfiles" + with dataContent.call("${srcDir}/fine-itext/src") + with dataContent.call("${srcDir}/fine-javassist/src/main/java") + with dataContent.call("${srcDir}/fine-jedis/src") + with dataContent.call("${srcDir}/fine-jboss-logging/src") + into "${classesDir}" + } +} + +jar.dependsOn copyFiles diff --git a/build.third_step4-jdk11.gradle b/build.third_step4-jdk11.gradle new file mode 100644 index 000000000..bfe83ea81 --- /dev/null +++ b/build.third_step4-jdk11.gradle @@ -0,0 +1,84 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file('build/classes/4') +} + +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + +def jarname="fine-third-10.0.jar" +def classesDir='build/classes/4' +//解压lib下的jar到classes文件夹 +jar{ + baseName="fine-third_4-10.0" +} + +def srcDir="." + +//设置源码路径 +sourceSets{ + main{ + java{ + srcDirs=[ + "${srcDir}/fine-itext-old/src", + "${srcDir}/fine-hibernate/src", + "${srcDir}/fine-spring/src" + ] + } + } + +} + +sourceSets.main.output.classesDir = file('build/classes/4') + +repositories{ + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) +def MVN_BRANCH = branchVariable.toUpperCase() + +//指定依赖 +dependencies{ + compile fileTree(dir:"${srcDir}/fine-hibernate/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/fine-spring/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar') + compile fileTree(dir:System.getenv("JAVA_HOME"),include:"lib/tools.jar") + compile group: "com.fr.third.server", name: "servlet-api", version: "3.0" + testCompile 'junit:junit:4.12' +} + + +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } + +} + + + +task copyFiles(type:Copy,dependsOn:'compileJava'){ + copy{ + println "------------------------------------------------copyfiles" + with dataContent.call("${srcDir}/fine-itext-old/src") + with dataContent.call("${srcDir}/fine-hibernate/src") + with dataContent.call("${srcDir}/fine-hibernate/resources") + with dataContent.call("${srcDir}/fine-spring/src") + with dataContent.call("${srcDir}/fine-spring/resources") + into "${classesDir}" + } +} + +jar.dependsOn copyFiles diff --git a/build.third_step5-jdk11.gradle b/build.third_step5-jdk11.gradle new file mode 100644 index 000000000..16d85ce56 --- /dev/null +++ b/build.third_step5-jdk11.gradle @@ -0,0 +1,79 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file('build/classes/5') +} + +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + +def jarname="fine-third-10.0.jar" +def classesDir='build/classes/5' +//解压lib下的jar到classes文件夹 +jar{ + baseName="fine-third_5-10.0" +} + +def srcDir="." + +//设置源码路径 +sourceSets{ + main{ + java{ + srcDirs=[ + "${srcDir}/fine-druid/src" + "${srcDir}/fine-socketio/src" + ] + } + } + +} +sourceSets.main.output.classesDir = file('build/classes/5') + +repositories{ + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) +def MVN_BRANCH = branchVariable.toUpperCase() + +//指定依赖 +dependencies{ + compile fileTree(dir:"${srcDir}/fine-druid/lib",include:'ojdbc7-12.1.0.jar') + compile fileTree(dir:"${srcDir}/fine-druid/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/fine-socketio/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar') + compile fileTree(dir:System.getenv("JAVA_HOME"),include:"lib/tools.jar") + compile group: "com.fr.third.server", name: "servlet-api", version: "3.0" + testCompile 'junit:junit:4.12' +} + +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } + +} + + + +task copyFiles(type:Copy,dependsOn:'compileJava'){ + copy{ + println "------------------------------------------------copyfiles" + with dataContent.call("${srcDir}/fine-druid/src") + with dataContent.call("${srcDir}/fine-socketio/src") + into "${classesDir}" + } +} + +jar.dependsOn copyFiles diff --git a/build.third_step6-jdk11.gradle b/build.third_step6-jdk11.gradle new file mode 100644 index 000000000..72d9ebc6d --- /dev/null +++ b/build.third_step6-jdk11.gradle @@ -0,0 +1,76 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file('build/classes/6') +} + +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + +def jarname="fine-third-10.0.jar" +def classesDir='build/classes/6' +// def ftpreport='E:/ftp/share/report/' +//解压lib下的jar到classes文件夹 +jar{ + baseName="fine-third_6-10.0" +} + +def srcDir="." + +//设置源码路径 +sourceSets{ + main{ + java{ + srcDirs=[ + "${srcDir}/fine-quartz/src" + ] + } + } + +} +sourceSets.main.output.classesDir = file('build/classes/6') + +repositories{ + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) +def MVN_BRANCH = branchVariable.toUpperCase() + +//指定依赖 +dependencies{ + compile fileTree(dir:"${srcDir}/fine-quartz/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar') + compile fileTree(dir:System.getenv("JAVA_HOME"),include:"lib/tools.jar") + compile group: "com.fr.third.server", name: "servlet-api", version: "3.0" + testCompile 'junit:junit:4.12' +} + +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } + +} + + + +task copyFiles(type:Copy,dependsOn:'compileJava'){ + copy{ + println "------------------------------------------------copyfiles" + with dataContent.call("${srcDir}/fine-quartz/src") + into "${classesDir}" + } +} + +jar.dependsOn copyFiles diff --git a/build.third_step7-jdk11.gradle b/build.third_step7-jdk11.gradle new file mode 100644 index 000000000..b9eb50668 --- /dev/null +++ b/build.third_step7-jdk11.gradle @@ -0,0 +1,77 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' + destinationDir = file('build/classes/7') +} + +//源码版本 +sourceCompatibility=11 +//构建的class版本 +targetCompatibility=11 + +def jarname="fine-third-10.0.jar" +def classesDir='build/classes/7' +// def ftpreport='E:/ftp/share/report/' +//解压lib下的jar到classes文件夹 +jar{ + baseName="fine-third_7-10.0" +} + +def srcDir="." + +//设置源码路径 +sourceSets{ + main{ + java{ + srcDirs=[ + "${srcDir}/fine-ehcache/src" + ] + } + } + +} +sourceSets.main.output.classesDir = file('build/classes/7') + +repositories{ + mavenCentral() + maven { url "http://mvn.finedevelop.com/repository/maven-public/" } +} + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator)) +def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1) +def MVN_BRANCH = branchVariable.toUpperCase() + +//指定依赖 +dependencies{ + compile fileTree(dir:"${srcDir}/fine-ehcache/lib",include:'**/*.jar') + compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar') + compile fileTree(dir:System.getenv("JAVA_HOME"),include:"lib/tools.jar") + compile group: "com.fr.third.server", name: "servlet-api", version: "3.0" + testCompile 'junit:junit:4.12' +} + +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } + +} + + + +task copyFiles(type:Copy,dependsOn:'compileJava'){ + copy{ + println "------------------------------------------------copyfiles" + with dataContent.call("${srcDir}/fine-ehcache/src") + with dataContent.call("${srcDir}/fine-ehcache/recources") + into "${classesDir}" + } +} + +jar.dependsOn copyFiles diff --git a/fine-xmlgraphics/xmlgraphics-batik/lib/xml-apis-1.3.04.jar b/fine-xmlgraphics/xmlgraphics-batik/lib/xml-apis-1.3.04.jar deleted file mode 100644 index d42c0ea6cfd17ed6b444b8337febbc0bdb55ed83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194354 zcmbTeb95!j(l;DWY}>YN+vdd1#7-u*ZQHhOCllMo#F;neIrqNzoLTR4zPrAxwfD*& zRo&HHRllmP?%MKFz#xzSfBZ3aIQBtOr5j{|miC(3L?lbYQVnf}4 zNHwQpy;`Rh552AORjdhVduw^>OE%Ujt{Ks{@N+iX!_H)B?Xe#~iI;D}r77FMEkqk8 zh9hvYK@1OS;D;01oAJ|=L*j&s=#IEes9R(%Gilr{^oWe8aTZF8Hmqrpw#5{XMi1|JLKJOb+hCgFa`v~6%A2eqG(7splSnh;@qeQv0h&M z{e%tb8A5mAX;fJGkGSRyHajcUT*%rl$wa=;-b*~rb3Jmy+na`xp}NbE^r^*O8r#&iNkG}Sm60#s~6T6Wu?D3WU8Fll?~(Ad;Z{Vt%VY01dD^!dHE`f zpLd4AgX;a&ZO7cEb~_9}$Sg8@omHBFW!md?G9xkB!c;H_a6;XezQ6T5=A>dhaTzq> zt84iNTUe-q=Sd@9^)G*O?|46JOE0EADnjtZUor-iW&jCawrB6NhXn*xqJ=ljEPh69 z@G&HgN!xYG<94DQJ6-Yh<)65lQ}sSDG#KpvNMjP#cRC#`=c||4HL&ZS@zr z-^W7w8=aAXqk*HFo$)^~{9)Sv8Q8|a+StL)!0?|q5dX$uXJGGOZ13=2&){fpVB=t7 zYj6Dz9O!?W;XfQkw*P;)9R6`*vHq92931V94gNaa?;1h*8>6#v_WnI6s z!2gZK)y}}t>@U>6;}iHNwUxP{v5muDwekCyAfHsW_NIRs=XVOIe^D5G>ecL@hC=;2 z;isV)+FD!N+Wb|yzYqS0kbg|?!esalB0&Fz%FyAT#``Pf-_`y5%>S15kD33V{Az3K z_^C7lyMK`54+Z>N+CO;yS(ZP1>95qr&c-&5|0F!ZZwzLRfAiJfR{-}Lxz#_7{kt%q zZe(iwPYi!J(O;!^aCEaWb}%zG{>LT!zN?=b>ip^627kqz-`DX6ApCVEXLDnhf0FEX z`rjSlcTD@Yjr}w7{o8W>p!#Q*|F;$Vo6^|T@h>*>yBq!ikbkW1-_&NtR(5{{Jn;X) z^N7RgZi3HjVG|et0Q-~UKai>}BQ5mlLyiWYwnJ-ZW#Hft7`Npx#}7aJXhsqHQLsw6 zx@1wFWMMCi+i=Q`BxIJFOA#LsCO46q#s38;9^20+Np9+C8*dx$pd}QUv4LrGeAD!? zz1@ZD^>un$kNyiIxjAz?g=>P}FbL|TX5k$Dh3F(Dl6tjvU3G+W%5p)|^_uP-&3EI@ zBTzrL-3%u%Z9g8M)I5bb3luWx3Qf^cZL*lEY+aN%eZ2XhH#*v0B%t(T!RSMF)n}ne z2GZMN5LMH!h}=XqH?=uzeVk3+Uo$L_-T}X7rpo_lz?obqW^n+ii!CbSAdAd9G@B|u zW%d-;Cy}P(91OkUc%jbETb$ery#h_5z(`Z7j|j3p&Mnn6Z8KOizEcNE?dfZ8T1LHs zn84Yef|xk#gz5rWtMSK!9p=c(w+a4QUCsdpvQ*^2`|3HWBLDz?-W+h;o$JVsP1)}^ zcb9H}sS+Kfs}$|zHe*UV%&Q*V^V8{O+>;lN^$ti9A43QHe6vKUf2?V3S4R~8kuP*T zN*9;4TSF_SOj68?RPz=TN!s(w!K%|q=S+Qp(UIe&ca#164i?L8k~~TdE`ZN&u;)lw z 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Ž&_pYH0ua!^jQ1ju#^8(BCkVw_Ws-J@Mub@s6 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�}X7I8gxbF2`?F)6SeA) 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 z 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 KSr6gFI^h3trdb>S diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/AttributeCondition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/AttributeCondition.java new file mode 100644 index 000000000..8026a9baa --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/AttributeCondition.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: AttributeCondition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Condition#SAC_ATTRIBUTE_CONDITION + * @see Condition#SAC_ONE_OF_ATTRIBUTE_CONDITION + * @see Condition#SAC_BEGIN_HYPHEN_ATTRIBUTE_CONDITION + * @see Condition#SAC_ID_CONDITION + * @see Condition#SAC_CLASS_CONDITION + * @see Condition#SAC_PSEUDO_CLASS_CONDITION + */ +public interface AttributeCondition extends Condition { + + /** + * Returns the + * namespace + * URI of this attribute condition. + *

NULL if : + *

    + *
  • this attribute condition can match any namespace. + *
  • this attribute is an id attribute. + *
+ */ + public String getNamespaceURI(); + + /** + * Returns the + * local part + * of the + * qualified + * name of this attribute. + *

NULL if : + *

    + *
  • this attribute condition can match any attribute. + *

  • this attribute is a class attribute. + *

  • this attribute is an id attribute. + *

  • this attribute is a pseudo-class attribute. + *

+ */ + public String getLocalName(); + + /** + * Returns true if the attribute must have an explicit value + * in the original document, false otherwise. + */ + public boolean getSpecified(); + + /** + * Returns the value of the attribute. + * If this attribute is a class or a pseudo class attribute, you'll get + * the class name (or psedo class name) without the '.' or ':'. + */ + public String getValue(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSException.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSException.java new file mode 100644 index 000000000..864f5498a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSException.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * The original version of this interface comes from SAX : + * http://www.megginson.com/SAX/ + * + * $Id: CSSException.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public class CSSException extends RuntimeException { + + protected String s; + + /** + * this error is unspecified. + */ + public static final short SAC_UNSPECIFIED_ERR = 0; + + /** + * If the operation is not supported + */ + public static final short SAC_NOT_SUPPORTED_ERR = 1; + + /** + * If an invalid or illegal string is specified + */ + public static final short SAC_SYNTAX_ERR = 2; + + /* + * Default message for unspecified error. + */ + protected static final String S_SAC_UNSPECIFIED_ERR + = "unknown error"; + /* + * Default message for not supported error. + */ + protected static final String S_SAC_NOT_SUPPORTED_ERR + = "not supported"; + /* + * Default message for syntax error. + */ + protected static final String S_SAC_SYNTAX_ERR + = "syntax error"; + + /** + * The internal exception. + */ + protected Exception e; + + protected short code; + + /** + * Creates a new CSSException + */ + public CSSException() { + } + + /** + * Creates a new CSSException + */ + public CSSException(String s) { + this.code = SAC_UNSPECIFIED_ERR; + this.s = s; + } + + /** + * Creates a new CSSException with an embeded exception. + * @param a the embeded exception. + */ + public CSSException(Exception e) { + this.code = SAC_UNSPECIFIED_ERR; + this.e = e; + } + + /** + * Creates a new CSSException with a specific code. + * @param a the embeded exception. + */ + public CSSException(short code) { + this.code = code; + } + + /** + * Creates a new CSSException with an embeded exception and a specified + * message. + * @param code the specified code. + * @param e the embeded exception. + */ + public CSSException(short code, String s, Exception e) { + this.code = code; + this.s = s; + this.e = e; + } + + /** + * Returns the detail message of this throwable object. + * + * @return the detail message of this Throwable, or null if this Throwable + * does not have a detail message. + */ + public String getMessage() { + if (s != null) { + return s; + } else if (e != null) { + return e.getMessage(); + } else { + switch (code) { + case SAC_UNSPECIFIED_ERR: + return S_SAC_UNSPECIFIED_ERR; + case SAC_NOT_SUPPORTED_ERR: + return S_SAC_NOT_SUPPORTED_ERR; + case SAC_SYNTAX_ERR: + return S_SAC_SYNTAX_ERR; + default: + return null; + } + } + } + + /** + * returns the error code for this exception. + */ + public short getCode() { + return code; + } + + /** + * Returns the internal exception if any, null otherwise. + */ + public Exception getException() { + return e; + } + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSParseException.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSParseException.java new file mode 100644 index 000000000..2e63f36ce --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CSSParseException.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * The original version of this interface comes from SAX : + * http://www.megginson.com/SAX/ + * + * $Id: CSSParseException.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * Encapsulate a CSS parse error or warning. + * + *

This exception will include information for locating the error + * in the original CSS document. Note that although the application + * will receive a CSSParseException as the argument to the handlers + * in the ErrorHandler interface, the application is not actually + * required to throw the exception; instead, it can simply read the + * information in it and take a different action.

+ * + *

Since this exception is a subclass of CSSException, it + * inherits the ability to wrap another exception.

+ * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public class CSSParseException extends CSSException { + + private String uri; + private int lineNumber; + private int columnNumber; + + /** + * Create a new CSSParseException from a message and a Locator. + * + *

This constructor is especially useful when an application is + * creating its own exception from within a DocumentHandler + * callback.

+ * + * @param message The error or warning message. + * @param locator The locator object for the error or warning. + * @see Locator + * @see Parser#setLocale + */ + public CSSParseException(String message, Locator locator) { + super(message); + this.code = SAC_SYNTAX_ERR; + this.uri = locator.getURI(); + this.lineNumber = locator.getLineNumber(); + this.columnNumber = locator.getColumnNumber(); + } + + + /** + + * Wrap an existing exception in a CSSParseException. + * + *

This constructor is especially useful when an application is + * creating its own exception from within a DocumentHandler + * callback, and needs to wrap an existing exception that is not a + * subclass of CSSException.

+ * + * @param message The error or warning message, or null to + * use the message from the embedded exception. + * @param locator The locator object for the error or warning. + * @param e Any exception + * @see Locator + * @see Parser#setLocale + */ + public CSSParseException(String message, Locator locator, + Exception e) { + super(SAC_SYNTAX_ERR, message, e); + this.uri = locator.getURI(); + this.lineNumber = locator.getLineNumber(); + this.columnNumber = locator.getColumnNumber(); + } + + + /** + * Create a new CSSParseException. + * + *

This constructor is most useful for parser writers.

+ * + *

the parser must resolve the URI fully before creating the exception.

+ * + * @param message The error or warning message. + * @param uri The URI of the document that generated the error or warning. + * @param lineNumber The line number of the end of the text that + * caused the error or warning. + * @param columnNumber The column number of the end of the text that + * cause the error or warning. + * @see Parser#setLocale + */ + public CSSParseException(String message, String uri, + int lineNumber, int columnNumber) { + super(message); + this.code = SAC_SYNTAX_ERR; + this.uri = uri; + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + } + + /** + * Create a new CSSParseException with an embedded exception. + * + *

This constructor is most useful for parser writers who + * need to wrap an exception that is not a subclass of + * CSSException.

+ * + *

The parser must resolve the URI fully before creating the + * exception.

+ * + * @param message The error or warning message, or null to use + * the message from the embedded exception. + * @param uri The URI of the document that generated + * the error or warning. + * @param lineNumber The line number of the end of the text that + * caused the error or warning. + * @param columnNumber The column number of the end of the text that + * cause the error or warning. + * @param e Another exception to embed in this one. + * @see Parser#setLocale + */ + public CSSParseException(String message, String uri, + int lineNumber, int columnNumber, Exception e) { + super(SAC_SYNTAX_ERR, message, e); + this.uri = uri; + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + } + + /** + * Get the URI of the document where the exception occurred. + * + *

The URI will be resolved fully.

+ * + * @return A string containing the URI, or null + * if none is available. + * @see Locator#getURI + */ + public String getURI() { + return this.uri; + } + + + /** + * The line number of the end of the text where the exception occurred. + * + * @return An integer representing the line number, or -1 + * if none is available. + * @see Locator#getLineNumber + */ + public int getLineNumber() { + return this.lineNumber; + } + + + /** + * The column number of the end of the text where the exception occurred. + * + *

The first column in a line is position 1.

+ * + * @return An integer representing the column number, or -1 + * if none is available. + * @see Locator#getColumnNumber + */ + public int getColumnNumber() { + return this.columnNumber; + } +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CharacterDataSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CharacterDataSelector.java new file mode 100644 index 000000000..4f5bf7cc9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CharacterDataSelector.java @@ -0,0 +1,24 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: CharacterDataSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_TEXT_NODE_SELECTOR + * @see Selector#SAC_CDATA_SECTION_NODE_SELECTOR + * @see Selector#SAC_COMMENT_NODE_SELECTOR + */ +public interface CharacterDataSelector extends SimpleSelector { + + /** + * Returns the character data. + */ + public String getData(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CombinatorCondition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CombinatorCondition.java new file mode 100644 index 000000000..6cafac2e0 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/CombinatorCondition.java @@ -0,0 +1,28 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: CombinatorCondition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Condition#SAC_AND_CONDITION + * @see Condition#SAC_OR_CONDITION + */ +public interface CombinatorCondition extends Condition { + + /** + * Returns the first condition. + */ + public Condition getFirstCondition(); + + /** + * Returns the second condition. + */ + public Condition getSecondCondition(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Condition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Condition.java new file mode 100644 index 000000000..92d7c4042 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Condition.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: Condition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface Condition { + + /** + * This condition checks exactly two conditions. + * example: + *
+     *   .part1:lang(fr)
+     * 
+ * @see CombinatorCondition + */ + public static final short SAC_AND_CONDITION = 0; + + /** + * This condition checks one of two conditions. + * @see CombinatorCondition + */ + public static final short SAC_OR_CONDITION = 1; + + /** + * This condition checks that a condition can't be applied to a node. + * @see NegativeCondition + */ + public static final short SAC_NEGATIVE_CONDITION = 2; + + /** + * This condition checks a specified position. + * example: + *
+     *   :first-child
+     * 
+ * @see PositionalCondition + */ + public static final short SAC_POSITIONAL_CONDITION = 3; + + /** + * This condition checks an attribute. + * example: + *
+     *   [simple]
+     *   [restart="never"]
+     * 
+ * @see AttributeCondition + */ + public static final short SAC_ATTRIBUTE_CONDITION = 4; + /** + * This condition checks an id attribute. + * example: + *
+     *   #myId
+     * 
+ * @see AttributeCondition + */ + public static final short SAC_ID_CONDITION = 5; + /** + * This condition checks the language of the node. + * example: + *
+     *   :lang(fr)
+     * 
+ * @see LangCondition + */ + public static final short SAC_LANG_CONDITION = 6; + /** + * This condition checks for a value in a space-separated values in a + * specified attribute + * example: + *
+     *   [values~="10"]
+     * 
+ * @see AttributeCondition + */ + public static final short SAC_ONE_OF_ATTRIBUTE_CONDITION = 7; + /** + * This condition checks if the value is in a hypen-separated list of values + * in a specified attribute. + * example: + *
+     *   [languages|="fr"]
+     * 
+ * @see AttributeCondition + */ + public static final short SAC_BEGIN_HYPHEN_ATTRIBUTE_CONDITION = 8; + /** + * This condition checks for a specified class. + * example: + *
+     *   .example
+     * 
+ * @see AttributeCondition + */ + public static final short SAC_CLASS_CONDITION = 9; + /** + * This condition checks for the link pseudo class. + * example: + *
+     *   :link
+     *   :visited
+     *   :hover
+     * 
+ * @see AttributeCondition + */ + public static final short SAC_PSEUDO_CLASS_CONDITION = 10; + /** + * This condition checks if a node is the only one in the node list. + */ + public static final short SAC_ONLY_CHILD_CONDITION = 11; + /** + * This condition checks if a node is the only one of his type. + */ + public static final short SAC_ONLY_TYPE_CONDITION = 12; + /** + * This condition checks the content of a node. + * @see ContentCondition + */ + public static final short SAC_CONTENT_CONDITION = 13; + + /** + * An integer indicating the type of Condition. + */ + public short getConditionType(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionFactory.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionFactory.java new file mode 100644 index 000000000..0ed996b91 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionFactory.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: ConditionFactory.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface ConditionFactory { + + /** + * Creates an and condition + * + * @param first the first condition + * @param second the second condition + * @return A combinator condition + * @exception CSSException if this exception is not supported. + */ + CombinatorCondition createAndCondition(Condition first, Condition second) + throws CSSException; + + /** + * Creates an or condition + * + * @param first the first condition + * @param second the second condition + * @return A combinator condition + * @exception CSSException if this exception is not supported. + */ + CombinatorCondition createOrCondition(Condition first, Condition second) + throws CSSException; + + /** + * Creates a negative condition + * + * @param condition the condition + * @return A negative condition + * @exception CSSException if this exception is not supported. + */ + NegativeCondition createNegativeCondition(Condition condition) + throws CSSException; + + /** + * Creates a positional condition + * + * @param position the position of the node in the list. + * @param typeNode true if the list should contain + * only nodes of the same type (element, text node, ...). + * @param type true true if the list should contain + * only nodes of the same node (for element, same localName + * and same namespaceURI). + * @return A positional condition + * @exception CSSException if this exception is not supported. + */ + PositionalCondition createPositionalCondition(int position, + boolean typeNode, + boolean type) + throws CSSException; + + /** + * Creates an attribute condition + * + * @param localName the localName of the attribute + * @param namespaceURI the namespace URI of the attribute + * @param specified true if the attribute must be specified + * in the document. + * @param value the value of this attribute. + * @return An attribute condition + * @exception CSSException if this exception is not supported. + */ + AttributeCondition createAttributeCondition(String localName, + String namespaceURI, + boolean specified, + String value) + throws CSSException; + + /** + * Creates an id condition + * + * @param value the value of the id. + * @return An Id condition + * @exception CSSException if this exception is not supported. + */ + AttributeCondition createIdCondition(String value) + throws CSSException; + + /** + * Creates a lang condition + * + * @param value the value of the language. + * @return A lang condition + * @exception CSSException if this exception is not supported. + */ + LangCondition createLangCondition(String lang) + throws CSSException; + + /** + * Creates a "one of" attribute condition + * + * @param localName the localName of the attribute + * @param namespaceURI the namespace URI of the attribute + * @param specified true if the attribute must be specified + * in the document. + * @param value the value of this attribute. + * @return A "one of" attribute condition + * @exception CSSException if this exception is not supported. + */ + AttributeCondition createOneOfAttributeCondition(String localName, + String namespaceURI, + boolean specified, + String value) + throws CSSException; + + /** + * Creates a "begin hyphen" attribute condition + * + * @param localName the localName of the attribute + * @param namespaceURI the namespace URI of the attribute + * @param specified true if the attribute must be specified + * in the document. + * @param value the value of this attribute. + * @return A "begin hyphen" attribute condition + * @exception CSSException if this exception is not supported. + */ + AttributeCondition createBeginHyphenAttributeCondition(String localName, + String namespaceURI, + boolean specified, + String value) + throws CSSException; + + /** + * Creates a class condition + * + * @param localName the localName of the attribute + * @param namespaceURI the namespace URI of the attribute + * @param specified true if the attribute must be specified + * in the document. + * @param value the name of the class. + * @return A class condition + * @exception CSSException if this exception is not supported. + */ + AttributeCondition createClassCondition(String namespaceURI, + String value) + throws CSSException; + + /** + * Creates a pseudo class condition + * + * @param namespaceURI the namespace URI of the attribute + * @param value the name of the pseudo class + * @return A pseudo class condition + * @exception CSSException if this exception is not supported. + */ + AttributeCondition createPseudoClassCondition(String namespaceURI, + String value) + throws CSSException; + + /** + * Creates a "only one" child condition + * + * @return A "only one" child condition + * @exception CSSException if this exception is not supported. + */ + Condition createOnlyChildCondition() throws CSSException; + + + /** + * Creates a "only one" type condition + * + * @return A "only one" type condition + * @exception CSSException if this exception is not supported. + */ + Condition createOnlyTypeCondition() throws CSSException; + + /** + * Creates a content condition + * + * @param data the data in the content + * @return A content condition + * @exception CSSException if this exception is not supported. + */ + ContentCondition createContentCondition(String data) + throws CSSException; + + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionalSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionalSelector.java new file mode 100644 index 000000000..ccfb32915 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ConditionalSelector.java @@ -0,0 +1,28 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: ConditionalSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_CONDITIONAL_SELECTOR + */ +public interface ConditionalSelector extends SimpleSelector { + + /** + * Returns the simple selector. + *

The simple selector can't be a ConditionalSelector.

+ */ + public SimpleSelector getSimpleSelector(); + + /** + * Returns the condition to be applied on the simple selector. + */ + public Condition getCondition(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ContentCondition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ContentCondition.java new file mode 100644 index 000000000..4b1a39553 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ContentCondition.java @@ -0,0 +1,21 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: ContentCondition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Condition#SAC_CONTENT_CONDITION + */ +public interface ContentCondition extends Condition { + /** + * Returns the content. + */ + public String getData(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DescendantSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DescendantSelector.java new file mode 100644 index 000000000..b4508f38d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DescendantSelector.java @@ -0,0 +1,28 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: DescendantSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_DESCENDANT_SELECTOR + * @see Selector#SAC_CHILD_SELECTOR + */ +public interface DescendantSelector extends Selector { + + /** + * Returns the parent selector. + */ + public Selector getAncestorSelector(); + + /* + * Returns the simple selector. + */ + public SimpleSelector getSimpleSelector(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DocumentHandler.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DocumentHandler.java new file mode 100644 index 000000000..8316c4969 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/DocumentHandler.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: DocumentHandler.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * This is the main interface that most CSS applications implement: if the + * application needs to be informed of basic parsing events, it implements this + * interface and registers an instance with the CSS parser using the + * setCSSHandler method. + * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface DocumentHandler { + + /** + * Receive notification of the beginning of a style sheet. + * + * The CSS parser will invoke this method only once, before any other + * methods in this interface. + * + * @param uri The URI of the style sheet. @@TODO can be NULL ! (inline style sheet) + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void startDocument(InputSource source) + throws CSSException; + + /** + * Receive notification of the end of a document. + * + * The CSS parser will invoke this method only once, and it will be the + * last method invoked during the parse. The parser shall not invoke this + * method until it has either abandoned parsing (because of an + * unrecoverable error) or reached the end of input. + * + * @param uri The URI of the style sheet. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void endDocument(InputSource source) throws CSSException; + + /** + * Receive notification of a comment. + * If the comment appears in a declaration (e.g. color: /* comment * / blue;), + * the parser notifies the comment before the declaration. + * + * @param text The comment. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void comment(String text) throws CSSException; + + /** + * Receive notification of an unknown rule t-rule not supported by this + * parser. + * + * @param at-rule The complete ignored at-rule. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void ignorableAtRule(String atRule) throws CSSException; + + /** + * Receive notification of an unknown rule t-rule not supported by this + * parser. + * + * @param prefix null if this is the default namespace + * @param uri The URI for this namespace. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void namespaceDeclaration(String prefix, String uri) + throws CSSException; + + /** + * Receive notification of a import statement in the style sheet. + * + * @param uri The URI of the imported style sheet. + * @param media The intended destination media for style information. + * @param defaultNamepaceURI The default namespace URI for the imported + * style sheet. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void importStyle(String uri, SACMediaList media, + String defaultNamespaceURI) + throws CSSException; + + /** + * Receive notification of the beginning of a media statement. + * + * The Parser will invoke this method at the beginning of every media + * statement in the style sheet. there will be a corresponding endMedia() + * event for every startElement() event. + * + * @param media The intended destination media for style information. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void startMedia(SACMediaList media) throws CSSException; + + /** + * Receive notification of the end of a media statement. + * + * @param media The intended destination media for style information. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void endMedia(SACMediaList media) throws CSSException; + + /** + * Receive notification of the beginning of a page statement. + * + * The Parser will invoke this method at the beginning of every page + * statement in the style sheet. there will be a corresponding endPage() + * event for every startPage() event. + * + * @param name the name of the page (if any, null otherwise) + * @param pseudo_page the pseudo page (if any, null otherwise) + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void startPage(String name, String pseudo_page) throws CSSException; + + /** + * Receive notification of the end of a media statement. + * + * @param media The intended destination medium for style information. + * @param pseudo_page the pseudo page (if any, null otherwise) + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void endPage(String name, String pseudo_page) throws CSSException; + + /** + * Receive notification of the beginning of a font face statement. + * + * The Parser will invoke this method at the beginning of every font face + * statement in the style sheet. there will be a corresponding endFontFace() + * event for every startFontFace() event. + * + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void startFontFace() throws CSSException; + + /** + * Receive notification of the end of a font face statement. + * + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void endFontFace() throws CSSException; + + /** + * Receive notification of the beginning of a rule statement. + * + * @param selectors All intended selectors for all declarations. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void startSelector(SelectorList selectors) throws CSSException; + + /** + * Receive notification of the end of a rule statement. + * + * @param selectors All intended selectors for all declarations. + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void endSelector(SelectorList selectors) throws CSSException; + + /** + * Receive notification of a declaration. + * + * @param name the name of the property. + * @param value the value of the property. All whitespace are stripped. + * @param important is this property important ? + * @exception CSSException Any CSS exception, possibly wrapping another + * exception. + */ + public void property(String name, LexicalUnit value, boolean important) + throws CSSException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ElementSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ElementSelector.java new file mode 100644 index 000000000..7c06bf9f2 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ElementSelector.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: ElementSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_ELEMENT_NODE_SELECTOR + */ +public interface ElementSelector extends SimpleSelector { + + /** + * Returns the + * namespace + * URI of this element selector. + *

NULL if this element selector can match any namespace.

+ */ + public String getNamespaceURI(); + + /** + * Returns the + * local part + * of the + * qualified + * name of this element. + *

NULL if this element selector can match any element.

+ * + */ + public String getLocalName(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ErrorHandler.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ErrorHandler.java new file mode 100644 index 000000000..8f5591324 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ErrorHandler.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * The original version of this interface comes from SAX : + * http://www.megginson.com/SAX/ + * + * $Id: ErrorHandler.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * Basic interface for CSS error handlers. + * + *

If a CSS application needs to implement customized error + * handling, it must implement this interface and then register an + * instance with the CSS parser using the parser's setErrorHandler + * method. The parser will then report all errors and warnings + * through this interface.

+ * + *

The parser shall use this interface instead of throwing an + * exception: it is up to the application whether to throw an + * exception for different types of errors and warnings. Note, + * however, that there is no requirement that the parser continue to + * provide useful information after a call to fatalError (in other + * words, a CSS driver class could catch an exception and report a + * fatalError).

+ * + *

The HandlerBase class provides a default implementation of this + * interface, ignoring warnings and recoverable errors and throwing a + * SAXParseException for fatal errors. An application may extend + * that class rather than implementing the complete interface + * itself.

+ * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface ErrorHandler { + + + /** + * Receive notification of a warning. + * + *

CSS parsers will use this method to report conditions that + * are not errors or fatal errors as defined by the XML 1.0 + * recommendation. The default behaviour is to take no action.

+ * + *

The CSS parser must continue to provide normal parsing events + * after invoking this method: it should still be possible for the + * application to process the document through to the end.

+ * + * @param exception The warning information encapsulated in a + * CSS parse exception. + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @see CSSParseException + */ + public void warning(CSSParseException exception) throws CSSException; + + /** + * Receive notification of a recoverable error. + * + *

This corresponds to the definition of "error" in section 1.2 + * of the W3C XML 1.0 Recommendation. For example, a validating + * parser would use this callback to report the violation of a + * validity constraint. The default behaviour is to take no + * action.

+ * + *

The CSS parser must continue to provide normal parsing events + * after invoking this method: it should still be possible for the + * application to process the document through to the end. If the + * application cannot do so, then the parser should report a fatal + * error even if the XML 1.0 recommendation does not require it to + * do so.

+ * + * @param exception The error information encapsulated in a + * CSS parse exception. + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @see CSSParseException + */ + public void error(CSSParseException exception) throws CSSException; + + /** + * Receive notification of a non-recoverable error. + * + *

This corresponds to the definition of "fatal error" in + * section 1.2 of the W3C XML 1.0 Recommendation. For example, a + * parser would use this callback to report the violation of a + * well-formedness constraint.

+ * + *

The application must assume that the document is unusable + * after the parser has invoked this method, and should continue + * (if at all) only for the sake of collecting addition error + * messages: in fact, CSS parsers are free to stop reporting any + * other events once this method has been invoked.

+ * + * @param exception The error information encapsulated in a + * CSS parse exception. + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @see CSSParseException + */ + public void fatalError(CSSParseException exception) throws CSSException; + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/InputSource.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/InputSource.java new file mode 100644 index 000000000..3f443c3e0 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/InputSource.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * The original version of this interface comes from SAX : + * http://www.megginson.com/SAX/ + * + * $Id: InputSource.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +import java.io.InputStream; +import java.io.Reader; + +/** + * A single input source for a CSS source. + * + *

This class allows a CSS application to encapsulate information about an + * input source in a single object, which may include a URI, a byte stream + * (possibly with a specified encoding), and/or a character stream.

+ * + *

The CSS parser will use the InputSource object to determine how + * to read CSS input. If there is a character stream available, the + * parser will read that stream directly; if not, the parser will use + * a byte stream, if available; if neither a character stream nor a + * byte stream is available, the parser will attempt to open a URI + * connection to the resource identified by the URI.

+ * + *

An InputSource object belongs to the application: the CSS parser + * shall never modify it in any way (it may modify a copy if + * necessary).

+ * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public class InputSource { + + private String uri; + private InputStream byteStream; + private String encoding; + private Reader characterStream; + private String title; + private String media; + + /** + * Zero-argument default constructor. + * + * @see #setURI + * @see #setByteStream + * @see #setCharacterStream + * @see #setEncoding + */ + public InputSource() { + } + + /** + * Create a new input source with a URI. + * + *

The URI must be full resolved.

+ * + * @param uri The URI. + * @see #setURI + * @see #setByteStream + * @see #setEncoding + * @see #setCharacterStream + */ + public InputSource(String uri) { + setURI(uri); + } + + /** + * Create a new input source with a character stream. + * + *

Application writers may use setURI() to provide a base + * for resolving relative URIs, and setPublicId to include a + * public identifier.

+ * + *

The character stream shall not include a byte order mark.

+ * + * @see #setURI + * @see #setByteStream + * @see #setCharacterStream + */ + public InputSource(Reader characterStream) { + setCharacterStream(characterStream); + } + + /** + * Set the URI for this input source. + * + *

The URI is optional if there is a byte stream or a character stream, + * but it is still useful to provide one, since the application can use it + * to resolve relative URIs and can include it in error messages and + * warnings (the parser will attempt to open a connection to the URI only + * if there is no byte stream or character stream specified).

+ * + *

If the application knows the character encoding of the + * object pointed to by the URI, it can register + * the encoding using the setEncoding method.

+ * + *

The URI must be fully resolved.

+ * + * @param uri The URI as a string. + * @see #setEncoding + * @see #getURI + * @see Locator#getURI + * @see CSSParseException#getURI + */ + public void setURI(String uri) { + this.uri = uri; + } + + /** + * Get the URI for this input source. + * + *

The getEncoding method will return the character encoding + * of the object pointed to, or null if unknown.

+ * + *

The URI will be fully resolved.

+ * + * @return The URI. + * @see #setURI + * @see #getEncoding + */ + public String getURI() { + return uri; + } + + /** + * Set the byte stream for this input source. + * + *

The SAX parser will ignore this if there is also a character + * stream specified, but it will use a byte stream in preference + * to opening a URI connection itself.

+ * + *

If the application knows the character encoding of the + * byte stream, it should set it with the setEncoding method.

+ * + * @param byteStream A byte stream containing an CSS document or + * other entity. + * @see #setEncoding + * @see #getByteStream + * @see #getEncoding + */ + public void setByteStream(InputStream byteStream) { + this.byteStream = byteStream; + } + + /** + * Get the byte stream for this input source. + * + *

The getEncoding method will return the character + * encoding for this byte stream, or null if unknown.

+ * + * @return The byte stream, or null if none was supplied. + * @see #getEncoding + * @see #setByteStream + */ + public InputStream getByteStream() { + return byteStream; + } + + /** + * Set the character encoding, if known. + * + *

The encoding must be a string acceptable for an + * CHARSET encoding declaration (see section 4.4 of the CSS + * recommendation Level 2).

+ * + *

This method has no effect when the application provides a + * character stream.

+ * + * @param encoding A string describing the character encoding. + * @see #setURI + * @see #setByteStream + * @see #getEncoding + */ + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + /** + * Get the character encoding for a byte stream or URI. + * + * @return The encoding, or null if none was supplied. + * @see #setByteStream + * @see #getURI + * @see #getByteStream + */ + public String getEncoding() { + return encoding; + } + + /** + * Set the character stream for this input source. + * + *

If there is a character stream specified, the SAX parser + * will ignore any byte stream and will not attempt to open + * a URI connection to the URI.

+ * + * @param characterStream The character stream containing the + * CSS document or other entity. + * @see #getCharacterStream + */ + public void setCharacterStream(Reader characterStream) { + this.characterStream = characterStream; + } + + /** + * Get the character stream for this input source. + * + * @return The character stream, or null if none was supplied. + * @see #setCharacterStream + */ + public Reader getCharacterStream() { + return characterStream; + } + + /** + * Set the title for this input source. + * @param title The advisory title. See the title attribute definition + * for the LINK + * element in HTML 4.0, and the title pseudo-attribute for the XML + * style sheet processing instruction. + */ + public void setTitle(String title) { + this.title = title; + } + + /** + * Returns the title for this input source. + */ + public String getTitle() { + return title; + } + + /** + * Set the media for this input source. + * @param media A comma separated list with all media. + */ + public void setMedia(String media) { + this.media = media; + } + + /** + * Returns the media associated to the input source or null + * if media are currently unknown. + * @return the media associated to this input source. + */ + public String getMedia() { + if (media == null) { + return "all"; + } + return media; + } +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LangCondition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LangCondition.java new file mode 100644 index 000000000..8a9a9e797 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LangCondition.java @@ -0,0 +1,21 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: LangCondition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Condition#SAC_LANG_CONDITION + */ +public interface LangCondition extends Condition { + /** + * Returns the language + */ + public String getLang(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LexicalUnit.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LexicalUnit.java new file mode 100644 index 000000000..f69d57324 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/LexicalUnit.java @@ -0,0 +1,370 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: LexicalUnit.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * This is a lexical unit for CSS values. + *

Remarks: Not all the following lexical units are supported (or + * will be supported) by CSS. + *

All examples are CSS2 compliant. + * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface LexicalUnit { + + /** + * , + */ + public static final short SAC_OPERATOR_COMMA = 0; + /** + * + + */ + public static final short SAC_OPERATOR_PLUS = 1; + /** + * - + */ + public static final short SAC_OPERATOR_MINUS = 2; + /** + * * + */ + public static final short SAC_OPERATOR_MULTIPLY = 3; + /** + * / + */ + public static final short SAC_OPERATOR_SLASH = 4; + /** + * % + */ + public static final short SAC_OPERATOR_MOD = 5; + /** + * ^ + */ + public static final short SAC_OPERATOR_EXP = 6; + /** + * < + */ + public static final short SAC_OPERATOR_LT = 7; + /** + * > + */ + public static final short SAC_OPERATOR_GT = 8; + /** + * <= + */ + public static final short SAC_OPERATOR_LE = 9; + /** + * >= + */ + public static final short SAC_OPERATOR_GE = 10; + /** + * ~ + */ + public static final short SAC_OPERATOR_TILDE = 11; + + /** + * identifier inherit. + */ + public static final short SAC_INHERIT = 12; + /** + * Integers. + * @see #getIntegerValue + */ + public static final short SAC_INTEGER = 13; + /** + * reals. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_REAL = 14; + /** + * Relative lengthem. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_EM = 15; + /** + * Relative lengthex. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_EX = 16; + /** + * Relative length px. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_PIXEL = 17; + /** + * Absolute length in. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_INCH = 18; + /** + * Absolute length cm. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_CENTIMETER = 19; + /** + * Absolute length mm. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_MILLIMETER = 20; + /** + * Absolute length pt. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_POINT = 21; + /** + * Absolute length pc. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_PICA = 22; + /** + * Percentage. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_PERCENTAGE = 23; + /** + * URI: uri(...). + * @see #getStringValue + */ + public static final short SAC_URI = 24; + /** + * function counter. + * @see #getFunctionName + * @see #getParameters + */ + public static final short SAC_COUNTER_FUNCTION = 25; + /** + * function counters. + * @see #getFunctionName + * @see #getParameters + */ + public static final short SAC_COUNTERS_FUNCTION = 26; + /** + * RGB Colors. + * rgb(0, 0, 0) and #000 + * @see #getFunctionName + * @see #getParameters + */ + public static final short SAC_RGBCOLOR = 27; + /** + * Angle deg. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_DEGREE = 28; + /** + * Angle grad. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_GRADIAN = 29; + /** + * Angle rad. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_RADIAN = 30; + /** + * Time ms. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_MILLISECOND = 31; + /** + * Time s. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_SECOND = 32; + /** + * Frequency Hz. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_HERTZ = 33; + /** + * Frequency kHz. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_KILOHERTZ = 34; + + /** + * any identifier except inherit. + * @see #getStringValue + */ + public static final short SAC_IDENT = 35; + /** + * A string. + * @see #getStringValue + */ + public static final short SAC_STRING_VALUE = 36; + /** + * Attribute: attr(...). + * @see #getStringValue + */ + public static final short SAC_ATTR = 37; + /** + * function rect. + * @see #getFunctionName + * @see #getParameters + */ + public static final short SAC_RECT_FUNCTION = 38; + /** + * A unicode range. @@TO BE DEFINED + */ + public static final short SAC_UNICODERANGE = 39; + + /** + * sub expressions + * (a) (a + b) (normal/none) + * @see #getSubValues + */ + public static final short SAC_SUB_EXPRESSION = 40; + + /** + * unknown function. + * @see #getFunctionName + * @see #getParameters + */ + public static final short SAC_FUNCTION = 41; + /** + * unknown dimension. + * @see #getFloatValue + * @see #getDimensionUnitText + */ + public static final short SAC_DIMENSION = 42; + + /** + * An integer indicating the type of LexicalUnit. + */ + public short getLexicalUnitType(); + + /** + * Returns the next value or null if any. + */ + public LexicalUnit getNextLexicalUnit(); + + /** + * Returns the previous value or null if any. + */ + public LexicalUnit getPreviousLexicalUnit(); + + /** + * Returns the integer value. + * @see #SAC_INTEGER + */ + public int getIntegerValue(); + + + /** + * Returns the float value. + *

If the type of LexicalUnit is one of SAC_DEGREE, + * SAC_GRADIAN, SAC_RADIAN, SAC_MILLISECOND, SAC_SECOND, SAC_HERTZ + * or SAC_KILOHERTZ, the value can never be negative.

+ * + * @see #SAC_REAL + * @see #SAC_DIMENSION + * @see #SAC_EM + * @see #SAC_EX + * @see #SAC_PIXEL + * @see #SAC_INCH + * @see #SAC_CENTIMETER + * @see #SAC_MILLIMETER + * @see #SAC_POINT + * @see #SAC_PICA + * @see #SAC_PERCENTAGE + * @see #SAC_DEGREE + * @see #SAC_GRADIAN + * @see #SAC_RADIAN + * @see #SAC_MILLISECOND + * @see #SAC_SECOND + * @see #SAC_HERTZ + * @see #SAC_KILOHERTZ + */ + public float getFloatValue(); + + /** + * Returns the string representation of the unit. + *

if this lexical unit represents a float, the dimension is an empty + * string.

+ * @see #SAC_REAL + * @see #SAC_DIMENSION + * @see #SAC_EM + * @see #SAC_EX + * @see #SAC_PIXEL + * @see #SAC_INCH + * @see #SAC_CENTIMETER + * @see #SAC_MILLIMETER + * @see #SAC_POINT + * @see #SAC_PICA + * @see #SAC_PERCENTAGE + * @see #SAC_DEGREE + * @see #SAC_GRADIAN + * @see #SAC_RADIAN + * @see #SAC_MILLISECOND + * @see #SAC_SECOND + * @see #SAC_HERTZ + * @see #SAC_KILOHERTZ + */ + public String getDimensionUnitText(); + + /** + * Returns the name of the function. + * @see #SAC_COUNTER_FUNCTION + * @see #SAC_COUNTERS_FUNCTION + * @see #SAC_RECT_FUNCTION + * @see #SAC_FUNCTION + * @see #SAC_RGBCOLOR + */ + public String getFunctionName(); + + /** + * The function parameters including operators (like the comma). + * #000 is converted to rgb(0, 0, 0) + * can return null if SAC_FUNCTION. + * @see #SAC_COUNTER_FUNCTION + * @see #SAC_COUNTERS_FUNCTION + * @see #SAC_RECT_FUNCTION + * @see #SAC_FUNCTION + * @see #SAC_RGBCOLOR + */ + public LexicalUnit getParameters(); + + /** + * Returns the string value. + *

If the type is SAC_URI, the return value doesn't contain + * uri(....) or quotes. + *

If the type is SAC_ATTR, the return value doesn't contain + * attr(....). + * + * @see #SAC_URI + * @see #SAC_ATTR + * @see #SAC_IDENT + * @see #SAC_STRING_VALUE + * @see #SAC_UNICODERANGE @@TO BE DEFINED + */ + public String getStringValue(); + + /** + * Returns a list of values inside the sub expression. + * @see #SAC_SUB_EXPRESSION + */ + public LexicalUnit getSubValues(); + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Locator.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Locator.java new file mode 100644 index 000000000..8c7aad530 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Locator.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * The original version of this interface comes from SAX : + * http://www.megginson.com/SAX/ + * + * $Id: Locator.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * Interface for associating a CSS event with a document location. + * + *

If a SAX parser provides location information to the SAX + * application, it does so by implementing this interface and then + * passing an instance to the application using the document + * handler's setDocumentLocator method. The application can use the + * object to obtain the location of any other document handler event + * in the CSS source document.

+ * + *

Note that the results returned by the object will be valid only + * during the scope of each document handler method: the application + * will receive unpredictable results if it attempts to use the + * locator at any other time.

+ * + *

CSS parsers are not required to supply a locator, but they are + * very strong encouraged to do so. If the parser supplies a + * locator, it must do so before reporting any other document events. + * If no locator has been set by the time the application receives + * the startDocument event, the application should assume that a + * locator is not available.

+ * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface Locator { + + /** + * Return the URI for the current document event. + * + *

The parser must resolve the URI fully before passing it to the + * application.

+ * + * @return A string containing the URI, or null + * if none is available. + */ + public String getURI(); + + /** + * Return the line number where the current document event ends. + * Note that this is the line position of the first character + * after the text associated with the document event. + * @return The line number, or -1 if none is available. + * @see #getColumnNumber + */ + public int getLineNumber(); + + /** + * Return the column number where the current document event ends. + * Note that this is the column number of the first + * character after the text associated with the document + * event. The first column in a line is position 1. + * @return The column number, or -1 if none is available. + * @see #getLineNumber + */ + public int getColumnNumber(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeCondition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeCondition.java new file mode 100644 index 000000000..2725652ad --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeCondition.java @@ -0,0 +1,22 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: NegativeCondition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Condition#SAC_NEGATIVE_CONDITION + */ +public interface NegativeCondition extends Condition { + + /** + * Returns the condition. + */ + public Condition getCondition(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeSelector.java new file mode 100644 index 000000000..d338a289f --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/NegativeSelector.java @@ -0,0 +1,22 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: NegativeSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_NEGATIVE_SELECTOR + */ +public interface NegativeSelector extends SimpleSelector { + + /** + * Returns the simple selector. + */ + public SimpleSelector getSimpleSelector(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Parser.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Parser.java new file mode 100644 index 000000000..0f0022d25 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Parser.java @@ -0,0 +1,221 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * The original version of this interface comes from SAX : + * http://www.megginson.com/SAX/ + * + * $Id: Parser.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +import java.io.IOException; +import java.util.Locale; + +/** + * Basic interface for CSS (Simple API for CSS) parsers. + * + *

All CSS parsers must implement this basic interface: it allows + * applications to register handlers for different types of events + * and to initiate a parse from a URI, or a character stream.

+ * + *

All CSS parsers must also implement a zero-argument constructor + * (though other constructors are also allowed).

+ * + *

CSS parsers are reusable but not re-entrant: the application + * may reuse a parser object (possibly with a different input source) + * once the first parse has completed successfully, but it may not + * invoke the parse() methods recursively within a parse.

+ * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see DocumentHandler + * @see ErrorHandler + * @see InputSource + */ +public interface Parser { + + /** + * Allow an application to request a locale for errors and warnings. + * + *

CSS parsers are not required to provide localisation for errors + * and warnings; if they cannot support the requested locale, + * however, they must throw a CSS exception. Applications may + * not request a locale change in the middle of a parse.

+ * + * @param locale A Java Locale object. + * @exception CSSException Throws an exception + * (using the previous or default locale) if the + * requested locale is not supported. + * @see CSSException + * @see CSSParseException + */ + public void setLocale(Locale locale) throws CSSException; + + /** + * Allow an application to register a document event handler. + * + *

If the application does not register a document handler, all + * document events reported by the CSS parser will be silently + * ignored (this is the default behaviour implemented by + * HandlerBase).

+ * + *

Applications may register a new or different handler in the + * middle of a parse, and the CSS parser must begin using the new + * handler immediately.

+ * + * @param handler The document handler. + * @see DocumentHandler + */ + public void setDocumentHandler(DocumentHandler handler); + + public void setSelectorFactory(SelectorFactory selectorFactory); + public void setConditionFactory(ConditionFactory conditionFactory); + + /** + * Allow an application to register an error event handler. + * + *

If the application does not register an error event handler, + * all error events reported by the CSS parser will be silently + * ignored, except for fatalError, which will throw a CSSException + * (this is the default behaviour implemented by HandlerBase).

+ * + *

Applications may register a new or different handler in the + * middle of a parse, and the CSS parser must begin using the new + * handler immediately.

+ * + * @param handler The error handler. + * @see ErrorHandler + * @see CSSException + */ + public void setErrorHandler(ErrorHandler handler); + + /** + * Parse a CSS document. + * + *

The application can use this method to instruct the CSS parser + * to begin parsing an CSS document from any valid input + * source (a character stream, a byte stream, or a URI).

+ * + *

Applications may not invoke this method while a parse is in + * progress (they should create a new Parser instead for each + * additional CSS document). Once a parse is complete, an + * application may reuse the same Parser object, possibly with a + * different input source.

+ * + * @param source The input source for the top-level of the + * CSS document. + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + * @see InputSource + * @see #parseStyleSheet(String) + * @see #setDocumentHandler + * @see #setErrorHandler + */ + public void parseStyleSheet(InputSource source) + throws CSSException, IOException; + + + /** + * Parse a CSS document from a URI. + * + *

This method is a shortcut for the common case of reading a document + * from a URI. It is the exact equivalent of the following:

+ * + *
+     * parse(new InputSource(uri));
+     * 
+ * + *

The URI must be fully resolved by the application before it is passed + * to the parser.

+ * + * @param uri The URI. + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + * @see #parseStyleSheet(InputSource) + */ + public void parseStyleSheet(String uri) throws CSSException, IOException; + + /** + * Parse a CSS style declaration (without '{' and '}'). + * + * @param styleValue The declaration. + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + */ + public void parseStyleDeclaration(InputSource source) + throws CSSException, IOException; + + + /** + * Parse a CSS rule. + * + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + */ + public void parseRule(InputSource source) throws CSSException, IOException; + + /** + * Returns a string about which CSS language is supported by this + * parser. For CSS Level 1, it returns "http://www.w3.org/TR/REC-CSS1", for + * CSS Level 2, it returns "http://www.w3.org/TR/REC-CSS2". Note that a + * "CSSx" parser can return lexical unit other than those allowed by CSS + * Level x but this usage is not recommended. + */ + public String getParserVersion(); + + /** + * Parse a comma separated list of selectors. + * + * + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + */ + public SelectorList parseSelectors(InputSource source) + throws CSSException, IOException; + + + /** + * Parse a CSS property value. + * + * + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + */ + public LexicalUnit parsePropertyValue(InputSource source) + throws CSSException, IOException; + + + /** + * Parse a CSS priority value (e.g. "!important"). + * + * + * @exception CSSException Any CSS exception, possibly + * wrapping another exception. + * @exception IOException An IO exception from the parser, + * possibly from a byte stream or character stream + * supplied by the application. + */ + public boolean parsePriority(InputSource source) + throws CSSException, IOException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/PositionalCondition.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/PositionalCondition.java new file mode 100644 index 000000000..98b9ebd32 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/PositionalCondition.java @@ -0,0 +1,36 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: PositionalCondition.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Condition#SAC_POSITIONAL_CONDITION + */ +public interface PositionalCondition extends Condition { + + /** + * Returns the position in the tree. + *

A negative value means from the end of the child node list. + *

The child node list begins at 0. + */ + public int getPosition(); + + /** + * true if the child node list only shows nodes of the same + * type of the selector (only elements, only PIS, ...) + */ + public boolean getTypeNode(); + + /** + * true if the node should have the same node type (for + * element, same namespaceURI and same localName). + */ + public boolean getType(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ProcessingInstructionSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ProcessingInstructionSelector.java new file mode 100644 index 000000000..210f8c780 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/ProcessingInstructionSelector.java @@ -0,0 +1,31 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: ProcessingInstructionSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * This simple matches a + * processing instruction. + * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_PROCESSING_INSTRUCTION_NODE_SELECTOR + */ +public interface ProcessingInstructionSelector extends SimpleSelector { + + /** + * Returns the target + * of the processing instruction. + */ + public String getTarget(); + + /** + * Returns the character data. + */ + public String getData(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SACMediaList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SACMediaList.java new file mode 100644 index 000000000..103d574db --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SACMediaList.java @@ -0,0 +1,27 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: SACMediaList.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface SACMediaList { + + /** + * Returns the length of this media list + */ + public int getLength(); + + /** + * Returns the medium at the specified index, or null if this + * is not a valid index. + */ + public String item(int index); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Selector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Selector.java new file mode 100644 index 000000000..c4d4fc562 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/Selector.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: Selector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * This interface defines a selector. + *

Remarks: Not all the following selectors are supported (or will be + * supported) by CSS. + *

All examples are CSS2 compliant. + * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface Selector { + + /* simple selectors */ + + /** + * This is a conditional selector. + * example: + *

+     *   simple[role="private"]
+     *   .part1
+     *   H1#myId
+     *   P:lang(fr).p1
+     * 
+ * + * @see ConditionalSelector + */ + public static final short SAC_CONDITIONAL_SELECTOR = 0; + + /** + * This selector matches any node. + * @see SimpleSelector + */ + public static final short SAC_ANY_NODE_SELECTOR = 1; + + /** + * This selector matches the root node. + * @see SimpleSelector + */ + public static final short SAC_ROOT_NODE_SELECTOR = 2; + + /** + * This selector matches only node that are different from a specified one. + * @see NegativeSelector + */ + public static final short SAC_NEGATIVE_SELECTOR = 3; + + /** + * This selector matches only element node. + * example: + *
+     *   H1
+     *   animate
+     * 
+ * @see ElementSelector + */ + public static final short SAC_ELEMENT_NODE_SELECTOR = 4; + + /** + * This selector matches only text node. + * @see CharacterDataSelector + */ + public static final short SAC_TEXT_NODE_SELECTOR = 5; + + /** + * This selector matches only cdata node. + * @see CharacterDataSelector + */ + public static final short SAC_CDATA_SECTION_NODE_SELECTOR = 6; + + /** + * This selector matches only processing instruction node. + * @see ProcessingInstructionSelector + */ + public static final short SAC_PROCESSING_INSTRUCTION_NODE_SELECTOR = 7; + + /** + * This selector matches only comment node. + * @see CharacterDataSelector + */ + public static final short SAC_COMMENT_NODE_SELECTOR = 8; + /** + * This selector matches the 'first line' pseudo element. + * example: + *
+     *   :first-line
+     * 
+ * @see ElementSelector + */ + public static final short SAC_PSEUDO_ELEMENT_SELECTOR = 9; + + /* combinator selectors */ + + /** + * This selector matches an arbitrary descendant of some ancestor element. + * example: + *
+     *   E F
+     * 
+ * @see DescendantSelector + */ + public static final short SAC_DESCENDANT_SELECTOR = 10; + + /** + * This selector matches a childhood relationship between two elements. + * example: + *
+     *   E > F
+     * 
+ * @see DescendantSelector + */ + public static final short SAC_CHILD_SELECTOR = 11; + /** + * This selector matches two selectors who shared the same parent in the + * document tree and the element represented by the first sequence + * immediately precedes the element represented by the second one. + * example: + *
+     *   E + F
+     * 
+ * @see SiblingSelector + */ + public static final short SAC_DIRECT_ADJACENT_SELECTOR = 12; + + /** + * An integer indicating the type of Selector + */ + public short getSelectorType(); + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorFactory.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorFactory.java new file mode 100644 index 000000000..46738ecdd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorFactory.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: SelectorFactory.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see org.w3c.css.sac.Selector + */ +public interface SelectorFactory { + + /** + * Creates a conditional selector. + * + * @param selector a selector. + * @param condition a condition + * @return the conditional selector. + * @exception CSSException If this selector is not supported. + */ + ConditionalSelector createConditionalSelector(SimpleSelector selector, + Condition condition) + throws CSSException; + + /** + * Creates an any node selector. + * + * @return the any node selector. + * @exception CSSException If this selector is not supported. + */ + SimpleSelector createAnyNodeSelector() throws CSSException; + + /** + * Creates an root node selector. + * + * @return the root node selector. + * @exception CSSException If this selector is not supported. + */ + SimpleSelector createRootNodeSelector() throws CSSException; + + /** + * Creates an negative selector. + * + * @param selector a selector. + * @return the negative selector. + * @exception CSSException If this selector is not supported. + */ + NegativeSelector createNegativeSelector(SimpleSelector selector) + throws CSSException; + + /** + * Creates an element selector. + * + * @param namespaceURI the namespace + * URI of the element selector. + * @param tagName the local + * part of the element name. NULL if this element + * selector can match any element.

+ * @return the element selector + * @exception CSSException If this selector is not supported. + */ + ElementSelector createElementSelector(String namespaceURI, String tagName) + throws CSSException; + + /** + * Creates a text node selector. + * + * @param data the data + * @return the text node selector + * @exception CSSException If this selector is not supported. + */ + CharacterDataSelector createTextNodeSelector(String data) + throws CSSException; + + /** + * Creates a cdata section node selector. + * + * @param data the data + * @return the cdata section node selector + * @exception CSSException If this selector is not supported. + */ + CharacterDataSelector createCDataSectionSelector(String data) + throws CSSException; + + /** + * Creates a processing instruction node selector. + * + * @param target the target + * @param data the data + * @return the processing instruction node selector + * @exception CSSException If this selector is not supported. + */ + ProcessingInstructionSelector + createProcessingInstructionSelector(String target, + String data) + throws CSSException; + + /** + * Creates a comment node selector. + * + * @param data the data + * @return the comment node selector + * @exception CSSException If this selector is not supported. + */ + CharacterDataSelector createCommentSelector(String data) + throws CSSException; + + /** + * Creates a pseudo element selector. + * + * @param pseudoName the pseudo element name. NULL if this + * element selector can match any pseudo element.

+ * @return the element selector + * @exception CSSException If this selector is not supported. + */ + ElementSelector createPseudoElementSelector(String namespaceURI, + String pseudoName) + throws CSSException; + + /** + * Creates a descendant selector. + * + * @param parent the parent selector + * @param descendant the descendant selector + * @return the combinator selector. + * @exception CSSException If this selector is not supported. + */ + DescendantSelector createDescendantSelector(Selector parent, + SimpleSelector descendant) + throws CSSException; + + /** + * Creates a child selector. + * + * @param parent the parent selector + * @param child the child selector + * @return the combinator selector. + * @exception CSSException If this selector is not supported. + */ + DescendantSelector createChildSelector(Selector parent, + SimpleSelector child) + throws CSSException; + + /** + * Creates a sibling selector. + * + * @param nodeType the type of nodes in the siblings list. + * @param child the child selector + * @param adjacent the direct adjacent selector + * @return the sibling selector with nodeType + equals to org.w3c.dom.Node.ELEMENT_NODE + * @exception CSSException If this selector is not supported. + */ + SiblingSelector createDirectAdjacentSelector(short nodeType, + Selector child, + SimpleSelector directAdjacent) + throws CSSException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorList.java new file mode 100644 index 000000000..ffd229656 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SelectorList.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: SelectorList.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * The SelectorList interface provides the abstraction of an ordered collection + * of selectors, without defining or constraining how this collection is + * implemented. + * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public interface SelectorList { + + /** + * Returns the length of this selector list + */ + public int getLength(); + + /** + * Returns the selector at the specified index, or null if this + * is not a valid index. + */ + public Selector item(int index); +} + diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SiblingSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SiblingSelector.java new file mode 100644 index 000000000..fe007963e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SiblingSelector.java @@ -0,0 +1,36 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: SiblingSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + * @see Selector#SAC_DIRECT_ADJACENT_SELECTOR + */ +public interface SiblingSelector extends Selector { + + public static final short ANY_NODE = 201; + + /** + * The node type to considered in the siblings list. + * All DOM node types are supported. In order to support the "any" node + * type, the code ANY_NODE is added to the DOM node types. + */ + public short getNodeType(); + + /** + * Returns the first selector. + */ + public Selector getSelector(); + + /* + * Returns the second selector. + */ + public SimpleSelector getSiblingSelector(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SimpleSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SimpleSelector.java new file mode 100644 index 000000000..8d7d09c8d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/SimpleSelector.java @@ -0,0 +1,21 @@ +/* + * (c) COPYRIGHT 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: SimpleSelector.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac; + +/** + * This interface is only for constraints on selectors. + * + *

A ConditionalSelector can only accept a simple selector or a + * negative selector.

+ * + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret */ +public interface SimpleSelector extends Selector { + // empty +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/helpers/ParserFactory.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/helpers/ParserFactory.java new file mode 100644 index 000000000..85bfa5653 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/css/sac/helpers/ParserFactory.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 1999 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + * $Id: ParserFactory.java 477010 2006-11-20 02:54:38Z mrglavas $ + */ +package org.w3c.css.sac.helpers; + +import org.w3c.css.sac.Parser; + +/** + * @version $Revision: 477010 $ + * @author Philippe Le Hegaret + */ +public class ParserFactory { + + /** + * Create a parser with given selectors factory and conditions factory. + */ + public Parser makeParser() + throws ClassNotFoundException, + IllegalAccessException, + InstantiationException, + NullPointerException, + ClassCastException { + String className = System.getProperty("org.w3c.css.sac.parser"); + if (className == null) { + throw new NullPointerException("No value for sac.parser property"); + } else { + return (Parser)(Class.forName(className).newInstance()); + } + } +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/ElementTraversal.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/ElementTraversal.java new file mode 100644 index 000000000..16406b532 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/ElementTraversal.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009 World Wide Web Consortium, + * + * (Massachusetts Institute of Technology, European Research Consortium for + * Informatics and Mathematics, Keio University). All Rights Reserved. This + * work is distributed under the W3C(r) Software License [1] in the hope that + * it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + */ + +package org.w3c.dom; + +/** + * The ElementTraversal interface is a set of read-only attributes + * which allow an author to easily navigate between elements in a document. + *

In conforming implementations of Element Traversal, all objects that + * implement {@link Element} must also implement the + * ElementTraversal interface. Four of the methods, + * {@link #getFirstElementChild}, {@link #getLastElementChild}, + * {@link #getPreviousElementSibling}, and {@link #getNextElementSibling}, + * each return a live reference to another element with the defined + * relationship to the current element, if the related element exists. The + * fifth method, {@link #getChildElementCount}, exposes the number of child + * elements of an element, for preprocessing before navigation. + *

See also the + * Element Traversal Specification. + */ +public interface ElementTraversal { + + /** + * Returns the first child element node of this element. null + * if this element has no child elements. + */ + Element getFirstElementChild(); + + /** + * Returns the last child element node of this element. null + * if this element has no child elements. + */ + Element getLastElementChild(); + + /** + * Returns the previous sibling element node of this element. + * null if this element has no element sibling nodes that + * come before this one in the document tree. + */ + Element getPreviousElementSibling(); + + /** + * Returns the next sibling element node of this element. + * null if this element has no element sibling nodes that + * come after this one in the document tree. + */ + Element getNextElementSibling(); + + /** + * Returns the current number of element nodes that are children of this + * element. 0 if this element has no child nodes that are of + * nodeType 1. + */ + int getChildElementCount(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/ElementTimeControl.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/ElementTimeControl.java new file mode 100644 index 000000000..fe6ae4ee1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/ElementTimeControl.java @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2001 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + * + */ +package org.w3c.dom.smil; + +import org.w3c.dom.DOMException; + +/** + *

SMILAnimation + * supports several methods for controlling the behavior of animation: + * beginElement() and endElement(), et al. These + * methods are used to begin and end an animation that has declared the timing + * to respond to the DOM, using the following syntax:

+ *
<animate begin="indefinite" end="indefinite" .../>
+ * + *

Note that only one of begin or end need be + * specified - either or both can be used. The beginElement() + * and beginElementAt() methods must do nothing if the animation + * is not explicitly set with the begin="indefinite" syntax + * above. The endElement() and endElementAt() + * methods must do nothing if the animation is not explicitly set with the + * end="indefinite" syntax above.

+ * + *

Calling beginElement() causes the animation to begin in much + * the same way that an animation with event-based begin timing begins. The + * effective begin time is the current presentation time at the time of the DOM + * method call. Note that beginElement() is subject to the + * restart attribute in the same manner that event-based begin + * timing is. If an animation is specified to disallow restarting at a given + * point, beginElement() methods calls must fail. Refer also to + * the section Restarting + * animations.

+ * + *

Calling beginElementAt() has the same effect as + * beginElement(), except that the effective begin time is offset + * from the current presentation time by an amount specified as a parameter. + * Passing a negative value for the offset causes the element to begin as for + * beginElement(), but has the effect that the element begins at + * the specified offset into its active duration. The + * beginElementAt() method must also respect the + * restart attribute. The restart semantics for a + * beginElementAt() method call are evaluated at the time of the + * method call, and not at the effective begin time specified by the offset + * parameter.

+ * + *

Calling endElement() causes an animation to end the active + * duration, just as end does. Depending upon the value of the + * fill attribute, the animation effect may no longer be applied, + * or it may be frozen at the current effect. Refer also to the section Freezing animations. If an animation is not currently + * active (i.e. if it has not yet begun or if it is frozen), the + * endElement() method will fail.

+ * + *

Calling endElementAt() causes an animation to end the active + * duration, just as endElement() does, but allows the caller to + * specify a positive offset, to cause the element to end at a point in the + * future. Other than delaying when the end actually happens, the semantics are + * identical to those for endElement(). If + * endElementAt() is called more than once while an element is + * active, the end time specified by the last method call will determine the + * end behavior.

+ * + *

The expectation of the following interface is that an instance of the + * ElementTimeControl interface can be obtained by using binding-specific + * casting methods on an instance of an animate element. A DOM application can + * use the hasFeature method of the DOMImplementation + * interface to determine whether the ElementTimeControl interface is + * supported or not. The feature string for this interface is + * "TimeControl".

+ * + * @see SMIL Animation. + */ +public interface ElementTimeControl { + /** + * Causes this element to begin the local timeline (subject to restart constraints). + * @return true if the method call was successful and the + * element was begun. false if the method call + * failed. Possible reasons for failure include: + *
    + *
  • The element does not support the beginElement + * method. The begin attribute is not set to + * "indefinite".
  • + *
  • The element is already active and cannot be restarted when it is + * active. The restart attribute is set to + * "whenNotActive".
  • + *
  • The element is active or has been active and cannot be + * restarted. The restart attribute is set to + * "never".
  • + *
+ * @raise DOMException SYNTAX_ERR: The element was not defined + * with the appropriate syntax to allow beginElement calls. + */ + public boolean beginElement() + throws DOMException; + + /** + * Causes this element to begin the local timeline (subject to restart + * constraints), at the passed offset from the current time when the method + * is called. If the offset is >= 0, the semantics are equivalent to an + * event-base begin with the specified offset. If the offset is < 0, the + * semantics are equivalent to beginElement(), but the element active + * duration is evaluated as though the element had begun at the passed + * (negative) offset from the current time when the method is called. + * + * @param offset The offset in seconds at which to begin the element. + * @return true if the method call was successful and the element was begun. + * false if the method call failed. + * Possible reasons for failure include: + *
    + *
  • The element does not support the + * beginElementAt method. The + * begin attribute is not set to + * "indefinite".
  • + *
  • The element is already active and cannot be + * restarted when it is active. The + * restart attribute is set to + * "whenNotActive".
  • + *
  • The element is active or has been active and + * cannot be restarted. The restart + * attribute is set to "never".
  • + *
+ * @raise DOMException SYNTAX_ERR: The element was not defined with the appropriate + * syntax to allow beginElementAt calls. + */ + public boolean beginElementAt(float offset) + throws DOMException; + + /** + * Causes this element to end the local timeline. + * + * @return true if the method call was + * successful and the element was ended. + * false if method call failed. Possible + * reasons for failure include: + *
    + *
  • The element does not support the + * endElement method. The + * end attribute is not set to + * "indefinite".
  • + *
  • The element is not active.
  • + *
+ * @raise DOMException SYNTAX_ERR: The element was not defined with the + * appropriate syntax to allow endElement + * calls. + */ + public boolean endElement() + throws DOMException; + + /** + * Causes this element to end the local timeline at the specified offset + * from the current time when the method is called + * + * @param offset The offset in seconds at which to end the element. + * Must be >= 0. + * @return true if the method call was + * successful and the element was ended. + * false if method call failed. Possible + * reasons for failure include: + *
    + *
  • The element does not support the + * endElementAt method. The + * end attribute is not set to + * "indefinite".
  • + *
  • The element is not active.
  • + *
+ * @raise DOMException SYNTAX_ERR: The element was not defined with the + * appropriate syntax to allow + * endElementAt calls. + */ + public boolean endElementAt(float offset) + throws DOMException; + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/TimeEvent.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/TimeEvent.java new file mode 100644 index 000000000..1a2c5d241 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/smil/TimeEvent.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2001 World Wide Web Consortium, + * (Massachusetts Institute of Technology, Institut National de + * Recherche en Informatique et en Automatique, Keio University). All + * Rights Reserved. This program is distributed under the W3C's Software + * Intellectual Property License. This program is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. + * See W3C License http://www.w3.org/Consortium/Legal/ for more details. + */ +package org.w3c.dom.smil; + +import org.w3c.dom.events.Event; +import org.w3c.dom.views.AbstractView; + +/** + * The TimeEvent interface provides specific contextual + * information associated with Time events. + * + * @see SMIL Animation. + */ +public interface TimeEvent extends Event { + + /** + * The view attribute identifies the AbstractView + * from which the event was generated. + */ + public AbstractView getView(); + + /** + * Specifies some detail information about the Event, + * depending on the type of event. + */ + public int getDetail(); + + /** + * The initTimeEvent method is used to initialize the value of + * a TimeEvent created through the DocumentEvent + * interface. This method may only be called before the + * TimeEvent has been dispatched via the + * dispatchEvent method, though it may be called multiple + * times during that phase if necessary. If called multiple times, the + * final invocation takes precedence. + * + *

The different types of events that can occur are:

+ * + *
+ *
begin
+ *
This event is raised when the element local timeline begins to play. + * It will be raised each time the element begins the active duration (i.e. + * when it restarts, but not when it repeats). It may be raised both in the + * course of normal (i.e. scheduled or interactive) timeline play, as well + * as in the case that the element was begun with the + * beginElement() or beginElementAt() methods. Note + * that if an element is restarted while it is currently playing, the + * element will raise an end event and another begin event, as the element + * restarts. + *
    + *
  • Bubbles: No
  • + *
  • Cancelable: No
  • + *
  • Context Info: None
  • + *
+ *
+ *
end
+ *
This event is raised at the active end of the element. Note that + * this event is not raised at the simple end of each repeat. This event + * may be raised both in the course of normal (i.e. scheduled or + * interactive) timeline play, as well as in the case that the element was + * ended with the endElement() or + * endElementAt() methods. Note that if an element is restarted + * while it is currently playing, the element will raise an end event and + * another begin event, as the element restarts. + *
    + *
  • Bubbles: No
  • + *
  • Cancelable: No
  • + *
  • Context Info: None
  • + *
+ *
+ *
repeat
+ *
This event is raised when the element local timeline repeats. It + * will be raised each time the element repeats, after the first + * iteration.
The event provides a numerical indication of which repeat + * iteration is beginning. The value is a 0-based integer, but the repeat + * event is not raised for the first iteration and so the observed values + * of the detail attribute will be >= 1. + *
    + *
  • Bubbles: No
  • + *
  • Cancelable: No
  • + *
  • Context Info: detail (current iteration)
  • + *
+ *
+ *
+ * + * @param typeArg Specifies the event type. + * @param viewArg Specifies the Event's + * AbstractView. + * @param detailArg Specifies the Event's detail. */ + public void initTimeEvent(String typeArg, + AbstractView viewArg, + int detailArg); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/EventListenerInitializer.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/EventListenerInitializer.java new file mode 100644 index 000000000..8f95cdc52 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/EventListenerInitializer.java @@ -0,0 +1,45 @@ +/* + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + */ +package org.w3c.dom.svg; + +/** + * This interface must be implemented in order to call Java code from + * an SVG document. + * + * A EventListenerInitializer instance is called when + * a 'script' element's 'type' attribute value is 'application/java-archive' and when + * the manifest of the jar file referenced by the 'xlink:href' attribute contains + * a 'SVG-Handler-Class' entry. The value of this entry must be the classname of the + * EventListenerInitializer to call. + * + * This classes implementing this interface must have a default + * constructor. + * + * @version $Id: EventListenerInitializer.java 477018 2006-11-20 03:24:32Z mrglavas $ + */ +public interface EventListenerInitializer { + + /** + * This method is called by the SVG viewer + * when the scripts are loaded to register + * the listener needed. + * @param doc The current document. + */ + public void initializeEventListeners(SVGDocument doc); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/GetSVGDocument.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/GetSVGDocument.java new file mode 100644 index 000000000..91b05fba2 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/GetSVGDocument.java @@ -0,0 +1,9 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface GetSVGDocument { + public SVGDocument getSVGDocument() + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAElement.java new file mode 100644 index 000000000..965663dc4 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAElement.java @@ -0,0 +1,16 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGAElement extends + SVGElement, + SVGURIReference, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedString getTarget(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphDefElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphDefElement.java new file mode 100644 index 000000000..c8e4d2dd0 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphDefElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGAltGlyphDefElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphElement.java new file mode 100644 index 000000000..cdcac490a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphElement.java @@ -0,0 +1,15 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAltGlyphElement extends + SVGTextPositioningElement, + SVGURIReference { + public String getGlyphRef(); + public void setGlyphRef(String glyphRef) + throws DOMException; + public String getFormat(); + public void setFormat(String format) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphItemElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphItemElement.java new file mode 100644 index 000000000..93c01b3d5 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAltGlyphItemElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGAltGlyphItemElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAngle.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAngle.java new file mode 100644 index 000000000..5654483ee --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAngle.java @@ -0,0 +1,27 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAngle { + // Angle Unit Types + public static final short SVG_ANGLETYPE_UNKNOWN = 0; + public static final short SVG_ANGLETYPE_UNSPECIFIED = 1; + public static final short SVG_ANGLETYPE_DEG = 2; + public static final short SVG_ANGLETYPE_RAD = 3; + public static final short SVG_ANGLETYPE_GRAD = 4; + + public short getUnitType(); + public float getValue(); + public void setValue(float value) + throws DOMException; + public float getValueInSpecifiedUnits(); + public void setValueInSpecifiedUnits(float valueInSpecifiedUnits) + throws DOMException; + public String getValueAsString(); + public void setValueAsString(String valueAsString) + throws DOMException; + + public void newValueSpecifiedUnits(short unitType, float valueInSpecifiedUnits); + public void convertToSpecifiedUnits(short unitType); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateColorElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateColorElement.java new file mode 100644 index 000000000..9efb69aab --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateColorElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimateColorElement extends + SVGAnimationElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateElement.java new file mode 100644 index 000000000..4d365b257 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimateElement extends + SVGAnimationElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateMotionElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateMotionElement.java new file mode 100644 index 000000000..a06728dde --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateMotionElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimateMotionElement extends + SVGAnimationElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateTransformElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateTransformElement.java new file mode 100644 index 000000000..1f4ac36cd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimateTransformElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimateTransformElement extends + SVGAnimationElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedAngle.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedAngle.java new file mode 100644 index 000000000..386cf67d8 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedAngle.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedAngle { + public SVGAngle getBaseVal(); + public SVGAngle getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedBoolean.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedBoolean.java new file mode 100644 index 000000000..d48f51769 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedBoolean.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAnimatedBoolean { + public boolean getBaseVal(); + public void setBaseVal(boolean baseVal) + throws DOMException; + public boolean getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedEnumeration.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedEnumeration.java new file mode 100644 index 000000000..dfd56f8c1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedEnumeration.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAnimatedEnumeration { + public short getBaseVal(); + public void setBaseVal(short baseVal) + throws DOMException; + public short getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedInteger.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedInteger.java new file mode 100644 index 000000000..1c58fa6fc --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedInteger.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAnimatedInteger { + public int getBaseVal(); + public void setBaseVal(int baseVal) + throws DOMException; + public int getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLength.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLength.java new file mode 100644 index 000000000..8372eeb1e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLength.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedLength { + public SVGLength getBaseVal(); + public SVGLength getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLengthList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLengthList.java new file mode 100644 index 000000000..0680973d6 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedLengthList.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedLengthList { + public SVGLengthList getBaseVal(); + public SVGLengthList getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumber.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumber.java new file mode 100644 index 000000000..b73acccbd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumber.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAnimatedNumber { + public float getBaseVal(); + public void setBaseVal(float baseVal) + throws DOMException; + public float getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumberList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumberList.java new file mode 100644 index 000000000..b6a8a32dd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedNumberList.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedNumberList { + public SVGNumberList getBaseVal(); + public SVGNumberList getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPathData.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPathData.java new file mode 100644 index 000000000..6669517f9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPathData.java @@ -0,0 +1,9 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedPathData { + public SVGPathSegList getPathSegList(); + public SVGPathSegList getNormalizedPathSegList(); + public SVGPathSegList getAnimatedPathSegList(); + public SVGPathSegList getAnimatedNormalizedPathSegList(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPoints.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPoints.java new file mode 100644 index 000000000..8973c7147 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPoints.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedPoints { + public SVGPointList getPoints(); + public SVGPointList getAnimatedPoints(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPreserveAspectRatio.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPreserveAspectRatio.java new file mode 100644 index 000000000..51bdfcea0 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedPreserveAspectRatio.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedPreserveAspectRatio { + public SVGPreserveAspectRatio getBaseVal(); + public SVGPreserveAspectRatio getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedRect.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedRect.java new file mode 100644 index 000000000..4166aa468 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedRect.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedRect { + public SVGRect getBaseVal(); + public SVGRect getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedString.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedString.java new file mode 100644 index 000000000..d84cc9c74 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedString.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGAnimatedString { + public String getBaseVal(); + public void setBaseVal(String baseVal) + throws DOMException; + public String getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedTransformList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedTransformList.java new file mode 100644 index 000000000..bc1e85fb1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimatedTransformList.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGAnimatedTransformList { + public SVGTransformList getBaseVal(); + public SVGTransformList getAnimVal(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimationElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimationElement.java new file mode 100644 index 000000000..0723bfeac --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGAnimationElement.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; +import org.w3c.dom.events.EventTarget; +import org.w3c.dom.smil.ElementTimeControl; + +public interface SVGAnimationElement extends + SVGElement, + SVGTests, + SVGExternalResourcesRequired, + ElementTimeControl, + EventTarget { + public SVGElement getTargetElement(); + + public float getStartTime(); + public float getCurrentTime(); + public float getSimpleDuration() + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCSSRule.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCSSRule.java new file mode 100644 index 000000000..5365e5dfd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCSSRule.java @@ -0,0 +1,10 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.css.CSSRule; + +public interface SVGCSSRule extends + CSSRule { + // Additional CSS RuleType to support ICC color specifications + public static final short COLOR_PROFILE_RULE = 7; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCircleElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCircleElement.java new file mode 100644 index 000000000..892105269 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCircleElement.java @@ -0,0 +1,17 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGCircleElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getCx(); + public SVGAnimatedLength getCy(); + public SVGAnimatedLength getR(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGClipPathElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGClipPathElement.java new file mode 100644 index 000000000..7e758f059 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGClipPathElement.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +public interface SVGClipPathElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + SVGUnitTypes { + public SVGAnimatedEnumeration getClipPathUnits(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColor.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColor.java new file mode 100644 index 000000000..fed16560c --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColor.java @@ -0,0 +1,25 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.css.CSSValue; +import org.w3c.dom.css.RGBColor; + +public interface SVGColor extends + CSSValue { + // Color Types + public static final short SVG_COLORTYPE_UNKNOWN = 0; + public static final short SVG_COLORTYPE_RGBCOLOR = 1; + public static final short SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2; + public static final short SVG_COLORTYPE_CURRENTCOLOR = 3; + + public short getColorType(); + public RGBColor getRGBColor(); + public SVGICCColor getICCColor(); + + public void setRGBColor(String rgbColor) + throws SVGException; + public void setRGBColorICCColor(String rgbColor, String iccColor) + throws SVGException; + public void setColor(short colorType, String rgbColor, String iccColor) + throws SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileElement.java new file mode 100644 index 000000000..5e49d9ac7 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileElement.java @@ -0,0 +1,19 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGColorProfileElement extends + SVGElement, + SVGURIReference, + SVGRenderingIntent { + public String getLocal(); + public void setLocal(String local) + throws DOMException; + public String getName(); + public void setName(String name) + throws DOMException; + public short getRenderingIntent(); + public void setRenderingIntent(short renderingIntent) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileRule.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileRule.java new file mode 100644 index 000000000..3ff91bbbe --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGColorProfileRule.java @@ -0,0 +1,18 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGColorProfileRule extends + SVGCSSRule, + SVGRenderingIntent { + public String getSrc(); + public void setSrc(String src) + throws DOMException; + public String getName(); + public void setName(String name) + throws DOMException; + public short getRenderingIntent(); + public void setRenderingIntent(short renderingIntent) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGComponentTransferFunctionElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGComponentTransferFunctionElement.java new file mode 100644 index 000000000..11af0e8e8 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGComponentTransferFunctionElement.java @@ -0,0 +1,21 @@ + +package org.w3c.dom.svg; + +public interface SVGComponentTransferFunctionElement extends + SVGElement { + // Component Transfer Types + public static final short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0; + public static final short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1; + public static final short SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2; + public static final short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3; + public static final short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4; + public static final short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5; + + public SVGAnimatedEnumeration getType(); + public SVGAnimatedNumberList getTableValues(); + public SVGAnimatedNumber getSlope(); + public SVGAnimatedNumber getIntercept(); + public SVGAnimatedNumber getAmplitude(); + public SVGAnimatedNumber getExponent(); + public SVGAnimatedNumber getOffset(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCursorElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCursorElement.java new file mode 100644 index 000000000..b17af59b5 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGCursorElement.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +public interface SVGCursorElement extends + SVGElement, + SVGURIReference, + SVGTests, + SVGExternalResourcesRequired { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefinitionSrcElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefinitionSrcElement.java new file mode 100644 index 000000000..4123b5a97 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefinitionSrcElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGDefinitionSrcElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefsElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefsElement.java new file mode 100644 index 000000000..6b83bedc3 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDefsElement.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGDefsElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDescElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDescElement.java new file mode 100644 index 000000000..d3eaf7384 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDescElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGDescElement extends + SVGElement, + SVGLangSpace, + SVGStylable { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDocument.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDocument.java new file mode 100644 index 000000000..53dab0f91 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGDocument.java @@ -0,0 +1,15 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.Document; +import org.w3c.dom.events.DocumentEvent; + +public interface SVGDocument extends + Document, + DocumentEvent { + public String getTitle(); + public String getReferrer(); + public String getDomain(); + public String getURL(); + public SVGSVGElement getRootElement(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElement.java new file mode 100644 index 000000000..4d45e1b3a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElement.java @@ -0,0 +1,17 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; +import org.w3c.dom.Element; + +public interface SVGElement extends + Element { + public String getId(); + public void setId(String id) + throws DOMException; + public String getXMLbase(); + public void setXMLbase(String xmlbase) + throws DOMException; + public SVGSVGElement getOwnerSVGElement(); + public SVGElement getViewportElement(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstance.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstance.java new file mode 100644 index 000000000..1094ee1ce --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstance.java @@ -0,0 +1,16 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGElementInstance extends + EventTarget { + public SVGElement getCorrespondingElement(); + public SVGUseElement getCorrespondingUseElement(); + public SVGElementInstance getParentNode(); + public SVGElementInstanceList getChildNodes(); + public SVGElementInstance getFirstChild(); + public SVGElementInstance getLastChild(); + public SVGElementInstance getPreviousSibling(); + public SVGElementInstance getNextSibling(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstanceList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstanceList.java new file mode 100644 index 000000000..5325fb996 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGElementInstanceList.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGElementInstanceList { + public int getLength(); + + public SVGElementInstance item(int index); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEllipseElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEllipseElement.java new file mode 100644 index 000000000..374070292 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEllipseElement.java @@ -0,0 +1,18 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGEllipseElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getCx(); + public SVGAnimatedLength getCy(); + public SVGAnimatedLength getRx(); + public SVGAnimatedLength getRy(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEvent.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEvent.java new file mode 100644 index 000000000..252825ba7 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGEvent.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.Event; + +public interface SVGEvent extends + Event { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGException.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGException.java new file mode 100644 index 000000000..557ce43a1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGException.java @@ -0,0 +1,13 @@ +package org.w3c.dom.svg; + +public abstract class SVGException extends RuntimeException { + public SVGException(short code, String message) { + super(message); + this.code = code; + } + public short code; + // ExceptionCode + public static final short SVG_WRONG_TYPE_ERR = 0; + public static final short SVG_INVALID_VALUE_ERR = 1; + public static final short SVG_MATRIX_NOT_INVERTABLE = 2; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGExternalResourcesRequired.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGExternalResourcesRequired.java new file mode 100644 index 000000000..26f97ab97 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGExternalResourcesRequired.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGExternalResourcesRequired { + public SVGAnimatedBoolean getExternalResourcesRequired(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEBlendElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEBlendElement.java new file mode 100644 index 000000000..92ca303fd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEBlendElement.java @@ -0,0 +1,18 @@ + +package org.w3c.dom.svg; + +public interface SVGFEBlendElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Blend Mode Types + public static final short SVG_FEBLEND_MODE_UNKNOWN = 0; + public static final short SVG_FEBLEND_MODE_NORMAL = 1; + public static final short SVG_FEBLEND_MODE_MULTIPLY = 2; + public static final short SVG_FEBLEND_MODE_SCREEN = 3; + public static final short SVG_FEBLEND_MODE_DARKEN = 4; + public static final short SVG_FEBLEND_MODE_LIGHTEN = 5; + + public SVGAnimatedString getIn1(); + public SVGAnimatedString getIn2(); + public SVGAnimatedEnumeration getMode(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEColorMatrixElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEColorMatrixElement.java new file mode 100644 index 000000000..5dc555125 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEColorMatrixElement.java @@ -0,0 +1,17 @@ + +package org.w3c.dom.svg; + +public interface SVGFEColorMatrixElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Color Matrix Types + public static final short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0; + public static final short SVG_FECOLORMATRIX_TYPE_MATRIX = 1; + public static final short SVG_FECOLORMATRIX_TYPE_SATURATE = 2; + public static final short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3; + public static final short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4; + + public SVGAnimatedString getIn1(); + public SVGAnimatedEnumeration getType(); + public SVGAnimatedNumberList getValues(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEComponentTransferElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEComponentTransferElement.java new file mode 100644 index 000000000..3fa8f8478 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEComponentTransferElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGFEComponentTransferElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFECompositeElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFECompositeElement.java new file mode 100644 index 000000000..82522c26c --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFECompositeElement.java @@ -0,0 +1,23 @@ + +package org.w3c.dom.svg; + +public interface SVGFECompositeElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Composite Operators + public static final short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0; + public static final short SVG_FECOMPOSITE_OPERATOR_OVER = 1; + public static final short SVG_FECOMPOSITE_OPERATOR_IN = 2; + public static final short SVG_FECOMPOSITE_OPERATOR_OUT = 3; + public static final short SVG_FECOMPOSITE_OPERATOR_ATOP = 4; + public static final short SVG_FECOMPOSITE_OPERATOR_XOR = 5; + public static final short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6; + + public SVGAnimatedString getIn1(); + public SVGAnimatedString getIn2(); + public SVGAnimatedEnumeration getOperator(); + public SVGAnimatedNumber getK1(); + public SVGAnimatedNumber getK2(); + public SVGAnimatedNumber getK3(); + public SVGAnimatedNumber getK4(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEConvolveMatrixElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEConvolveMatrixElement.java new file mode 100644 index 000000000..1b86d1064 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEConvolveMatrixElement.java @@ -0,0 +1,24 @@ + +package org.w3c.dom.svg; + +public interface SVGFEConvolveMatrixElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Edge Mode Values + public static final short SVG_EDGEMODE_UNKNOWN = 0; + public static final short SVG_EDGEMODE_DUPLICATE = 1; + public static final short SVG_EDGEMODE_WRAP = 2; + public static final short SVG_EDGEMODE_NONE = 3; + + public SVGAnimatedInteger getOrderX(); + public SVGAnimatedInteger getOrderY(); + public SVGAnimatedNumberList getKernelMatrix(); + public SVGAnimatedNumber getDivisor(); + public SVGAnimatedNumber getBias(); + public SVGAnimatedInteger getTargetX(); + public SVGAnimatedInteger getTargetY(); + public SVGAnimatedEnumeration getEdgeMode(); + public SVGAnimatedNumber getKernelUnitLengthX(); + public SVGAnimatedNumber getKernelUnitLengthY(); + public SVGAnimatedBoolean getPreserveAlpha(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDiffuseLightingElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDiffuseLightingElement.java new file mode 100644 index 000000000..a0729c4da --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDiffuseLightingElement.java @@ -0,0 +1,11 @@ +package org.w3c.dom.svg; + +public interface SVGFEDiffuseLightingElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); + public SVGAnimatedNumber getSurfaceScale(); + public SVGAnimatedNumber getDiffuseConstant(); + public SVGAnimatedNumber getKernelUnitLengthX(); + public SVGAnimatedNumber getKernelUnitLengthY(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDisplacementMapElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDisplacementMapElement.java new file mode 100644 index 000000000..dc7ebbfec --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDisplacementMapElement.java @@ -0,0 +1,19 @@ + +package org.w3c.dom.svg; + +public interface SVGFEDisplacementMapElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Channel Selectors + public static final short SVG_CHANNEL_UNKNOWN = 0; + public static final short SVG_CHANNEL_R = 1; + public static final short SVG_CHANNEL_G = 2; + public static final short SVG_CHANNEL_B = 3; + public static final short SVG_CHANNEL_A = 4; + + public SVGAnimatedString getIn1(); + public SVGAnimatedString getIn2(); + public SVGAnimatedNumber getScale(); + public SVGAnimatedEnumeration getXChannelSelector(); + public SVGAnimatedEnumeration getYChannelSelector(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDistantLightElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDistantLightElement.java new file mode 100644 index 000000000..65671614c --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEDistantLightElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGFEDistantLightElement extends + SVGElement { + public SVGAnimatedNumber getAzimuth(); + public SVGAnimatedNumber getElevation(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFloodElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFloodElement.java new file mode 100644 index 000000000..49a6f41a3 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFloodElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGFEFloodElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncAElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncAElement.java new file mode 100644 index 000000000..fa9773524 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncAElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFEFuncAElement extends + SVGComponentTransferFunctionElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncBElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncBElement.java new file mode 100644 index 000000000..17733d62b --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncBElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFEFuncBElement extends + SVGComponentTransferFunctionElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncGElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncGElement.java new file mode 100644 index 000000000..5078436f1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncGElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFEFuncGElement extends + SVGComponentTransferFunctionElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncRElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncRElement.java new file mode 100644 index 000000000..72efaac9d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEFuncRElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFEFuncRElement extends + SVGComponentTransferFunctionElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEGaussianBlurElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEGaussianBlurElement.java new file mode 100644 index 000000000..fff2393cc --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEGaussianBlurElement.java @@ -0,0 +1,12 @@ + +package org.w3c.dom.svg; + +public interface SVGFEGaussianBlurElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); + public SVGAnimatedNumber getStdDeviationX(); + public SVGAnimatedNumber getStdDeviationY(); + + public void setStdDeviation(float stdDeviationX, float stdDeviationY); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEImageElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEImageElement.java new file mode 100644 index 000000000..5af81d429 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEImageElement.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +public interface SVGFEImageElement extends + SVGElement, + SVGURIReference, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGFilterPrimitiveStandardAttributes { + + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio(); + +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeElement.java new file mode 100644 index 000000000..cea3d6fa9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeElement.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGFEMergeElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeNodeElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeNodeElement.java new file mode 100644 index 000000000..60a693734 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMergeNodeElement.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGFEMergeNodeElement extends + SVGElement { + public SVGAnimatedString getIn1(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMorphologyElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMorphologyElement.java new file mode 100644 index 000000000..eb112d892 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEMorphologyElement.java @@ -0,0 +1,16 @@ + +package org.w3c.dom.svg; + +public interface SVGFEMorphologyElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Morphology Operators + public static final short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0; + public static final short SVG_MORPHOLOGY_OPERATOR_ERODE = 1; + public static final short SVG_MORPHOLOGY_OPERATOR_DILATE = 2; + + public SVGAnimatedString getIn1(); + public SVGAnimatedEnumeration getOperator(); + public SVGAnimatedNumber getRadiusX(); + public SVGAnimatedNumber getRadiusY(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEOffsetElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEOffsetElement.java new file mode 100644 index 000000000..dac4f6540 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEOffsetElement.java @@ -0,0 +1,10 @@ + +package org.w3c.dom.svg; + +public interface SVGFEOffsetElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); + public SVGAnimatedNumber getDx(); + public SVGAnimatedNumber getDy(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEPointLightElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEPointLightElement.java new file mode 100644 index 000000000..e26136836 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFEPointLightElement.java @@ -0,0 +1,9 @@ + +package org.w3c.dom.svg; + +public interface SVGFEPointLightElement extends + SVGElement { + public SVGAnimatedNumber getX(); + public SVGAnimatedNumber getY(); + public SVGAnimatedNumber getZ(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpecularLightingElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpecularLightingElement.java new file mode 100644 index 000000000..dd745c272 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpecularLightingElement.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +public interface SVGFESpecularLightingElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); + public SVGAnimatedNumber getSurfaceScale(); + public SVGAnimatedNumber getSpecularConstant(); + public SVGAnimatedNumber getSpecularExponent(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpotLightElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpotLightElement.java new file mode 100644 index 000000000..fa079a851 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFESpotLightElement.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +public interface SVGFESpotLightElement extends + SVGElement { + public SVGAnimatedNumber getX(); + public SVGAnimatedNumber getY(); + public SVGAnimatedNumber getZ(); + public SVGAnimatedNumber getPointsAtX(); + public SVGAnimatedNumber getPointsAtY(); + public SVGAnimatedNumber getPointsAtZ(); + public SVGAnimatedNumber getSpecularExponent(); + public SVGAnimatedNumber getLimitingConeAngle(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETileElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETileElement.java new file mode 100644 index 000000000..90bba92dc --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETileElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGFETileElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + public SVGAnimatedString getIn1(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETurbulenceElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETurbulenceElement.java new file mode 100644 index 000000000..deb52da7e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFETurbulenceElement.java @@ -0,0 +1,22 @@ + +package org.w3c.dom.svg; + +public interface SVGFETurbulenceElement extends + SVGElement, + SVGFilterPrimitiveStandardAttributes { + // Turbulence Types + public static final short SVG_TURBULENCE_TYPE_UNKNOWN = 0; + public static final short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1; + public static final short SVG_TURBULENCE_TYPE_TURBULENCE = 2; + // Stitch Options + public static final short SVG_STITCHTYPE_UNKNOWN = 0; + public static final short SVG_STITCHTYPE_STITCH = 1; + public static final short SVG_STITCHTYPE_NOSTITCH = 2; + + public SVGAnimatedNumber getBaseFrequencyX(); + public SVGAnimatedNumber getBaseFrequencyY(); + public SVGAnimatedInteger getNumOctaves(); + public SVGAnimatedNumber getSeed(); + public SVGAnimatedEnumeration getStitchTiles(); + public SVGAnimatedEnumeration getType(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterElement.java new file mode 100644 index 000000000..bb1cc5756 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterElement.java @@ -0,0 +1,21 @@ + +package org.w3c.dom.svg; + +public interface SVGFilterElement extends + SVGElement, + SVGURIReference, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGUnitTypes { + public SVGAnimatedEnumeration getFilterUnits(); + public SVGAnimatedEnumeration getPrimitiveUnits(); + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); + public SVGAnimatedInteger getFilterResX(); + public SVGAnimatedInteger getFilterResY(); + + public void setFilterRes(int filterResX, int filterResY); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterPrimitiveStandardAttributes.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterPrimitiveStandardAttributes.java new file mode 100644 index 000000000..ee79e0b09 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFilterPrimitiveStandardAttributes.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +public interface SVGFilterPrimitiveStandardAttributes extends + SVGStylable { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); + public SVGAnimatedString getResult(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFitToViewBox.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFitToViewBox.java new file mode 100644 index 000000000..99d912972 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFitToViewBox.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGFitToViewBox { + public SVGAnimatedRect getViewBox(); + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontElement.java new file mode 100644 index 000000000..e11dc355e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGFontElement extends + SVGElement, + SVGExternalResourcesRequired, + SVGStylable { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceElement.java new file mode 100644 index 000000000..b201c9456 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFontFaceElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceFormatElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceFormatElement.java new file mode 100644 index 000000000..895cd6c77 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceFormatElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFontFaceFormatElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceNameElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceNameElement.java new file mode 100644 index 000000000..723370a07 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceNameElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFontFaceNameElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceSrcElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceSrcElement.java new file mode 100644 index 000000000..dcc898b6f --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceSrcElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFontFaceSrcElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceUriElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceUriElement.java new file mode 100644 index 000000000..39dd039e9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGFontFaceUriElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGFontFaceUriElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGForeignObjectElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGForeignObjectElement.java new file mode 100644 index 000000000..fe571ce55 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGForeignObjectElement.java @@ -0,0 +1,18 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGForeignObjectElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGElement.java new file mode 100644 index 000000000..e9a78190e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGElement.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGGElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphElement.java new file mode 100644 index 000000000..9354bb74d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphElement.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGGlyphElement extends + SVGElement, + SVGStylable { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphRefElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphRefElement.java new file mode 100644 index 000000000..6e9df16b5 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGlyphRefElement.java @@ -0,0 +1,28 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGGlyphRefElement extends + SVGElement, + SVGURIReference, + SVGStylable { + public String getGlyphRef(); + public void setGlyphRef(String glyphRef) + throws DOMException; + public String getFormat(); + public void setFormat(String format) + throws DOMException; + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getDx(); + public void setDx(float dx) + throws DOMException; + public float getDy(); + public void setDy(float dy) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGradientElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGradientElement.java new file mode 100644 index 000000000..6221c0492 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGGradientElement.java @@ -0,0 +1,19 @@ + +package org.w3c.dom.svg; + +public interface SVGGradientElement extends + SVGElement, + SVGURIReference, + SVGExternalResourcesRequired, + SVGStylable, + SVGUnitTypes { + // Spread Method Types + public static final short SVG_SPREADMETHOD_UNKNOWN = 0; + public static final short SVG_SPREADMETHOD_PAD = 1; + public static final short SVG_SPREADMETHOD_REFLECT = 2; + public static final short SVG_SPREADMETHOD_REPEAT = 3; + + public SVGAnimatedEnumeration getGradientUnits(); + public SVGAnimatedTransformList getGradientTransform(); + public SVGAnimatedEnumeration getSpreadMethod(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGHKernElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGHKernElement.java new file mode 100644 index 000000000..ca527b67c --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGHKernElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGHKernElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGICCColor.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGICCColor.java new file mode 100644 index 000000000..168de5290 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGICCColor.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGICCColor { + public String getColorProfile(); + public void setColorProfile(String colorProfile) + throws DOMException; + public SVGNumberList getColors(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGImageElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGImageElement.java new file mode 100644 index 000000000..7465112e1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGImageElement.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGImageElement extends + SVGElement, + SVGURIReference, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLangSpace.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLangSpace.java new file mode 100644 index 000000000..b7da7ddea --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLangSpace.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGLangSpace { + public String getXMLlang(); + public void setXMLlang(String xmllang) + throws DOMException; + public String getXMLspace(); + public void setXMLspace(String xmlspace) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLength.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLength.java new file mode 100644 index 000000000..263714923 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLength.java @@ -0,0 +1,33 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGLength { + // Length Unit Types + public static final short SVG_LENGTHTYPE_UNKNOWN = 0; + public static final short SVG_LENGTHTYPE_NUMBER = 1; + public static final short SVG_LENGTHTYPE_PERCENTAGE = 2; + public static final short SVG_LENGTHTYPE_EMS = 3; + public static final short SVG_LENGTHTYPE_EXS = 4; + public static final short SVG_LENGTHTYPE_PX = 5; + public static final short SVG_LENGTHTYPE_CM = 6; + public static final short SVG_LENGTHTYPE_MM = 7; + public static final short SVG_LENGTHTYPE_IN = 8; + public static final short SVG_LENGTHTYPE_PT = 9; + public static final short SVG_LENGTHTYPE_PC = 10; + + public short getUnitType(); + public float getValue(); + public void setValue(float value) + throws DOMException; + public float getValueInSpecifiedUnits(); + public void setValueInSpecifiedUnits(float valueInSpecifiedUnits) + throws DOMException; + public String getValueAsString(); + public void setValueAsString(String valueAsString) + throws DOMException; + + public void newValueSpecifiedUnits(short unitType, float valueInSpecifiedUnits); + public void convertToSpecifiedUnits(short unitType); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLengthList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLengthList.java new file mode 100644 index 000000000..ec9eb6049 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLengthList.java @@ -0,0 +1,23 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGLengthList { + public int getNumberOfItems(); + + public void clear() + throws DOMException; + public SVGLength initialize(SVGLength newItem) + throws DOMException, SVGException; + public SVGLength getItem(int index) + throws DOMException; + public SVGLength insertItemBefore(SVGLength newItem, int index) + throws DOMException, SVGException; + public SVGLength replaceItem(SVGLength newItem, int index) + throws DOMException, SVGException; + public SVGLength removeItem(int index) + throws DOMException; + public SVGLength appendItem(SVGLength newItem) + throws DOMException, SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLineElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLineElement.java new file mode 100644 index 000000000..7e9fe1e7d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLineElement.java @@ -0,0 +1,18 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGLineElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getX1(); + public SVGAnimatedLength getY1(); + public SVGAnimatedLength getX2(); + public SVGAnimatedLength getY2(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLinearGradientElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLinearGradientElement.java new file mode 100644 index 000000000..71d2b9d0d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLinearGradientElement.java @@ -0,0 +1,10 @@ + +package org.w3c.dom.svg; + +public interface SVGLinearGradientElement extends + SVGGradientElement { + public SVGAnimatedLength getX1(); + public SVGAnimatedLength getY1(); + public SVGAnimatedLength getX2(); + public SVGAnimatedLength getY2(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLocatable.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLocatable.java new file mode 100644 index 000000000..5a77d21d2 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGLocatable.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +public interface SVGLocatable { + public SVGElement getNearestViewportElement(); + public SVGElement getFarthestViewportElement(); + + public SVGRect getBBox(); + public SVGMatrix getCTM(); + public SVGMatrix getScreenCTM(); + public SVGMatrix getTransformToElement(SVGElement element) + throws SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMPathElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMPathElement.java new file mode 100644 index 000000000..36032385b --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMPathElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGMPathElement extends + SVGElement, + SVGURIReference, + SVGExternalResourcesRequired { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMarkerElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMarkerElement.java new file mode 100644 index 000000000..972dd5f07 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMarkerElement.java @@ -0,0 +1,29 @@ + +package org.w3c.dom.svg; + +public interface SVGMarkerElement extends + SVGElement, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGFitToViewBox { + // Marker Unit Types + public static final short SVG_MARKERUNITS_UNKNOWN = 0; + public static final short SVG_MARKERUNITS_USERSPACEONUSE = 1; + public static final short SVG_MARKERUNITS_STROKEWIDTH = 2; + // Marker Orientation Types + public static final short SVG_MARKER_ORIENT_UNKNOWN = 0; + public static final short SVG_MARKER_ORIENT_AUTO = 1; + public static final short SVG_MARKER_ORIENT_ANGLE = 2; + + public SVGAnimatedLength getRefX(); + public SVGAnimatedLength getRefY(); + public SVGAnimatedEnumeration getMarkerUnits(); + public SVGAnimatedLength getMarkerWidth(); + public SVGAnimatedLength getMarkerHeight(); + public SVGAnimatedEnumeration getOrientType(); + public SVGAnimatedAngle getOrientAngle(); + + public void setOrientToAuto(); + public void setOrientToAngle(SVGAngle angle); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMaskElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMaskElement.java new file mode 100644 index 000000000..60bfb97f9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMaskElement.java @@ -0,0 +1,17 @@ + +package org.w3c.dom.svg; + +public interface SVGMaskElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGUnitTypes { + public SVGAnimatedEnumeration getMaskUnits(); + public SVGAnimatedEnumeration getMaskContentUnits(); + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMatrix.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMatrix.java new file mode 100644 index 000000000..91949b661 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMatrix.java @@ -0,0 +1,39 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGMatrix { + public float getA(); + public void setA(float a) + throws DOMException; + public float getB(); + public void setB(float b) + throws DOMException; + public float getC(); + public void setC(float c) + throws DOMException; + public float getD(); + public void setD(float d) + throws DOMException; + public float getE(); + public void setE(float e) + throws DOMException; + public float getF(); + public void setF(float f) + throws DOMException; + + public SVGMatrix multiply(SVGMatrix secondMatrix); + public SVGMatrix inverse() + throws SVGException; + public SVGMatrix translate(float x, float y); + public SVGMatrix scale(float scaleFactor); + public SVGMatrix scaleNonUniform(float scaleFactorX, float scaleFactorY); + public SVGMatrix rotate(float angle); + public SVGMatrix rotateFromVector(float x, float y) + throws SVGException; + public SVGMatrix flipX(); + public SVGMatrix flipY(); + public SVGMatrix skewX(float angle); + public SVGMatrix skewY(float angle); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMetadataElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMetadataElement.java new file mode 100644 index 000000000..d8485d124 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMetadataElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGMetadataElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMissingGlyphElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMissingGlyphElement.java new file mode 100644 index 000000000..8c777fb2a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGMissingGlyphElement.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGMissingGlyphElement extends + SVGElement, + SVGStylable { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumber.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumber.java new file mode 100644 index 000000000..eb42dccf2 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumber.java @@ -0,0 +1,10 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGNumber { + public float getValue(); + public void setValue(float value) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumberList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumberList.java new file mode 100644 index 000000000..2bc811bc1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGNumberList.java @@ -0,0 +1,23 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGNumberList { + public int getNumberOfItems(); + + public void clear() + throws DOMException; + public SVGNumber initialize(SVGNumber newItem) + throws DOMException, SVGException; + public SVGNumber getItem(int index) + throws DOMException; + public SVGNumber insertItemBefore(SVGNumber newItem, int index) + throws DOMException, SVGException; + public SVGNumber replaceItem(SVGNumber newItem, int index) + throws DOMException, SVGException; + public SVGNumber removeItem(int index) + throws DOMException; + public SVGNumber appendItem(SVGNumber newItem) + throws DOMException, SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPaint.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPaint.java new file mode 100644 index 000000000..3ebcdac70 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPaint.java @@ -0,0 +1,25 @@ + +package org.w3c.dom.svg; + + +public interface SVGPaint extends + SVGColor { + // Paint Types + public static final short SVG_PAINTTYPE_UNKNOWN = 0; + public static final short SVG_PAINTTYPE_RGBCOLOR = 1; + public static final short SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2; + public static final short SVG_PAINTTYPE_NONE = 101; + public static final short SVG_PAINTTYPE_CURRENTCOLOR = 102; + public static final short SVG_PAINTTYPE_URI_NONE = 103; + public static final short SVG_PAINTTYPE_URI_CURRENTCOLOR = 104; + public static final short SVG_PAINTTYPE_URI_RGBCOLOR = 105; + public static final short SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106; + public static final short SVG_PAINTTYPE_URI = 107; + + public short getPaintType(); + public String getUri(); + + public void setUri(String uri); + public void setPaint(short paintType, String uri, String rgbColor, String iccColor) + throws SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathElement.java new file mode 100644 index 000000000..6b8f4ccba --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathElement.java @@ -0,0 +1,39 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGPathElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget, + SVGAnimatedPathData { + public SVGAnimatedNumber getPathLength(); + + public float getTotalLength(); + public SVGPoint getPointAtLength(float distance); + public int getPathSegAtLength(float distance); + public SVGPathSegClosePath createSVGPathSegClosePath(); + public SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(float x, float y); + public SVGPathSegMovetoRel createSVGPathSegMovetoRel(float x, float y); + public SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(float x, float y); + public SVGPathSegLinetoRel createSVGPathSegLinetoRel(float x, float y); + public SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2); + public SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2); + public SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1); + public SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1); + public SVGPathSegArcAbs createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, boolean largeArcFlag, boolean sweepFlag); + public SVGPathSegArcRel createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, boolean largeArcFlag, boolean sweepFlag); + public SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(float x); + public SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(float x); + public SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(float y); + public SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(float y); + public SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2); + public SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2); + public SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y); + public SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSeg.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSeg.java new file mode 100644 index 000000000..7b69d2b8e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSeg.java @@ -0,0 +1,29 @@ + +package org.w3c.dom.svg; + +public interface SVGPathSeg { + // Path Segment Types + public static final short PATHSEG_UNKNOWN = 0; + public static final short PATHSEG_CLOSEPATH = 1; + public static final short PATHSEG_MOVETO_ABS = 2; + public static final short PATHSEG_MOVETO_REL = 3; + public static final short PATHSEG_LINETO_ABS = 4; + public static final short PATHSEG_LINETO_REL = 5; + public static final short PATHSEG_CURVETO_CUBIC_ABS = 6; + public static final short PATHSEG_CURVETO_CUBIC_REL = 7; + public static final short PATHSEG_CURVETO_QUADRATIC_ABS = 8; + public static final short PATHSEG_CURVETO_QUADRATIC_REL = 9; + public static final short PATHSEG_ARC_ABS = 10; + public static final short PATHSEG_ARC_REL = 11; + public static final short PATHSEG_LINETO_HORIZONTAL_ABS = 12; + public static final short PATHSEG_LINETO_HORIZONTAL_REL = 13; + public static final short PATHSEG_LINETO_VERTICAL_ABS = 14; + public static final short PATHSEG_LINETO_VERTICAL_REL = 15; + public static final short PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16; + public static final short PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17; + public static final short PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18; + public static final short PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19; + + public short getPathSegType(); + public String getPathSegTypeAsLetter(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcAbs.java new file mode 100644 index 000000000..5dcc8aa18 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcAbs.java @@ -0,0 +1,29 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegArcAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getR1(); + public void setR1(float r1) + throws DOMException; + public float getR2(); + public void setR2(float r2) + throws DOMException; + public float getAngle(); + public void setAngle(float angle) + throws DOMException; + public boolean getLargeArcFlag(); + public void setLargeArcFlag(boolean largeArcFlag) + throws DOMException; + public boolean getSweepFlag(); + public void setSweepFlag(boolean sweepFlag) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcRel.java new file mode 100644 index 000000000..9dc921d8e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegArcRel.java @@ -0,0 +1,29 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegArcRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getR1(); + public void setR1(float r1) + throws DOMException; + public float getR2(); + public void setR2(float r2) + throws DOMException; + public float getAngle(); + public void setAngle(float angle) + throws DOMException; + public boolean getLargeArcFlag(); + public void setLargeArcFlag(boolean largeArcFlag) + throws DOMException; + public boolean getSweepFlag(); + public void setSweepFlag(boolean sweepFlag) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegClosePath.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegClosePath.java new file mode 100644 index 000000000..9beb4667d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegClosePath.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGPathSegClosePath extends + SVGPathSeg { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicAbs.java new file mode 100644 index 000000000..bf489a1df --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicAbs.java @@ -0,0 +1,26 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoCubicAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getX1(); + public void setX1(float x1) + throws DOMException; + public float getY1(); + public void setY1(float y1) + throws DOMException; + public float getX2(); + public void setX2(float x2) + throws DOMException; + public float getY2(); + public void setY2(float y2) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicRel.java new file mode 100644 index 000000000..9dd35e52b --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicRel.java @@ -0,0 +1,26 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoCubicRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getX1(); + public void setX1(float x1) + throws DOMException; + public float getY1(); + public void setY1(float y1) + throws DOMException; + public float getX2(); + public void setX2(float x2) + throws DOMException; + public float getY2(); + public void setY2(float y2) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothAbs.java new file mode 100644 index 000000000..c423a215f --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothAbs.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoCubicSmoothAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getX2(); + public void setX2(float x2) + throws DOMException; + public float getY2(); + public void setY2(float y2) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothRel.java new file mode 100644 index 000000000..6ae59dbca --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoCubicSmoothRel.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoCubicSmoothRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getX2(); + public void setX2(float x2) + throws DOMException; + public float getY2(); + public void setY2(float y2) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticAbs.java new file mode 100644 index 000000000..9d0b54def --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticAbs.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoQuadraticAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getX1(); + public void setX1(float x1) + throws DOMException; + public float getY1(); + public void setY1(float y1) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticRel.java new file mode 100644 index 000000000..6ab35a974 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticRel.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoQuadraticRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getX1(); + public void setX1(float x1) + throws DOMException; + public float getY1(); + public void setY1(float y1) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothAbs.java new file mode 100644 index 000000000..553430d3e --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothAbs.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoQuadraticSmoothAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothRel.java new file mode 100644 index 000000000..b1212c46a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegCurvetoQuadraticSmoothRel.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegCurvetoQuadraticSmoothRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoAbs.java new file mode 100644 index 000000000..e2878c7f6 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoAbs.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegLinetoAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalAbs.java new file mode 100644 index 000000000..9e318f6ad --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalAbs.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegLinetoHorizontalAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalRel.java new file mode 100644 index 000000000..7a10f8db3 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoHorizontalRel.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegLinetoHorizontalRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoRel.java new file mode 100644 index 000000000..fcd81331d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoRel.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegLinetoRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalAbs.java new file mode 100644 index 000000000..aef685591 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalAbs.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegLinetoVerticalAbs extends + SVGPathSeg { + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalRel.java new file mode 100644 index 000000000..0ec48a258 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegLinetoVerticalRel.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegLinetoVerticalRel extends + SVGPathSeg { + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegList.java new file mode 100644 index 000000000..56b16290b --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegList.java @@ -0,0 +1,23 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegList { + public int getNumberOfItems(); + + public void clear() + throws DOMException; + public SVGPathSeg initialize(SVGPathSeg newItem) + throws DOMException, SVGException; + public SVGPathSeg getItem(int index) + throws DOMException; + public SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index) + throws DOMException, SVGException; + public SVGPathSeg replaceItem(SVGPathSeg newItem, int index) + throws DOMException, SVGException; + public SVGPathSeg removeItem(int index) + throws DOMException; + public SVGPathSeg appendItem(SVGPathSeg newItem) + throws DOMException, SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoAbs.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoAbs.java new file mode 100644 index 000000000..bb675a902 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoAbs.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegMovetoAbs extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoRel.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoRel.java new file mode 100644 index 000000000..ae2eb0f08 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPathSegMovetoRel.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPathSegMovetoRel extends + SVGPathSeg { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPatternElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPatternElement.java new file mode 100644 index 000000000..606857ffb --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPatternElement.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +public interface SVGPatternElement extends + SVGElement, + SVGURIReference, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGFitToViewBox, + SVGUnitTypes { + public SVGAnimatedEnumeration getPatternUnits(); + public SVGAnimatedEnumeration getPatternContentUnits(); + public SVGAnimatedTransformList getPatternTransform(); + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPoint.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPoint.java new file mode 100644 index 000000000..9f9ebc441 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPoint.java @@ -0,0 +1,15 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPoint { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + + public SVGPoint matrixTransform(SVGMatrix matrix); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPointList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPointList.java new file mode 100644 index 000000000..3266e0798 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPointList.java @@ -0,0 +1,23 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPointList { + public int getNumberOfItems(); + + public void clear() + throws DOMException; + public SVGPoint initialize(SVGPoint newItem) + throws DOMException, SVGException; + public SVGPoint getItem(int index) + throws DOMException; + public SVGPoint insertItemBefore(SVGPoint newItem, int index) + throws DOMException, SVGException; + public SVGPoint replaceItem(SVGPoint newItem, int index) + throws DOMException, SVGException; + public SVGPoint removeItem(int index) + throws DOMException; + public SVGPoint appendItem(SVGPoint newItem) + throws DOMException, SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolygonElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolygonElement.java new file mode 100644 index 000000000..6171fb69c --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolygonElement.java @@ -0,0 +1,15 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGPolygonElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget, + SVGAnimatedPoints { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolylineElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolylineElement.java new file mode 100644 index 000000000..9fad2ab31 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPolylineElement.java @@ -0,0 +1,15 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGPolylineElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget, + SVGAnimatedPoints { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPreserveAspectRatio.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPreserveAspectRatio.java new file mode 100644 index 000000000..81e22b314 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGPreserveAspectRatio.java @@ -0,0 +1,30 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGPreserveAspectRatio { + // Alignment Types + public static final short SVG_PRESERVEASPECTRATIO_UNKNOWN = 0; + public static final short SVG_PRESERVEASPECTRATIO_NONE = 1; + public static final short SVG_PRESERVEASPECTRATIO_XMINYMIN = 2; + public static final short SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3; + public static final short SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4; + public static final short SVG_PRESERVEASPECTRATIO_XMINYMID = 5; + public static final short SVG_PRESERVEASPECTRATIO_XMIDYMID = 6; + public static final short SVG_PRESERVEASPECTRATIO_XMAXYMID = 7; + public static final short SVG_PRESERVEASPECTRATIO_XMINYMAX = 8; + public static final short SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9; + public static final short SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10; + // Meet-or-slice Types + public static final short SVG_MEETORSLICE_UNKNOWN = 0; + public static final short SVG_MEETORSLICE_MEET = 1; + public static final short SVG_MEETORSLICE_SLICE = 2; + + public short getAlign(); + public void setAlign(short align) + throws DOMException; + public short getMeetOrSlice(); + public void setMeetOrSlice(short meetOrSlice) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRadialGradientElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRadialGradientElement.java new file mode 100644 index 000000000..f63b8c65d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRadialGradientElement.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +public interface SVGRadialGradientElement extends + SVGGradientElement { + public SVGAnimatedLength getCx(); + public SVGAnimatedLength getCy(); + public SVGAnimatedLength getR(); + public SVGAnimatedLength getFx(); + public SVGAnimatedLength getFy(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRect.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRect.java new file mode 100644 index 000000000..f1c7c3c0b --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRect.java @@ -0,0 +1,19 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGRect { + public float getX(); + public void setX(float x) + throws DOMException; + public float getY(); + public void setY(float y) + throws DOMException; + public float getWidth(); + public void setWidth(float width) + throws DOMException; + public float getHeight(); + public void setHeight(float height) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRectElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRectElement.java new file mode 100644 index 000000000..0260d8e9d --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRectElement.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGRectElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); + public SVGAnimatedLength getRx(); + public SVGAnimatedLength getRy(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRenderingIntent.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRenderingIntent.java new file mode 100644 index 000000000..fc46f9f79 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGRenderingIntent.java @@ -0,0 +1,12 @@ + +package org.w3c.dom.svg; + +public interface SVGRenderingIntent { + // Rendering Intent Types + public static final short RENDERING_INTENT_UNKNOWN = 0; + public static final short RENDERING_INTENT_AUTO = 1; + public static final short RENDERING_INTENT_PERCEPTUAL = 2; + public static final short RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3; + public static final short RENDERING_INTENT_SATURATION = 4; + public static final short RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSVGElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSVGElement.java new file mode 100644 index 000000000..e0464e0cc --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSVGElement.java @@ -0,0 +1,73 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.w3c.dom.css.DocumentCSS; +import org.w3c.dom.css.ViewCSS; +import org.w3c.dom.events.DocumentEvent; +import org.w3c.dom.events.EventTarget; + +public interface SVGSVGElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGLocatable, + SVGFitToViewBox, + SVGZoomAndPan, + EventTarget, + DocumentEvent, + ViewCSS, + DocumentCSS { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); + public String getContentScriptType(); + public void setContentScriptType(String contentScriptType) + throws DOMException; + public String getContentStyleType(); + public void setContentStyleType(String contentStyleType) + throws DOMException; + public SVGRect getViewport(); + public float getPixelUnitToMillimeterX(); + public float getPixelUnitToMillimeterY(); + public float getScreenPixelToMillimeterX(); + public float getScreenPixelToMillimeterY(); + public boolean getUseCurrentView(); + public void setUseCurrentView(boolean useCurrentView) + throws DOMException; + public SVGViewSpec getCurrentView(); + public float getCurrentScale(); + public void setCurrentScale(float currentScale) + throws DOMException; + public SVGPoint getCurrentTranslate(); + + public int suspendRedraw(int max_wait_milliseconds); + public void unsuspendRedraw(int suspend_handle_id) + throws DOMException; + public void unsuspendRedrawAll(); + public void forceRedraw(); + public void pauseAnimations(); + public void unpauseAnimations(); + public boolean animationsPaused(); + public float getCurrentTime(); + public void setCurrentTime(float seconds); + public NodeList getIntersectionList(SVGRect rect, SVGElement referenceElement); + public NodeList getEnclosureList(SVGRect rect, SVGElement referenceElement); + public boolean checkIntersection(SVGElement element, SVGRect rect); + public boolean checkEnclosure(SVGElement element, SVGRect rect); + public void deselectAll(); + public SVGNumber createSVGNumber(); + public SVGLength createSVGLength(); + public SVGAngle createSVGAngle(); + public SVGPoint createSVGPoint(); + public SVGMatrix createSVGMatrix(); + public SVGRect createSVGRect(); + public SVGTransform createSVGTransform(); + public SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix); + public Element getElementById(String elementId); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGScriptElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGScriptElement.java new file mode 100644 index 000000000..a82c4d552 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGScriptElement.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGScriptElement extends + SVGElement, + SVGURIReference, + SVGExternalResourcesRequired { + public String getType(); + public void setType(String type) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSetElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSetElement.java new file mode 100644 index 000000000..0ca9c09ef --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSetElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGSetElement extends + SVGAnimationElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStopElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStopElement.java new file mode 100644 index 000000000..b2c44f044 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStopElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGStopElement extends + SVGElement, + SVGStylable { + public SVGAnimatedNumber getOffset(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStringList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStringList.java new file mode 100644 index 000000000..9f557d74a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStringList.java @@ -0,0 +1,23 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGStringList { + public int getNumberOfItems(); + + public void clear() + throws DOMException; + public String initialize(String newItem) + throws DOMException, SVGException; + public String getItem(int index) + throws DOMException; + public String insertItemBefore(String newItem, int index) + throws DOMException, SVGException; + public String replaceItem(String newItem, int index) + throws DOMException, SVGException; + public String removeItem(int index) + throws DOMException; + public String appendItem(String newItem) + throws DOMException, SVGException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStylable.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStylable.java new file mode 100644 index 000000000..9d9ad8ece --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStylable.java @@ -0,0 +1,12 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.css.CSSStyleDeclaration; +import org.w3c.dom.css.CSSValue; + +public interface SVGStylable { + public SVGAnimatedString getClassName(); + public CSSStyleDeclaration getStyle(); + + public CSSValue getPresentationAttribute(String name); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStyleElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStyleElement.java new file mode 100644 index 000000000..b545cf7dd --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGStyleElement.java @@ -0,0 +1,20 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGStyleElement extends + SVGElement { + public String getXMLspace(); + public void setXMLspace(String xmlspace) + throws DOMException; + public String getType(); + public void setType(String type) + throws DOMException; + public String getMedia(); + public void setMedia(String media) + throws DOMException; + public String getTitle(); + public void setTitle(String title) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSwitchElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSwitchElement.java new file mode 100644 index 000000000..c5187563b --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSwitchElement.java @@ -0,0 +1,14 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGSwitchElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSymbolElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSymbolElement.java new file mode 100644 index 000000000..ee288bc92 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGSymbolElement.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGSymbolElement extends + SVGElement, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGFitToViewBox, + EventTarget { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTRefElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTRefElement.java new file mode 100644 index 000000000..2d8202ede --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTRefElement.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGTRefElement extends + SVGTextPositioningElement, + SVGURIReference { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTSpanElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTSpanElement.java new file mode 100644 index 000000000..729b857db --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTSpanElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGTSpanElement extends + SVGTextPositioningElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTests.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTests.java new file mode 100644 index 000000000..71c9a3f75 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTests.java @@ -0,0 +1,10 @@ + +package org.w3c.dom.svg; + +public interface SVGTests { + public SVGStringList getRequiredFeatures(); + public SVGStringList getRequiredExtensions(); + public SVGStringList getSystemLanguage(); + + public boolean hasExtension(String extension); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextContentElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextContentElement.java new file mode 100644 index 000000000..928334141 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextContentElement.java @@ -0,0 +1,37 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; +import org.w3c.dom.events.EventTarget; + +public interface SVGTextContentElement extends + SVGElement, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + EventTarget { + // lengthAdjust Types + public static final short LENGTHADJUST_UNKNOWN = 0; + public static final short LENGTHADJUST_SPACING = 1; + public static final short LENGTHADJUST_SPACINGANDGLYPHS = 2; + + public SVGAnimatedLength getTextLength(); + public SVGAnimatedEnumeration getLengthAdjust(); + + public int getNumberOfChars(); + public float getComputedTextLength(); + public float getSubStringLength(int charnum, int nchars) + throws DOMException; + public SVGPoint getStartPositionOfChar(int charnum) + throws DOMException; + public SVGPoint getEndPositionOfChar(int charnum) + throws DOMException; + public SVGRect getExtentOfChar(int charnum) + throws DOMException; + public float getRotationOfChar(int charnum) + throws DOMException; + public int getCharNumAtPosition(SVGPoint point); + public void selectSubString(int charnum, int nchars) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextElement.java new file mode 100644 index 000000000..f25cc3c20 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextElement.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGTextElement extends + SVGTextPositioningElement, + SVGTransformable { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPathElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPathElement.java new file mode 100644 index 000000000..cb56366b8 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPathElement.java @@ -0,0 +1,19 @@ + +package org.w3c.dom.svg; + +public interface SVGTextPathElement extends + SVGTextContentElement, + SVGURIReference { + // textPath Method Types + public static final short TEXTPATH_METHODTYPE_UNKNOWN = 0; + public static final short TEXTPATH_METHODTYPE_ALIGN = 1; + public static final short TEXTPATH_METHODTYPE_STRETCH = 2; + // textPath Spacing Types + public static final short TEXTPATH_SPACINGTYPE_UNKNOWN = 0; + public static final short TEXTPATH_SPACINGTYPE_AUTO = 1; + public static final short TEXTPATH_SPACINGTYPE_EXACT = 2; + + public SVGAnimatedLength getStartOffset(); + public SVGAnimatedEnumeration getMethod(); + public SVGAnimatedEnumeration getSpacing(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPositioningElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPositioningElement.java new file mode 100644 index 000000000..b5f2e23be --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTextPositioningElement.java @@ -0,0 +1,11 @@ + +package org.w3c.dom.svg; + +public interface SVGTextPositioningElement extends + SVGTextContentElement { + public SVGAnimatedLengthList getX(); + public SVGAnimatedLengthList getY(); + public SVGAnimatedLengthList getDx(); + public SVGAnimatedLengthList getDy(); + public SVGAnimatedNumberList getRotate(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTitleElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTitleElement.java new file mode 100644 index 000000000..cbf45fe2a --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTitleElement.java @@ -0,0 +1,8 @@ + +package org.w3c.dom.svg; + +public interface SVGTitleElement extends + SVGElement, + SVGLangSpace, + SVGStylable { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransform.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransform.java new file mode 100644 index 000000000..3d355fcc0 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransform.java @@ -0,0 +1,24 @@ + +package org.w3c.dom.svg; + +public interface SVGTransform { + // Transform Types + public static final short SVG_TRANSFORM_UNKNOWN = 0; + public static final short SVG_TRANSFORM_MATRIX = 1; + public static final short SVG_TRANSFORM_TRANSLATE = 2; + public static final short SVG_TRANSFORM_SCALE = 3; + public static final short SVG_TRANSFORM_ROTATE = 4; + public static final short SVG_TRANSFORM_SKEWX = 5; + public static final short SVG_TRANSFORM_SKEWY = 6; + + public short getType(); + public SVGMatrix getMatrix(); + public float getAngle(); + + public void setMatrix(SVGMatrix matrix); + public void setTranslate(float tx, float ty); + public void setScale(float sx, float sy); + public void setRotate(float angle, float cx, float cy); + public void setSkewX(float angle); + public void setSkewY(float angle); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformList.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformList.java new file mode 100644 index 000000000..df5023ca8 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformList.java @@ -0,0 +1,25 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGTransformList { + public int getNumberOfItems(); + + public void clear() + throws DOMException; + public SVGTransform initialize(SVGTransform newItem) + throws DOMException, SVGException; + public SVGTransform getItem(int index) + throws DOMException; + public SVGTransform insertItemBefore(SVGTransform newItem, int index) + throws DOMException, SVGException; + public SVGTransform replaceItem(SVGTransform newItem, int index) + throws DOMException, SVGException; + public SVGTransform removeItem(int index) + throws DOMException; + public SVGTransform appendItem(SVGTransform newItem) + throws DOMException, SVGException; + public SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix); + public SVGTransform consolidate(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformable.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformable.java new file mode 100644 index 000000000..fcf8e98fe --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGTransformable.java @@ -0,0 +1,7 @@ + +package org.w3c.dom.svg; + +public interface SVGTransformable extends + SVGLocatable { + public SVGAnimatedTransformList getTransform(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGURIReference.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGURIReference.java new file mode 100644 index 000000000..d47256a19 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGURIReference.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGURIReference { + public SVGAnimatedString getHref(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUnitTypes.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUnitTypes.java new file mode 100644 index 000000000..9fc7685e9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUnitTypes.java @@ -0,0 +1,9 @@ + +package org.w3c.dom.svg; + +public interface SVGUnitTypes { + // Unit Types + public static final short SVG_UNIT_TYPE_UNKNOWN = 0; + public static final short SVG_UNIT_TYPE_USERSPACEONUSE = 1; + public static final short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUseElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUseElement.java new file mode 100644 index 000000000..b95362960 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGUseElement.java @@ -0,0 +1,21 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.EventTarget; + +public interface SVGUseElement extends + SVGElement, + SVGURIReference, + SVGTests, + SVGLangSpace, + SVGExternalResourcesRequired, + SVGStylable, + SVGTransformable, + EventTarget { + public SVGAnimatedLength getX(); + public SVGAnimatedLength getY(); + public SVGAnimatedLength getWidth(); + public SVGAnimatedLength getHeight(); + public SVGElementInstance getInstanceRoot(); + public SVGElementInstance getAnimatedInstanceRoot(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGVKernElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGVKernElement.java new file mode 100644 index 000000000..cc2e4f4f1 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGVKernElement.java @@ -0,0 +1,6 @@ + +package org.w3c.dom.svg; + +public interface SVGVKernElement extends + SVGElement { +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewElement.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewElement.java new file mode 100644 index 000000000..2273d1893 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewElement.java @@ -0,0 +1,10 @@ + +package org.w3c.dom.svg; + +public interface SVGViewElement extends + SVGElement, + SVGExternalResourcesRequired, + SVGFitToViewBox, + SVGZoomAndPan { + public SVGStringList getViewTarget(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewSpec.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewSpec.java new file mode 100644 index 000000000..559b143e9 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGViewSpec.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +public interface SVGViewSpec extends + SVGZoomAndPan, + SVGFitToViewBox { + public SVGTransformList getTransform(); + public SVGElement getViewTarget(); + public String getViewBoxString(); + public String getPreserveAspectRatioString(); + public String getTransformString(); + public String getViewTargetString(); +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomAndPan.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomAndPan.java new file mode 100644 index 000000000..028426ed7 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomAndPan.java @@ -0,0 +1,15 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.DOMException; + +public interface SVGZoomAndPan { + // Zoom and Pan Types + public static final short SVG_ZOOMANDPAN_UNKNOWN = 0; + public static final short SVG_ZOOMANDPAN_DISABLE = 1; + public static final short SVG_ZOOMANDPAN_MAGNIFY = 2; + + public short getZoomAndPan(); + public void setZoomAndPan(short zoomAndPan) + throws DOMException; +} diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomEvent.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomEvent.java new file mode 100644 index 000000000..062010926 --- /dev/null +++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/w3c/dom/svg/SVGZoomEvent.java @@ -0,0 +1,13 @@ + +package org.w3c.dom.svg; + +import org.w3c.dom.events.UIEvent; + +public interface SVGZoomEvent extends + UIEvent { + public SVGRect getZoomRectScreen(); + public float getPreviousScale(); + public SVGPoint getPreviousTranslate(); + public float getNewScale(); + public SVGPoint getNewTranslate(); +}