summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2008-07-05 05:11:28 +0000
committerjoncruz <joncruz@users.sourceforge.net>2008-07-05 05:11:28 +0000
commitb4f137620ee8de6501e07ecbc1a8a6214662b6e8 (patch)
tree2395c5abffb6b983fffb6029cfeaa5ce50f0745b /src
parentWarning cleanup (diff)
downloadinkscape-b4f137620ee8de6501e07ecbc1a8a6214662b6e8.tar.gz
inkscape-b4f137620ee8de6501e07ecbc1a8a6214662b6e8.zip
EOL fixups
(bzr r6164)
Diffstat (limited to 'src')
-rw-r--r--src/display/bezier-utils-test.h694
-rw-r--r--src/dom/domptr.h674
-rw-r--r--src/dom/svg2.h11116
-rw-r--r--src/dom/work/svg2.cpp14098
-rw-r--r--src/helper/geom.cpp992
-rw-r--r--src/helper/geom.h80
-rw-r--r--src/helper/units-test.h176
-rw-r--r--src/svg/svg-affine-test.h438
-rw-r--r--src/svg/svg-length-test.h92
-rw-r--r--src/svg/svg-path-test.h944
-rw-r--r--src/util/list-container-test.h490
11 files changed, 14897 insertions, 14897 deletions
diff --git a/src/display/bezier-utils-test.h b/src/display/bezier-utils-test.h
index efed5ea4b..ec980810b 100644
--- a/src/display/bezier-utils-test.h
+++ b/src/display/bezier-utils-test.h
@@ -1,347 +1,347 @@
-#include <cxxtest/TestSuite.h>
-
-#include <glib.h>
-#include <libnr/nr-macros.h> /* NR_DF_TEST_CLOSE */
-#include <sstream>
-
-/* mental disclaims all responsibility for this evil idea for testing
- static functions. The main disadvantages are that we retain the
- #define's and `using' directives of the included file. */
-#include "bezier-utils.cpp"
-
-using NR::Point;
-
-/* (Returns false if NaN encountered.) */
-static bool range_approx_equal(double const a[], double const b[], unsigned const len) {
- for (unsigned i = 0; i < len; ++i) {
- if (!( fabs( a[i] - b[i] ) < 1e-4 )) {
- return false;
- }
- }
- return true;
-}
-
-static inline bool point_approx_equal(NR::Point const &a, NR::Point const &b, double const eps)
-{
- using NR::X; using NR::Y;
- return ( NR_DF_TEST_CLOSE(a[X], b[X], eps) &&
- NR_DF_TEST_CLOSE(a[Y], b[Y], eps) );
-}
-
-static inline double square(double const x) {
- return x * x;
-}
-
-/** Determine whether the found control points are the same as previously found on some developer's
- machine. Doesn't call utest__fail, just writes a message to stdout for diagnostic purposes:
- the most important test is that the root-mean-square of errors in the estimation are low rather
- than that the control points found are the same.
-**/
-static void compare_ctlpts(Point const est_b[], Point const exp_est_b[])
-{
- unsigned diff_mask = 0;
- for (unsigned i = 0; i < 4; ++i) {
- for (unsigned d = 0; d < 2; ++d) {
- if ( fabs( est_b[i][d] - exp_est_b[i][d] ) > 1.1e-5 ) {
- diff_mask |= 1 << ( i * 2 + d );
- }
- }
- }
- if ( diff_mask != 0 ) {
- std::stringstream msg;
- msg << "Got different control points from previously-coded (diffs=0x" << std::hex << diff_mask << "\n";
- msg << " Previous:";
- for (unsigned i = 0; i < 4; ++i) {
- msg << " (" << exp_est_b[i][0] << ", " << exp_est_b[i][1] << ")"; // localizing ok
- }
- msg << "\n";
- msg << " Found: ";
- for (unsigned i = 0; i < 4; ++i) {
- msg << " (" << est_b[i][0] << ", " << est_b[i][1] << ")"; // localizing ok
- }
- msg << "\n";
- TS_WARN(msg.str().c_str());
- }
-}
-
-static void compare_rms(Point const est_b[], double const t[], Point const d[], unsigned const n,
- double const exp_rms_error)
-{
- double sum_errsq = 0.0;
- for (unsigned i = 0; i < n; ++i) {
- Point const fit_pt = bezier_pt(3, est_b, t[i]);
- Point const diff = fit_pt - d[i];
- sum_errsq += dot(diff, diff);
- }
- double const rms_error = sqrt( sum_errsq / n );
- TS_ASSERT_LESS_THAN_EQUALS( rms_error , exp_rms_error + 1.1e-6 );
- if ( rms_error < exp_rms_error - 1.1e-6 ) {
- /* The fitter code appears to have improved [or the floating point calculations differ
- on this machine from the machine where exp_rms_error was calculated]. */
- char msg[200];
- sprintf(msg, "N.B. rms_error regression requirement can be decreased: have rms_error=%g.", rms_error); // localizing ok
- TS_TRACE(msg);
- }
-}
-
-class BezierUtilsTest : public CxxTest::TestSuite {
-public:
- static Point const c[4];
- static double const t[24];
- static unsigned const n;
- Point d[24];
- static Point const src_b[4];
- static Point const tHat1;
- static Point const tHat2;
-
- BezierUtilsTest()
- {
- /* Feed it some points that can be fit exactly with a single bezier segment, and see how
- well it manages. */
- for (unsigned i = 0; i < n; ++i) {
- d[i] = bezier_pt(3, src_b, t[i]);
- }
- }
- virtual ~BezierUtilsTest() {}
-
- void testCopyWithoutNansOrAdjacentDuplicates()
- {
- NR::Point const src[] = {
- Point(2., 3.),
- Point(2., 3.),
- Point(0., 0.),
- Point(2., 3.),
- Point(2., 3.),
- Point(1., 9.),
- Point(1., 9.)
- };
- Point const exp_dest[] = {
- Point(2., 3.),
- Point(0., 0.),
- Point(2., 3.),
- Point(1., 9.)
- };
- g_assert( G_N_ELEMENTS(src) == 7 );
- Point dest[7];
- struct tst {
- unsigned src_ix0;
- unsigned src_len;
- unsigned exp_dest_ix0;
- unsigned exp_dest_len;
- } const test_data[] = {
- /* src start ix, src len, exp_dest start ix, exp dest len */
- {0, 0, 0, 0},
- {2, 1, 1, 1},
- {0, 1, 0, 1},
- {0, 2, 0, 1},
- {0, 3, 0, 2},
- {1, 3, 0, 3},
- {0, 5, 0, 3},
- {0, 6, 0, 4},
- {0, 7, 0, 4}
- };
- for (unsigned i = 0 ; i < G_N_ELEMENTS(test_data) ; ++i) {
- tst const &t = test_data[i];
- TS_ASSERT_EQUALS( t.exp_dest_len,
- copy_without_nans_or_adjacent_duplicates(src + t.src_ix0,
- t.src_len,
- dest) );
- TS_ASSERT_SAME_DATA(dest,
- exp_dest + t.exp_dest_ix0,
- t.exp_dest_len);
- }
- }
-
- void testBezierPt1()
- {
- Point const a[] = {Point(2.0, 4.0),
- Point(1.0, 8.0)};
- TS_ASSERT_EQUALS( bezier_pt(1, a, 0.0) , a[0] );
- TS_ASSERT_EQUALS( bezier_pt(1, a, 1.0) , a[1] );
- TS_ASSERT_EQUALS( bezier_pt(1, a, 0.5) , Point(1.5, 6.0) );
- double const t[] = {0.5, 0.25, 0.3, 0.6};
- for (unsigned i = 0; i < G_N_ELEMENTS(t); ++i) {
- double const ti = t[i], si = 1.0 - ti;
- TS_ASSERT_EQUALS( bezier_pt(1, a, ti) , si * a[0] + ti * a[1] );
- }
- }
-
- void testBezierPt2()
- {
- Point const b[] = {Point(1.0, 2.0),
- Point(8.0, 4.0),
- Point(3.0, 1.0)};
- TS_ASSERT_EQUALS( bezier_pt(2, b, 0.0) , b[0] );
- TS_ASSERT_EQUALS( bezier_pt(2, b, 1.0) , b[2] );
- TS_ASSERT_EQUALS( bezier_pt(2, b, 0.5) , Point(5.0, 2.75) );
- double const t[] = {0.5, 0.25, 0.3, 0.6};
- for (unsigned i = 0; i < G_N_ELEMENTS(t); ++i) {
- double const ti = t[i], si = 1.0 - ti;
- Point const exp_pt( si*si * b[0] + 2*si*ti * b[1] + ti*ti * b[2] );
- Point const pt(bezier_pt(2, b, ti));
- TS_ASSERT(point_approx_equal(pt, exp_pt, 1e-11));
- }
- }
-
- void testBezierPt3()
- {
- TS_ASSERT_EQUALS( bezier_pt(3, c, 0.0) , c[0] );
- TS_ASSERT_EQUALS( bezier_pt(3, c, 1.0) , c[3] );
- TS_ASSERT_EQUALS( bezier_pt(3, c, 0.5) , Point(4.0, 13.0/8.0) );
- double const t[] = {0.5, 0.25, 0.3, 0.6};
- for (unsigned i = 0; i < G_N_ELEMENTS(t); ++i) {
- double const ti = t[i], si = 1.0 - ti;
- TS_ASSERT( LInfty( bezier_pt(3, c, ti)
- - ( si*si*si * c[0] +
- 3*si*si*ti * c[1] +
- 3*si*ti*ti * c[2] +
- ti*ti*ti * c[3] ) )
- < 1e-4 );
- }
- }
-
- void testComputeMaxErrorRatio()
- {
- struct Err_tst {
- Point pt;
- double u;
- double err;
- } const err_tst[] = {
- {c[0], 0.0, 0.0},
- {Point(4.0, 13.0/8.0), 0.5, 0.0},
- {Point(4.0, 2.0), 0.5, 9.0/64.0},
- {Point(3.0, 2.0), 0.5, 1.0 + 9.0/64.0},
- {Point(6.0, 2.0), 0.5, 4.0 + 9.0/64.0},
- {c[3], 1.0, 0.0},
- };
- Point d[G_N_ELEMENTS(err_tst)];
- double u[G_N_ELEMENTS(err_tst)];
- for (unsigned i = 0; i < G_N_ELEMENTS(err_tst); ++i) {
- Err_tst const &t = err_tst[i];
- d[i] = t.pt;
- u[i] = t.u;
- }
- g_assert( G_N_ELEMENTS(u) == G_N_ELEMENTS(d) );
- unsigned max_ix = ~0u;
- double const err_ratio = compute_max_error_ratio(d, u, G_N_ELEMENTS(d), c, 1.0, &max_ix);
- TS_ASSERT_LESS_THAN( fabs( sqrt(err_tst[4].err) - err_ratio ) , 1e-12 );
- TS_ASSERT_EQUALS( max_ix , 4 );
- }
-
- void testChordLengthParameterize()
- {
- /* n == 2 */
- {
- Point const d[] = {Point(2.9415, -5.8149),
- Point(23.021, 4.9814)};
- double u[G_N_ELEMENTS(d)];
- double const exp_u[] = {0.0, 1.0};
- g_assert( G_N_ELEMENTS(u) == G_N_ELEMENTS(exp_u) );
- chord_length_parameterize(d, u, G_N_ELEMENTS(d));
- TS_ASSERT_SAME_DATA(u, exp_u, G_N_ELEMENTS(exp_u));
- }
-
- /* Straight line. */
- {
- double const exp_u[] = {0.0, 0.1829, 0.2105, 0.2105, 0.619, 0.815, 0.999, 1.0};
- unsigned const n = G_N_ELEMENTS(exp_u);
- Point d[n];
- double u[n];
- Point const a(-23.985, 4.915), b(4.9127, 5.203);
- for (unsigned i = 0; i < n; ++i) {
- double bi = exp_u[i], ai = 1.0 - bi;
- d[i] = ai * a + bi * b;
- }
- chord_length_parameterize(d, u, n);
- TS_ASSERT(range_approx_equal(u, exp_u, n));
- }
- }
-
- void testGenerateBezier()
- {
- Point est_b[4];
- generate_bezier(est_b, d, t, n, tHat1, tHat2, 1.0);
-
- compare_ctlpts(est_b, src_b);
-
- /* We're being unfair here in using our t[] rather than best t[] for est_b: we
- may over-estimate RMS of errors. */
- compare_rms(est_b, t, d, n, 1e-8);
- }
-
- void testSpBezierFitCubicFull()
- {
- Point est_b[4];
- int splitpoints[2];
- gint const succ = sp_bezier_fit_cubic_full(est_b, splitpoints, d, n, tHat1, tHat2, square(1.2), 1);
- TS_ASSERT_EQUALS( succ , 1 );
-
- Point const exp_est_b[4] = {
- Point(5.000000, -3.000000),
- Point(7.5753, -0.4247),
- Point(4.77533, 1.22467),
- Point(3, 3)
- };
- compare_ctlpts(est_b, exp_est_b);
-
- /* We're being unfair here in using our t[] rather than best t[] for est_b: we
- may over-estimate RMS of errors. */
- compare_rms(est_b, t, d, n, .307911);
- }
-
- void testSpBezierFitCubic()
- {
- Point est_b[4];
- gint const succ = sp_bezier_fit_cubic(est_b, d, n, square(1.2));
- TS_ASSERT_EQUALS( succ , 1 );
-
- Point const exp_est_b[4] = {
- Point(5.000000, -3.000000),
- Point(7.57134, -0.423509),
- Point(4.77929, 1.22426),
- Point(3, 3)
- };
- compare_ctlpts(est_b, exp_est_b);
-
-#if 1 /* A change has been made to right_tangent. I believe that usually this change
- will result in better fitting, but it won't do as well for this example where
- we happen to be feeding a t=0.999 point to the fitter. */
- TS_WARN("TODO: Update this test case for revised right_tangent implementation.");
- /* In particular, have a test case to show whether the new implementation
- really is likely to be better on average. */
-#else
- /* We're being unfair here in using our t[] rather than best t[] for est_b: we
- may over-estimate RMS of errors. */
- compare_rms(est_b, t, d, n, .307983);
-#endif
- }
-};
-
-// This is not very neat, but since we know this header is only included by the generated CxxTest file it shouldn't give any problems
-Point const BezierUtilsTest::c[4] = {
- Point(1.0, 2.0),
- Point(8.0, 4.0),
- Point(3.0, 1.0),
- Point(-2.0, -4.0)};
-double const BezierUtilsTest::t[24] = {
- 0.0, .001, .03, .05, .09, .13, .18, .25, .29, .33, .39, .44,
- .51, .57, .62, .69, .75, .81, .91, .93, .97, .98, .999, 1.0};
-unsigned const BezierUtilsTest::n = G_N_ELEMENTS(BezierUtilsTest::t);
-Point const BezierUtilsTest::src_b[4] = {
- Point(5., -3.),
- Point(8., 0.),
- Point(4., 2.),
- Point(3., 3.)};
-Point const BezierUtilsTest::tHat1(unit_vector( BezierUtilsTest::src_b[1] - BezierUtilsTest::src_b[0] ));
-Point const BezierUtilsTest::tHat2(unit_vector( BezierUtilsTest::src_b[2] - BezierUtilsTest::src_b[3] ));
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#include <cxxtest/TestSuite.h>
+
+#include <glib.h>
+#include <libnr/nr-macros.h> /* NR_DF_TEST_CLOSE */
+#include <sstream>
+
+/* mental disclaims all responsibility for this evil idea for testing
+ static functions. The main disadvantages are that we retain the
+ #define's and `using' directives of the included file. */
+#include "bezier-utils.cpp"
+
+using NR::Point;
+
+/* (Returns false if NaN encountered.) */
+static bool range_approx_equal(double const a[], double const b[], unsigned const len) {
+ for (unsigned i = 0; i < len; ++i) {
+ if (!( fabs( a[i] - b[i] ) < 1e-4 )) {
+ return false;
+ }
+ }
+ return true;
+}
+
+static inline bool point_approx_equal(NR::Point const &a, NR::Point const &b, double const eps)
+{
+ using NR::X; using NR::Y;
+ return ( NR_DF_TEST_CLOSE(a[X], b[X], eps) &&
+ NR_DF_TEST_CLOSE(a[Y], b[Y], eps) );
+}
+
+static inline double square(double const x) {
+ return x * x;
+}
+
+/** Determine whether the found control points are the same as previously found on some developer's
+ machine. Doesn't call utest__fail, just writes a message to stdout for diagnostic purposes:
+ the most important test is that the root-mean-square of errors in the estimation are low rather
+ than that the control points found are the same.
+**/
+static void compare_ctlpts(Point const est_b[], Point const exp_est_b[])
+{
+ unsigned diff_mask = 0;
+ for (unsigned i = 0; i < 4; ++i) {
+ for (unsigned d = 0; d < 2; ++d) {
+ if ( fabs( est_b[i][d] - exp_est_b[i][d] ) > 1.1e-5 ) {
+ diff_mask |= 1 << ( i * 2 + d );
+ }
+ }
+ }
+ if ( diff_mask != 0 ) {
+ std::stringstream msg;
+ msg << "Got different control points from previously-coded (diffs=0x" << std::hex << diff_mask << "\n";
+ msg << " Previous:";
+ for (unsigned i = 0; i < 4; ++i) {
+ msg << " (" << exp_est_b[i][0] << ", " << exp_est_b[i][1] << ")"; // localizing ok
+ }
+ msg << "\n";
+ msg << " Found: ";
+ for (unsigned i = 0; i < 4; ++i) {
+ msg << " (" << est_b[i][0] << ", " << est_b[i][1] << ")"; // localizing ok
+ }
+ msg << "\n";
+ TS_WARN(msg.str().c_str());
+ }
+}
+
+static void compare_rms(Point const est_b[], double const t[], Point const d[], unsigned const n,
+ double const exp_rms_error)
+{
+ double sum_errsq = 0.0;
+ for (unsigned i = 0; i < n; ++i) {
+ Point const fit_pt = bezier_pt(3, est_b, t[i]);
+ Point const diff = fit_pt - d[i];
+ sum_errsq += dot(diff, diff);
+ }
+ double const rms_error = sqrt( sum_errsq / n );
+ TS_ASSERT_LESS_THAN_EQUALS( rms_error , exp_rms_error + 1.1e-6 );
+ if ( rms_error < exp_rms_error - 1.1e-6 ) {
+ /* The fitter code appears to have improved [or the floating point calculations differ
+ on this machine from the machine where exp_rms_error was calculated]. */
+ char msg[200];
+ sprintf(msg, "N.B. rms_error regression requirement can be decreased: have rms_error=%g.", rms_error); // localizing ok
+ TS_TRACE(msg);
+ }
+}
+
+class BezierUtilsTest : public CxxTest::TestSuite {
+public:
+ static Point const c[4];
+ static double const t[24];
+ static unsigned const n;
+ Point d[24];
+ static Point const src_b[4];
+ static Point const tHat1;
+ static Point const tHat2;
+
+ BezierUtilsTest()
+ {
+ /* Feed it some points that can be fit exactly with a single bezier segment, and see how
+ well it manages. */
+ for (unsigned i = 0; i < n; ++i) {
+ d[i] = bezier_pt(3, src_b, t[i]);
+ }
+ }
+ virtual ~BezierUtilsTest() {}
+
+ void testCopyWithoutNansOrAdjacentDuplicates()
+ {
+ NR::Point const src[] = {
+ Point(2., 3.),
+ Point(2., 3.),
+ Point(0., 0.),
+ Point(2., 3.),
+ Point(2., 3.),
+ Point(1., 9.),
+ Point(1., 9.)
+ };
+ Point const exp_dest[] = {
+ Point(2., 3.),
+ Point(0., 0.),
+ Point(2., 3.),
+ Point(1., 9.)
+ };
+ g_assert( G_N_ELEMENTS(src) == 7 );
+ Point dest[7];
+ struct tst {
+ unsigned src_ix0;
+ unsigned src_len;
+ unsigned exp_dest_ix0;
+ unsigned exp_dest_len;
+ } const test_data[] = {
+ /* src start ix, src len, exp_dest start ix, exp dest len */
+ {0, 0, 0, 0},
+ {2, 1, 1, 1},
+ {0, 1, 0, 1},
+ {0, 2, 0, 1},
+ {0, 3, 0, 2},
+ {1, 3, 0, 3},
+ {0, 5, 0, 3},
+ {0, 6, 0, 4},
+ {0, 7, 0, 4}
+ };
+ for (unsigned i = 0 ; i < G_N_ELEMENTS(test_data) ; ++i) {
+ tst const &t = test_data[i];
+ TS_ASSERT_EQUALS( t.exp_dest_len,
+ copy_without_nans_or_adjacent_duplicates(src + t.src_ix0,
+ t.src_len,
+ dest) );
+ TS_ASSERT_SAME_DATA(dest,
+ exp_dest + t.exp_dest_ix0,
+ t.exp_dest_len);
+ }
+ }
+
+ void testBezierPt1()
+ {
+ Point const a[] = {Point(2.0, 4.0),
+ Point(1.0, 8.0)};
+ TS_ASSERT_EQUALS( bezier_pt(1, a, 0.0) , a[0] );
+ TS_ASSERT_EQUALS( bezier_pt(1, a, 1.0) , a[1] );
+ TS_ASSERT_EQUALS( bezier_pt(1, a, 0.5) , Point(1.5, 6.0) );
+ double const t[] = {0.5, 0.25, 0.3, 0.6};
+ for (unsigned i = 0; i < G_N_ELEMENTS(t); ++i) {
+ double const ti = t[i], si = 1.0 - ti;
+ TS_ASSERT_EQUALS( bezier_pt(1, a, ti) , si * a[0] + ti * a[1] );
+ }
+ }
+
+ void testBezierPt2()
+ {
+ Point const b[] = {Point(1.0, 2.0),
+ Point(8.0, 4.0),
+ Point(3.0, 1.0)};
+ TS_ASSERT_EQUALS( bezier_pt(2, b, 0.0) , b[0] );
+ TS_ASSERT_EQUALS( bezier_pt(2, b, 1.0) , b[2] );
+ TS_ASSERT_EQUALS( bezier_pt(2, b, 0.5) , Point(5.0, 2.75) );
+ double const t[] = {0.5, 0.25, 0.3, 0.6};
+ for (unsigned i = 0; i < G_N_ELEMENTS(t); ++i) {
+ double const ti = t[i], si = 1.0 - ti;
+ Point const exp_pt( si*si * b[0] + 2*si*ti * b[1] + ti*ti * b[2] );
+ Point const pt(bezier_pt(2, b, ti));
+ TS_ASSERT(point_approx_equal(pt, exp_pt, 1e-11));
+ }
+ }
+
+ void testBezierPt3()
+ {
+ TS_ASSERT_EQUALS( bezier_pt(3, c, 0.0) , c[0] );
+ TS_ASSERT_EQUALS( bezier_pt(3, c, 1.0) , c[3] );
+ TS_ASSERT_EQUALS( bezier_pt(3, c, 0.5) , Point(4.0, 13.0/8.0) );
+ double const t[] = {0.5, 0.25, 0.3, 0.6};
+ for (unsigned i = 0; i < G_N_ELEMENTS(t); ++i) {
+ double const ti = t[i], si = 1.0 - ti;
+ TS_ASSERT( LInfty( bezier_pt(3, c, ti)
+ - ( si*si*si * c[0] +
+ 3*si*si*ti * c[1] +
+ 3*si*ti*ti * c[2] +
+ ti*ti*ti * c[3] ) )
+ < 1e-4 );
+ }
+ }
+
+ void testComputeMaxErrorRatio()
+ {
+ struct Err_tst {
+ Point pt;
+ double u;
+ double err;
+ } const err_tst[] = {
+ {c[0], 0.0, 0.0},
+ {Point(4.0, 13.0/8.0), 0.5, 0.0},
+ {Point(4.0, 2.0), 0.5, 9.0/64.0},
+ {Point(3.0, 2.0), 0.5, 1.0 + 9.0/64.0},
+ {Point(6.0, 2.0), 0.5, 4.0 + 9.0/64.0},
+ {c[3], 1.0, 0.0},
+ };
+ Point d[G_N_ELEMENTS(err_tst)];
+ double u[G_N_ELEMENTS(err_tst)];
+ for (unsigned i = 0; i < G_N_ELEMENTS(err_tst); ++i) {
+ Err_tst const &t = err_tst[i];
+ d[i] = t.pt;
+ u[i] = t.u;
+ }
+ g_assert( G_N_ELEMENTS(u) == G_N_ELEMENTS(d) );
+ unsigned max_ix = ~0u;
+ double const err_ratio = compute_max_error_ratio(d, u, G_N_ELEMENTS(d), c, 1.0, &max_ix);
+ TS_ASSERT_LESS_THAN( fabs( sqrt(err_tst[4].err) - err_ratio ) , 1e-12 );
+ TS_ASSERT_EQUALS( max_ix , 4 );
+ }
+
+ void testChordLengthParameterize()
+ {
+ /* n == 2 */
+ {
+ Point const d[] = {Point(2.9415, -5.8149),
+ Point(23.021, 4.9814)};
+ double u[G_N_ELEMENTS(d)];
+ double const exp_u[] = {0.0, 1.0};
+ g_assert( G_N_ELEMENTS(u) == G_N_ELEMENTS(exp_u) );
+ chord_length_parameterize(d, u, G_N_ELEMENTS(d));
+ TS_ASSERT_SAME_DATA(u, exp_u, G_N_ELEMENTS(exp_u));
+ }
+
+ /* Straight line. */
+ {
+ double const exp_u[] = {0.0, 0.1829, 0.2105, 0.2105, 0.619, 0.815, 0.999, 1.0};
+ unsigned const n = G_N_ELEMENTS(exp_u);
+ Point d[n];
+ double u[n];
+ Point const a(-23.985, 4.915), b(4.9127, 5.203);
+ for (unsigned i = 0; i < n; ++i) {
+ double bi = exp_u[i], ai = 1.0 - bi;
+ d[i] = ai * a + bi * b;
+ }
+ chord_length_parameterize(d, u, n);
+ TS_ASSERT(range_approx_equal(u, exp_u, n));
+ }
+ }
+
+ void testGenerateBezier()
+ {
+ Point est_b[4];
+ generate_bezier(est_b, d, t, n, tHat1, tHat2, 1.0);
+
+ compare_ctlpts(est_b, src_b);
+
+ /* We're being unfair here in using our t[] rather than best t[] for est_b: we
+ may over-estimate RMS of errors. */
+ compare_rms(est_b, t, d, n, 1e-8);
+ }
+
+ void testSpBezierFitCubicFull()
+ {
+ Point est_b[4];
+ int splitpoints[2];
+ gint const succ = sp_bezier_fit_cubic_full(est_b, splitpoints, d, n, tHat1, tHat2, square(1.2), 1);
+ TS_ASSERT_EQUALS( succ , 1 );
+
+ Point const exp_est_b[4] = {
+ Point(5.000000, -3.000000),
+ Point(7.5753, -0.4247),
+ Point(4.77533, 1.22467),
+ Point(3, 3)
+ };
+ compare_ctlpts(est_b, exp_est_b);
+
+ /* We're being unfair here in using our t[] rather than best t[] for est_b: we
+ may over-estimate RMS of errors. */
+ compare_rms(est_b, t, d, n, .307911);
+ }
+
+ void testSpBezierFitCubic()
+ {
+ Point est_b[4];
+ gint const succ = sp_bezier_fit_cubic(est_b, d, n, square(1.2));
+ TS_ASSERT_EQUALS( succ , 1 );
+
+ Point const exp_est_b[4] = {
+ Point(5.000000, -3.000000),
+ Point(7.57134, -0.423509),
+ Point(4.77929, 1.22426),
+ Point(3, 3)
+ };
+ compare_ctlpts(est_b, exp_est_b);
+
+#if 1 /* A change has been made to right_tangent. I believe that usually this change
+ will result in better fitting, but it won't do as well for this example where
+ we happen to be feeding a t=0.999 point to the fitter. */
+ TS_WARN("TODO: Update this test case for revised right_tangent implementation.");
+ /* In particular, have a test case to show whether the new implementation
+ really is likely to be better on average. */
+#else
+ /* We're being unfair here in using our t[] rather than best t[] for est_b: we
+ may over-estimate RMS of errors. */
+ compare_rms(est_b, t, d, n, .307983);
+#endif
+ }
+};
+
+// This is not very neat, but since we know this header is only included by the generated CxxTest file it shouldn't give any problems
+Point const BezierUtilsTest::c[4] = {
+ Point(1.0, 2.0),
+ Point(8.0, 4.0),
+ Point(3.0, 1.0),
+ Point(-2.0, -4.0)};
+double const BezierUtilsTest::t[24] = {
+ 0.0, .001, .03, .05, .09, .13, .18, .25, .29, .33, .39, .44,
+ .51, .57, .62, .69, .75, .81, .91, .93, .97, .98, .999, 1.0};
+unsigned const BezierUtilsTest::n = G_N_ELEMENTS(BezierUtilsTest::t);
+Point const BezierUtilsTest::src_b[4] = {
+ Point(5., -3.),
+ Point(8., 0.),
+ Point(4., 2.),
+ Point(3., 3.)};
+Point const BezierUtilsTest::tHat1(unit_vector( BezierUtilsTest::src_b[1] - BezierUtilsTest::src_b[0] ));
+Point const BezierUtilsTest::tHat2(unit_vector( BezierUtilsTest::src_b[2] - BezierUtilsTest::src_b[3] ));
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/dom/domptr.h b/src/dom/domptr.h
index bf54deaa2..aaf1220f3 100644
--- a/src/dom/domptr.h
+++ b/src/dom/domptr.h
@@ -1,337 +1,337 @@
-#ifndef __DOMPTR_H__
-#define __DOMPTR_H__
-/**
- * Phoebe DOM Implementation.
- *
- * This is a C++ approximation of the W3C DOM model, which follows
- * fairly closely the specifications in the various .idl files, copies of
- * which are provided for reference. Most important is this one:
- *
- * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
- *
- * More thorough explanations of the various classes and their algorithms
- * can be found there.
- *
- *
- * Authors:
- * Bob Jamison
- *
- * Copyright (C) 2006-2008 Bob Jamison
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * =======================================================================
- * NOTES:
- *
- * Notice that many of the classes defined here are pure virtual. In other
- * words, they are purely unimplemented interfaces. For the implementations
- * of them, look in domimpl.h and domimpl.cpp.
- *
- * Also, note that there is a domptr.cpp file that has a couple of necessary
- * functions which cannot be in a .h file
- *
- */
-
-#include <functional>
-
-namespace org
-{
-namespace w3c
-{
-namespace dom
-{
-
-
-
-/*#########################################################################
-## NodePtr
-#########################################################################*/
-
-/**
- * A simple Smart Pointer class that handles Nodes and all of its
- * descendants. This is very similar to shared_ptr, but it is customized
- * to handle our needs.
- */
-template<class T> class Ptr
-{
-public:
-
- /**
- * Simple constructor
- */
- Ptr()
- { _ref = 0; }
-
- /**
- * Constructor upon a reference
- */
- template<class Y> Ptr(const Ptr<Y> &other)
- {
- _ref = other._ref;
- incrementRefCount(_ref);
- }
-
- /**
- * Constructor upon a reference
- */
- Ptr(T * refArg, bool addRef = true)
- {
- _ref = refArg;
- if(addRef)
- incrementRefCount(_ref);
- }
-
-
- /**
- * Copy constructor
- */
- Ptr(const Ptr &other)
- {
- _ref = other._ref;
- incrementRefCount(_ref);
- }
-
- /**
- * Destructor
- */
- virtual ~Ptr()
- {
- decrementRefCount(_ref);
- }
-
-
- /**
- * Assignment operator
- */
- template<class Y> Ptr &operator=(const Ptr<Y> &other)
- {
- decrementRefCount(_ref);
- _ref = other._ref;
- incrementRefCount(_ref);
- return *this;
- }
-
- /**
- * Assignment operator
- */
- Ptr &operator=(const Ptr &other)
- {
- decrementRefCount(_ref);
- _ref = other._ref;
- incrementRefCount(_ref);
- return *this;
- }
-
- /**
- * Assignment operator
- */
- template<class Y> Ptr &operator=(Y * ref)
- {
- decrementRefCount(_ref);
- _ref = ref;
- incrementRefCount(_ref);
- return *this;
- }
-
- /**
- * Assignment operator
- */
- template<class Y> Ptr &operator=(const Y * ref)
- {
- decrementRefCount(_ref);
- _ref = (Y *) ref;
- incrementRefCount(_ref);
- return *this;
- }
-
- /**
- * Return the reference
- */
- T * get() const
- {
- return _ref;
- }
-
- /**
- * Dereference operator
- */
- T &operator*() const
- {
- return *_ref;
- }
-
- /**
- * Point-to operator
- */
- T *operator->() const
- {
- return _ref;
- }
-
- /**
- * NOT bool operator. How to check if we are null without a comparison
- */
- bool operator! () const
- {
- return (_ref == 0);
- }
-
- /**
- * Swap what I reference with the other guy
- */
- void swap(Ptr &other)
- {
- T *tmp = _ref;
- _ref = other._ref;
- other._ref = tmp;
- }
-
- //The referenced item
- T *_ref;
-};
-
-
-/**
- * Global definitions. Many of these are used to mimic behaviour of
- * a real pointer
- */
-
-/**
- * Equality
- */
-template<class T, class U> inline bool
- operator==(const Ptr<T> &a, const Ptr<U> &b)
-{
- return a.get() == b.get();
-}
-
-/**
- * Inequality
- */
-template<class T, class U> inline bool
- operator!=(const Ptr<T> &a, const Ptr<U> &b)
-{
- return a.get() != b.get();
-}
-
-/**
- * Equality
- */
-template<class T> inline bool
- operator==(const Ptr<T> &a, T * b)
-{
- return a.get() == b;
-}
-
-/**
- * Inequality
- */
-template<class T> inline bool
- operator!=(const Ptr<T> &a, T * b)
-{
- return a.get() != b;
-}
-
-/**
- * Equality
- */
-template<class T> inline bool
- operator==(T * a, const Ptr<T> &b)
-{
- return a == b.get();
-}
-
-/**
- * Inequality
- */
-template<class T> inline bool
- operator!=(T * a, const Ptr<T> &b)
-{
- return a != b.get();
-}
-
-
-/**
- * Less than
- */
-template<class T> inline bool
- operator<(const Ptr<T> &a, const Ptr<T> &b)
-{
- return std::less<T *>()(a.get(), b.get());
-}
-
-/**
- * Swap
- */
-template<class T> void
- swap(Ptr<T> &a, Ptr<T> &b)
-{
- a.swap(b);
-}
-
-
-/**
- * Get the pointer globally, for <algo>
- */
-template<class T> T *
- get_pointer(const Ptr<T> &p)
-{
- return p.get();
-}
-
-/**
- * Static cast
- */
-template<class T, class U> Ptr<T>
- static_pointer_cast(const Ptr<U> &p)
-{
- return static_cast<T *>(p.get());
-}
-
-/**
- * Const cast
- */
-template<class T, class U> Ptr<T>
- const_pointer_cast(const Ptr<U> &p)
-{
- return const_cast<T *>(p.get());
-}
-
-/**
- * Dynamic cast
- */
-template<class T, class U> Ptr<T>
- dynamic_pointer_cast(const Ptr<U> &p)
-{
- return dynamic_cast<T *>(p.get());
-}
-
-
-
-} //namespace dom
-} //namespace w3c
-} //namespace org
-
-
-#endif // __DOMPTR_H__
-
-
-/*#########################################################################
-## E N D O F F I L E
-#########################################################################*/
-
-
-
-
+#ifndef __DOMPTR_H__
+#define __DOMPTR_H__
+/**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * More thorough explanations of the various classes and their algorithms
+ * can be found there.
+ *
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2006-2008 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * =======================================================================
+ * NOTES:
+ *
+ * Notice that many of the classes defined here are pure virtual. In other
+ * words, they are purely unimplemented interfaces. For the implementations
+ * of them, look in domimpl.h and domimpl.cpp.
+ *
+ * Also, note that there is a domptr.cpp file that has a couple of necessary
+ * functions which cannot be in a .h file
+ *
+ */
+
+#include <functional>
+
+namespace org
+{
+namespace w3c
+{
+namespace dom
+{
+
+
+
+/*#########################################################################
+## NodePtr
+#########################################################################*/
+
+/**
+ * A simple Smart Pointer class that handles Nodes and all of its
+ * descendants. This is very similar to shared_ptr, but it is customized
+ * to handle our needs.
+ */
+template<class T> class Ptr
+{
+public:
+
+ /**
+ * Simple constructor
+ */
+ Ptr()
+ { _ref = 0; }
+
+ /**
+ * Constructor upon a reference
+ */
+ template<class Y> Ptr(const Ptr<Y> &other)
+ {
+ _ref = other._ref;
+ incrementRefCount(_ref);
+ }
+
+ /**
+ * Constructor upon a reference
+ */
+ Ptr(T * refArg, bool addRef = true)
+ {
+ _ref = refArg;
+ if(addRef)
+ incrementRefCount(_ref);
+ }
+
+
+ /**
+ * Copy constructor
+ */
+ Ptr(const Ptr &other)
+ {
+ _ref = other._ref;
+ incrementRefCount(_ref);
+ }
+
+ /**
+ * Destructor
+ */
+ virtual ~Ptr()
+ {
+ decrementRefCount(_ref);
+ }
+
+
+ /**
+ * Assignment operator
+ */
+ template<class Y> Ptr &operator=(const Ptr<Y> &other)
+ {
+ decrementRefCount(_ref);
+ _ref = other._ref;
+ incrementRefCount(_ref);
+ return *this;
+ }
+
+ /**
+ * Assignment operator
+ */
+ Ptr &operator=(const Ptr &other)
+ {
+ decrementRefCount(_ref);
+ _ref = other._ref;
+ incrementRefCount(_ref);
+ return *this;
+ }
+
+ /**
+ * Assignment operator
+ */
+ template<class Y> Ptr &operator=(Y * ref)
+ {
+ decrementRefCount(_ref);
+ _ref = ref;
+ incrementRefCount(_ref);
+ return *this;
+ }
+
+ /**
+ * Assignment operator
+ */
+ template<class Y> Ptr &operator=(const Y * ref)
+ {
+ decrementRefCount(_ref);
+ _ref = (Y *) ref;
+ incrementRefCount(_ref);
+ return *this;
+ }
+
+ /**
+ * Return the reference
+ */
+ T * get() const
+ {
+ return _ref;
+ }
+
+ /**
+ * Dereference operator
+ */
+ T &operator*() const
+ {
+ return *_ref;
+ }
+
+ /**
+ * Point-to operator
+ */
+ T *operator->() const
+ {
+ return _ref;
+ }
+
+ /**
+ * NOT bool operator. How to check if we are null without a comparison
+ */
+ bool operator! () const
+ {
+ return (_ref == 0);
+ }
+
+ /**
+ * Swap what I reference with the other guy
+ */
+ void swap(Ptr &other)
+ {
+ T *tmp = _ref;
+ _ref = other._ref;
+ other._ref = tmp;
+ }
+
+ //The referenced item
+ T *_ref;
+};
+
+
+/**
+ * Global definitions. Many of these are used to mimic behaviour of
+ * a real pointer
+ */
+
+/**
+ * Equality
+ */
+template<class T, class U> inline bool
+ operator==(const Ptr<T> &a, const Ptr<U> &b)
+{
+ return a.get() == b.get();
+}
+
+/**
+ * Inequality
+ */
+template<class T, class U> inline bool
+ operator!=(const Ptr<T> &a, const Ptr<U> &b)
+{
+ return a.get() != b.get();
+}
+
+/**
+ * Equality
+ */
+template<class T> inline bool
+ operator==(const Ptr<T> &a, T * b)
+{
+ return a.get() == b;
+}
+
+/**
+ * Inequality
+ */
+template<class T> inline bool
+ operator!=(const Ptr<T> &a, T * b)
+{
+ return a.get() != b;
+}
+
+/**
+ * Equality
+ */
+template<class T> inline bool
+ operator==(T * a, const Ptr<T> &b)
+{
+ return a == b.get();
+}
+
+/**
+ * Inequality
+ */
+template<class T> inline bool
+ operator!=(T * a, const Ptr<T> &b)
+{
+ return a != b.get();
+}
+
+
+/**
+ * Less than
+ */
+template<class T> inline bool
+ operator<(const Ptr<T> &a, const Ptr<T> &b)
+{
+ return std::less<T *>()(a.get(), b.get());
+}
+
+/**
+ * Swap
+ */
+template<class T> void
+ swap(Ptr<T> &a, Ptr<T> &b)
+{
+ a.swap(b);
+}
+
+
+/**
+ * Get the pointer globally, for <algo>
+ */
+template<class T> T *
+ get_pointer(const Ptr<T> &p)
+{
+ return p.get();
+}
+
+/**
+ * Static cast
+ */
+template<class T, class U> Ptr<T>
+ static_pointer_cast(const Ptr<U> &p)
+{
+ return static_cast<T *>(p.get());
+}
+
+/**
+ * Const cast
+ */
+template<class T, class U> Ptr<T>
+ const_pointer_cast(const Ptr<U> &p)
+{
+ return const_cast<T *>(p.get());
+}
+
+/**
+ * Dynamic cast
+ */
+template<class T, class U> Ptr<T>
+ dynamic_pointer_cast(const Ptr<U> &p)
+{
+ return dynamic_cast<T *>(p.get());
+}
+
+
+
+} //namespace dom
+} //namespace w3c
+} //namespace org
+
+
+#endif // __DOMPTR_H__
+
+
+/*#########################################################################
+## E N D O F F I L E
+#########################################################################*/
+
+
+
+
diff --git a/src/dom/svg2.h b/src/dom/svg2.h
index 150325106..b1a42e8aa 100644
--- a/src/dom/svg2.h
+++ b/src/dom/svg2.h
@@ -1,5558 +1,5558 @@
-#ifndef __SVG_H__
-#define __SVG_H__
-
-/**
- * Phoebe DOM Implementation.
- *
- * This is a C++ approximation of the W3C DOM model, which follows
- * fairly closely the specifications in the various .idl files, copies of
- * which are provided for reference. Most important is this one:
- *
- * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
- *
- * Authors:
- * Bob Jamison
- *
- * Copyright(C) 2005-2008 Bob Jamison
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or(at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * =======================================================================
- * NOTES
- *
- * This API follows:
- * http://www.w3.org/TR/SVG11/svgdom.html
- *
- * This file defines the main SVG-DOM Node types. Other non-Node types are
- * defined in svgtypes.h.
- *
- */
-
-
-// For access to DOM2 core
-#include "dom/dom.h"
-
-// For access to DOM2 events
-#include "dom/events.h"
-
-// For access to those parts from DOM2 CSS OM used by SVG DOM.
-#include "dom/css.h"
-
-// For access to those parts from DOM2 Views OM used by SVG DOM.
-#include "dom/views.h"
-
-// For access to the SMIL OM used by SVG DOM.
-#include "dom/smil.h"
-
-
-#include <math.h>
-
-#define SVG_NAMESPACE "http://www.w3.org/2000/svg"
-
-
-namespace org
-{
-namespace w3c
-{
-namespace dom
-{
-namespace svg
-{
-
-
-//local definitions
-typedef dom::DOMString DOMString;
-typedef dom::DOMException DOMException;
-typedef dom::Element Element;
-typedef dom::ElementPtr ElementPtr;
-typedef dom::Document Document;
-typedef dom::DocumentPtr DocumentPtr;
-typedef dom::NodeList NodeList;
-
-
-
-
-class SVGElement;
-typedef Ptr<SVGElement> SVGElementPtr;
-class SVGUseElement;
-typedef Ptr<SVGUseElement> SVGUseElementPtr;
-class SVGDocument;
-typedef Ptr<SVGDocument> SVGDocumentPtr;
-
-/*#########################################################################
-## SVGException
-#########################################################################*/
-
-/**
- *
- */
-class SVGException
-{
-public:
-
- /**
- * SVGExceptionCode
- */
- typedef enum
- {
- SVG_WRONG_TYPE_ERR = 0,
- SVG_INVALID_VALUE_ERR = 1,
- SVG_MATRIX_NOT_INVERTABLE = 2
- } SVGExceptionCode;
-
- unsigned short code;
-};
-
-
-
-
-
-
-
-//########################################################################
-//########################################################################
-//# V A L U E S
-//########################################################################
-//########################################################################
-
-
-
-
-
-/*#########################################################################
-## SVGAngle
-#########################################################################*/
-
-/**
- *
- */
-class SVGAngle
-{
-public:
-
- /**
- * Angle Unit Types
- */
- typedef enum
- {
- SVG_ANGLETYPE_UNKNOWN = 0,
- SVG_ANGLETYPE_UNSPECIFIED = 1,
- SVG_ANGLETYPE_DEG = 2,
- SVG_ANGLETYPE_RAD = 3,
- SVG_ANGLETYPE_GRAD = 4
- } AngleUnitType;
-
- /**
- *
- */
- unsigned short getUnitType();
-
- /**
- *
- */
- double getValue();
-
- /**
- *
- */
- void setValue(double val) throw(DOMException);
-
- /**
- *
- */
- double getValueInSpecifiedUnits();
-
- /**
- *
- */
- void setValueInSpecifiedUnits(double /*val*/)
- throw(DOMException);
-
- /**
- *
- */
- DOMString getValueAsString();
-
- /**
- *
- */
- void setValueAsString(const DOMString &/*val*/)
- throw(DOMException);
-
- /**
- *
- */
- void newValueSpecifiedUnits(unsigned short /*unitType*/,
- double /*valueInSpecifiedUnits*/);
-
- /**
- *
- */
- void convertToSpecifiedUnits(unsigned short /*unitType*/);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGAngle();
-
- /**
- *
- */
- SVGAngle(const SVGAngle &other);
-
- /**
- *
- */
- ~SVGAngle();
-
-protected:
-
- int unitType;
-
- double value;
-
-};
-
-
-/*#########################################################################
-## SVGLength
-#########################################################################*/
-
-/**
- *
- */
-class SVGLength
-{
-public:
-
- /**
- * Length Unit Types
- */
- typedef enum
- {
- SVG_LENGTHTYPE_UNKNOWN = 0,
- SVG_LENGTHTYPE_NUMBER = 1,
- SVG_LENGTHTYPE_PERCENTAGE = 2,
- SVG_LENGTHTYPE_EMS = 3,
- SVG_LENGTHTYPE_EXS = 4,
- SVG_LENGTHTYPE_PX = 5,
- SVG_LENGTHTYPE_CM = 6,
- SVG_LENGTHTYPE_MM = 7,
- SVG_LENGTHTYPE_IN = 8,
- SVG_LENGTHTYPE_PT = 9,
- SVG_LENGTHTYPE_PC = 10
- } LengthUnitType;
-
- /**
- *
- */
- unsigned short getUnitType();
-
- /**
- *
- */
- double getValue();
-
- /**
- *
- */
- void setValue(double val) throw(DOMException);
-
- /**
- *
- */
- double getValueInSpecifiedUnits();
-
- /**
- *
- */
- void setValueInSpecifiedUnits(double /*val*/) throw(DOMException);
-
- /**
- *
- */
- DOMString getValueAsString();
-
- /**
- *
- */
- void setValueAsString(const DOMString& /*val*/) throw(DOMException);
-
- /**
- *
- */
- void newValueSpecifiedUnits(unsigned short /*unitType*/, double /*val*/);
-
- /**
- *
- */
- void convertToSpecifiedUnits(unsigned short /*unitType*/);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGLength();
-
- /**
- *
- */
- SVGLength(const SVGLength &other);
-
- /**
- *
- */
- ~SVGLength();
-
-protected:
-
- int unitType;
-
- double value;
-
-};
-
-/*#########################################################################
-## SVGMatrix
-#########################################################################*/
-
-/**
- * In SVG, a Matrix is defined like this:
- *
- * | a c e |
- * | b d f |
- * | 0 0 1 |
- *
- */
-class SVGMatrix
-{
-public:
-
-
- /**
- *
- */
- double getA();
-
- /**
- *
- */
- void setA(double val) throw(DOMException);
-
- /**
- *
- */
- double getB();
-
- /**
- *
- */
- void setB(double val) throw(DOMException);
-
- /**
- *
- */
- double getC();
-
- /**
- *
- */
- void setC(double val) throw(DOMException);
-
- /**
- *
- */
- double getD();
-
- /**
- *
- */
- void setD(double val) throw(DOMException);
-
- /**
- *
- */
- double getE();
-
- /**
- *
- */
- void setE(double val) throw(DOMException);
-
- /**
- *
- */
- double getF();
-
- /**
- *
- */
- void setF(double val) throw(DOMException);
-
-
- /**
- * Return the result of postmultiplying this matrix with another.
- */
- SVGMatrix multiply(const SVGMatrix &other);
-
- /**
- * Calculate the inverse of this matrix
- *
- *
- * The determinant of a 3x3 matrix E
- * (let's use our own notation for a bit)
- *
- * A B C
- * D E F
- * G H I
- * is
- * AEI - AFH - BDI + BFG + CDH - CEG
- *
- * Since in our affine transforms, G and H==0 and I==1,
- * this reduces to:
- * AE - BD
- * In SVG's naming scheme, that is: a * d - c * b . SIMPLE!
- *
- * In a similar method of attack, SVG's adjunct matrix is:
- *
- * d -c cf-ed
- * -b a eb-af
- * 0 0 ad-cb
- *
- * To get the inverse matrix, we divide the adjunct matrix by
- * the determinant. Notice that(ad-cb)/(ad-cb)==1. Very cool.
- * So what we end up with is this:
- *
- * a = d/(ad-cb) c = -c/(ad-cb) e =(cf-ed)/(ad-cb)
- * b = -b/(ad-cb) d = a/(ad-cb) f =(eb-af)/(ad-cb)
- *
- * (Since this would be in all SVG-DOM implementations,
- * somebody needed to document this! ^^)
- *
- */
- SVGMatrix inverse() throw(SVGException);
-
- /**
- * Equivalent to multiplying by:
- * | 1 0 x |
- * | 0 1 y |
- * | 0 0 1 |
- *
- */
- SVGMatrix translate(double x, double y);
-
- /**
- * Equivalent to multiplying by:
- * | scale 0 0 |
- * | 0 scale 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix scale(double scale);
-
- /**
- * Equivalent to multiplying by:
- * | scaleX 0 0 |
- * | 0 scaleY 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix scaleNonUniform(double scaleX, double scaleY);
-
- /**
- * Equivalent to multiplying by:
- * | cos(a) -sin(a) 0 |
- * | sin(a) cos(a) 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix rotate(double angle);
-
- /**
- * Equivalent to multiplying by:
- * | cos(a) -sin(a) 0 |
- * | sin(a) cos(a) 0 |
- * | 0 0 1 |
- * In this case, angle 'a' is computed as the artangent
- * of the slope y/x . It is negative if the slope is negative.
- */
- SVGMatrix rotateFromVector(double x, double y) throw(SVGException);
-
- /**
- * Equivalent to multiplying by:
- * | -1 0 0 |
- * | 0 1 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix flipX();
-
- /**
- * Equivalent to multiplying by:
- * | 1 0 0 |
- * | 0 -1 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix flipY();
-
- /**
- * | 1 tan(a) 0 |
- * | 0 1 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix skewX(double angle);
-
- /**
- * Equivalent to multiplying by:
- * | 1 0 0 |
- * | tan(a) 1 0 |
- * | 0 0 1 |
- *
- */
- SVGMatrix skewY(double angle);
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGMatrix();
-
- /**
- *
- */
- SVGMatrix(double aArg, double bArg, double cArg,
- double dArg, double eArg, double fArg);
-
- /**
- * Copy constructor
- */
- SVGMatrix(const SVGMatrix &other);
-
- /**
- *
- */
- ~SVGMatrix() {}
-
-protected:
-
-friend class SVGTransform;
-
- /*
- * Set to the identify matrix
- */
- void identity();
-
- double a, b, c, d, e, f;
-
-};
-
-
-/*#########################################################################
-## SVGNumber
-#########################################################################*/
-
-/**
- *
- */
-class SVGNumber
-{
-public:
-
- /**
- *
- */
- double getValue();
-
- /**
- *
- */
- void setValue(double val) throw(DOMException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGNumber();
-
- /**
- *
- */
- SVGNumber(const SVGNumber &other);
-
- /**
- *
- */
- ~SVGNumber();
-
-protected:
-
- double value;
-
-};
-
-/*#########################################################################
-## SVGPoint
-#########################################################################*/
-
-/**
- *
- */
-class SVGPoint
-{
-public:
-
- /**
- *
- */
- double getX();
-
- /**
- *
- */
- void setX(double val) throw(DOMException);
-
- /**
- *
- */
- double getY();
-
- /**
- *
- */
- void setY(double val) throw(DOMException);
-
- /**
- *
- */
- SVGPoint matrixTransform(const SVGMatrix &/*matrix*/);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGPoint();
-
- /**
- *
- */
- SVGPoint(const SVGPoint &other);
-
- /**
- *
- */
- ~SVGPoint();
-
-protected:
-
- double x, y;
-};
-
-
-/*#########################################################################
-## SVGPathSeg
-#########################################################################*/
-
-/**
- *
- */
-class SVGPathSeg
-{
-public:
-
- /**
- * Path Segment Types
- */
- typedef enum
- {
- PATHSEG_UNKNOWN = 0,
- PATHSEG_CLOSEPATH = 1,
- PATHSEG_MOVETO_ABS = 2,
- PATHSEG_MOVETO_REL = 3,
- PATHSEG_LINETO_ABS = 4,
- PATHSEG_LINETO_REL = 5,
- PATHSEG_CURVETO_CUBIC_ABS = 6,
- PATHSEG_CURVETO_CUBIC_REL = 7,
- PATHSEG_CURVETO_QUADRATIC_ABS = 8,
- PATHSEG_CURVETO_QUADRATIC_REL = 9,
- PATHSEG_ARC_ABS = 10,
- PATHSEG_ARC_REL = 11,
- PATHSEG_LINETO_HORIZONTAL_ABS = 12,
- PATHSEG_LINETO_HORIZONTAL_REL = 13,
- PATHSEG_LINETO_VERTICAL_ABS = 14,
- PATHSEG_LINETO_VERTICAL_REL = 15,
- PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16,
- PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17,
- PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18,
- PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19
- } PathSegmentType;
-
- /**
- *
- */
- unsigned short getPathSegType();
-
- /**
- *
- */
- DOMString getPathSegTypeAsLetter();
-
- /**
- * From the various subclasses
- */
-
- /**
- *
- */
- double getX();
-
- /**
- *
- */
- void setX(double val) throw(DOMException);
-
- /**
- *
- */
- double getX1();
-
- /**
- *
- */
- void setX1(double val) throw(DOMException);
-
- /**
- *
- */
- double getX2();
-
- /**
- *
- */
- void setX2(double val) throw(DOMException);
-
- /**
- *
- */
- double getY();
-
- /**
- *
- */
- void setY(double val) throw(DOMException);
-
- /**
- *
- */
- double getY1();
-
- /**
- *
- */
- void setY1(double val) throw(DOMException);
-
- /**
- *
- */
- double getY2();
-
- /**
- *
- */
- void setY2(double val) throw(DOMException);
-
- /**
- *
- */
- double getR1();
-
- /**
- *
- */
- void setR1(double val) throw(DOMException);
-
- /**
- *
- */
- double getR2();
-
- /**
- *
- */
- void setR2(double val) throw(DOMException);
-
- /**
- *
- */
- double getAngle();
-
- /**
- *
- */
- void setAngle(double val) throw(DOMException);
-
- /**
- *
- */
- bool getLargeArcFlag();
-
- /**
- *
- */
- void setLargeArcFlag(bool val) throw(DOMException);
-
- /**
- *
- */
- bool getSweepFlag();
-
- /**
- *
- */
- void setSweepFlag(bool val) throw(DOMException);
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGPathSeg();
-
- /**
- *
- */
- SVGPathSeg(int typeArg);
-
- /**
- *
- */
- SVGPathSeg(const SVGPathSeg &other);
-
- /**
- *
- */
- SVGPathSeg &operator=(const SVGPathSeg &other);
-
- /**
- *
- */
- ~SVGPathSeg();
-
-protected:
-
- void init();
-
- void assign(const SVGPathSeg &other);
-
- int type;
- double x, y, x1, y1, x2, y2;
- double r1, r2;
- double angle;
- bool largeArcFlag;
- bool sweepFlag;
-};
-
-
-/*#########################################################################
-## SVGPreserveAspectRatio
-#########################################################################*/
-
-/**
- *
- */
-class SVGPreserveAspectRatio
-{
-public:
-
-
- /**
- * Alignment Types
- */
- typedef enum
- {
- SVG_PRESERVEASPECTRATIO_UNKNOWN = 0,
- SVG_PRESERVEASPECTRATIO_NONE = 1,
- SVG_PRESERVEASPECTRATIO_XMINYMIN = 2,
- SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3,
- SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4,
- SVG_PRESERVEASPECTRATIO_XMINYMID = 5,
- SVG_PRESERVEASPECTRATIO_XMIDYMID = 6,
- SVG_PRESERVEASPECTRATIO_XMAXYMID = 7,
- SVG_PRESERVEASPECTRATIO_XMINYMAX = 8,
- SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9,
- SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10
- } AlignmentType;
-
-
- /**
- * Meet-or-slice Types
- */
- typedef enum
- {
- SVG_MEETORSLICE_UNKNOWN = 0,
- SVG_MEETORSLICE_MEET = 1,
- SVG_MEETORSLICE_SLICE = 2
- } MeetOrSliceType;
-
-
- /**
- *
- */
- unsigned short getAlign();
-
- /**
- *
- */
- void setAlign(unsigned short val) throw(DOMException);
-
- /**
- *
- */
- unsigned short getMeetOrSlice();
-
- /**
- *
- */
- void setMeetOrSlice(unsigned short val) throw(DOMException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGPreserveAspectRatio();
-
- /**
- *
- */
- SVGPreserveAspectRatio(const SVGPreserveAspectRatio &other);
-
- /**
- *
- */
- ~SVGPreserveAspectRatio();
-
-protected:
-
- unsigned short align;
- unsigned short meetOrSlice;
-
-};
-
-
-
-/*#########################################################################
-## SVGRect
-#########################################################################*/
-
-/**
- *
- */
-class SVGRect
-{
-public:
-
- /**
- *
- */
- double getX();
-
- /**
- *
- */
- void setX(double val) throw(DOMException);
-
- /**
- *
- */
- double getY();
-
- /**
- *
- */
- void setY(double val) throw(DOMException);
-
- /**
- *
- */
- double getWidth();
-
- /**
- *
- */
- void setWidth(double val) throw(DOMException);
-
- /**
- *
- */
- double getHeight();
-
- /**
- *
- */
- void setHeight(double val) throw(DOMException);
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGRect();
-
- /**
- *
- */
- SVGRect(const SVGRect &other);
-
- /**
- *
- */
- ~SVGRect();
-
-protected:
-
- double x, y, width, height;
-
-};
-
-/*#########################################################################
-## SVGTransform
-#########################################################################*/
-
-/**
- *
- */
-class SVGTransform
-{
-public:
-
- /**
- * Transform Types
- */
- typedef enum
- {
- SVG_TRANSFORM_UNKNOWN = 0,
- SVG_TRANSFORM_MATRIX = 1,
- SVG_TRANSFORM_TRANSLATE = 2,
- SVG_TRANSFORM_SCALE = 3,
- SVG_TRANSFORM_ROTATE = 4,
- SVG_TRANSFORM_SKEWX = 5,
- SVG_TRANSFORM_SKEWY = 6,
- } TransformType;
-
- /**
- *
- */
- unsigned short getType();
-
-
- /**
- *
- */
- SVGMatrix getMatrix();
-
- /**
- *
- */
- double getAngle();
-
- /**
- *
- */
- void setMatrix(const SVGMatrix &matrixArg);
-
- /**
- *
- */
- void setTranslate(double tx, double ty);
-
- /**
- *
- */
- void setScale(double sx, double sy);
-
- /**
- *
- */
- void setRotate(double angleArg, double cx, double cy);
-
- /**
- *
- */
- void setSkewX(double angleArg);
-
- /**
- *
- */
- void setSkewY(double angleArg);
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGTransform();
-
- /**
- *
- */
- SVGTransform(const SVGTransform &other);
-
- /**
- *
- */
- ~SVGTransform();
-
-protected:
-
- int type;
- double angle;
-
- SVGMatrix matrix;
-};
-
-
-
-
-/*#########################################################################
-## SVGUnitTypes
-#########################################################################*/
-
-/**
- *
- */
-class SVGUnitTypes
-{
-public:
-
- /**
- * Unit Types
- */
- typedef enum
- {
- SVG_UNIT_TYPE_UNKNOWN = 0,
- SVG_UNIT_TYPE_USERSPACEONUSE = 1,
- SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2
- } UnitType;
-
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGUnitTypes();
-
- /**
- *
- */
- ~SVGUnitTypes();
-
-};
-
-
-
-
-/*#########################################################################
-## SVGValue
-#########################################################################*/
-
-/**
- * This is a helper class that will hold several types of data. It will
- * be used in those situations where methods are common to different
- * interfaces, except for the data type. This class holds the following:
- * SVGAngle
- * SVGBoolean
- * SVGEnumeration
- * SVGInteger
- * SVGLength
- * SVGNumber
- * SVGPreserveAspectRatio
- * SVGRect
- * SVGString
- */
-class SVGValue
-{
-public:
-
- /**
- *
- */
- typedef enum
- {
- SVG_ANGLE,
- SVG_BOOLEAN,
- SVG_ENUMERATION,
- SVG_INTEGER,
- SVG_LENGTH,
- SVG_NUMBER,
- SVG_PRESERVE_ASPECT_RATIO,
- SVG_RECT,
- SVG_STRING,
- } SVGValueType;
-
- /**
- * Constructor
- */
- SVGValue();
-
- /**
- * Copy constructor
- */
- SVGValue(const SVGValue &other);
-
- /**
- * Assignment
- */
- SVGValue &operator=(const SVGValue &other);
-
- /**
- *
- */
- ~SVGValue();
-
- //###########################
- // TYPES
- //###########################
-
- /**
- * Angle
- */
- SVGValue(const SVGAngle &v);
-
- SVGAngle angleValue();
-
- /**
- * Boolean
- */
- SVGValue(bool v);
-
- bool booleanValue();
-
-
- /**
- * Enumeration
- */
- SVGValue(short v);
-
- short enumerationValue();
-
- /**
- * Integer
- */
- SVGValue(long v);
-
- long integerValue();
-
- /**
- * Length
- */
- SVGValue(const SVGLength &v);
-
- SVGLength lengthValue();
-
- /**
- * Number
- */
- SVGValue(double v);
-
- double numberValue();
-
- /**
- * PathSegment
- */
- SVGValue(const SVGPathSeg &v);
-
- SVGPathSeg pathDataValue();
-
-
- /**
- * Points
- */
- SVGValue(const SVGPoint &v);
-
- SVGPoint pointValue();
-
-
- /**
- * PreserveAspectRatio
- */
- SVGValue(const SVGPreserveAspectRatio &v);
-
- SVGPreserveAspectRatio preserveAspectRatioValue();
-
- /**
- * Rect
- */
- SVGValue(const SVGRect &v);
-
- SVGRect rectValue();
-
- /**
- * String
- */
- SVGValue(const DOMString &v);
-
- DOMString stringValue();
-
- /**
- * TransformList
- */
- SVGValue(const SVGTransform &v);
-
- SVGTransform transformValue();
-
-
-private:
-
- void init();
-
- void assign(const SVGValue &other);
-
- short type;
- SVGAngle angleval; // SVGAngle
- bool bval; // SVGBoolean
- short eval; // SVGEnumeration
- long ival; // SVGInteger
- SVGLength lengthval; // SVGLength
- double dval; // SVGNumber
- SVGPathSeg segval; // SVGPathSeg
- SVGPoint pointval; // SVGPoint
- SVGPreserveAspectRatio parval; // SVGPreserveAspectRatio
- SVGRect rval; // SVGRect
- DOMString sval; // SVGString
- SVGTransform transformval; // SVGTransform
-
-};
-
-
-/*#########################################################################
-## SVGValueList
-#########################################################################*/
-
-/**
- * THis is used to generify a bit the several different types of lists:
- *
- * SVGLengthList -> SVGValueList<SVGLength>
- * SVGValueList -> SVGValueList<SVGNumber>
- * SVGPathData -> SVGValueList<SVGPathSeg>
- * SVGPoints -> SVGValueList<SVGPoint>
- * SVGTransformList -> SVGValueList<SVGTransform>
- */
-class SVGValueList
-{
-public:
-
- /**
- *
- */
- typedef enum
- {
- SVG_LIST_LENGTH,
- SVG_LIST_NUMBER,
- SVG_LIST_PATHSEG,
- SVG_LIST_POINT,
- SVG_LIST_TRANSFORM
- } SVGValueListTypes;
-
- /**
- *
- */
- unsigned long getNumberOfItems();
-
-
- /**
- *
- */
- void clear() throw(DOMException);
-
- /**
- *
- */
- SVGValue getItem(unsigned long index) throw(DOMException);
-
- /**
- *
- */
- SVGValue insertItemBefore(const SVGValue &newItem,
- unsigned long index)
- throw(DOMException, SVGException);
-
- /**
- *
- */
- SVGValue replaceItem(const SVGValue &newItem,
- unsigned long index)
- throw(DOMException, SVGException);
-
- /**
- *
- */
- SVGValue removeItem(unsigned long index) throw(DOMException);
-
- /**
- *
- */
- SVGValue appendItem(const SVGValue &newItem)
- throw(DOMException, SVGException);
-
- /**
- * Matrix
- */
- SVGValue initialize(const SVGValue &newItem)
- throw(DOMException, SVGException);
-
- /**
- * Matrix
- */
- SVGValue createSVGTransformFromMatrix(const SVGValue &matrix);
-
- /**
- * Matrix
- */
- SVGValue consolidate();
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGValueList();
-
- /**
- *
- */
- SVGValueList(const SVGValueList &other);
-
- /**
- *
- */
- ~SVGValueList();
-
-protected:
-
- std::vector<SVGValue> items;
-
-};
-
-
-
-
-
-/*#########################################################################
-## SVGAnimatedValue
-#########################################################################*/
-
-/**
- * This class is used to merge all of the "Animated" values, with only
- * a different type, into a single API. This class subsumes the following:
- * SVGAnimatedValue
- * SVGAnimatedValue
- * SVGAnimatedValue
- * SVGAnimatedValue
- * SVGAnimatedValue
- * SVGAnimatedValue
- * SVGAnimatedPathData
- * SVGAnimatedPoints
- * SVGAnimatedPreserveAspectRatio
- * SVGAnimatedValue
- * SVGAnimatedValue
- */
-class SVGAnimatedValue
-{
-public:
-
- /**
- *
- */
- SVGValue &getBaseVal();
-
- /**
- *
- */
- void setBaseVal(const SVGValue &val) throw (DOMException);
-
- /**
- *
- */
- SVGValue &getAnimVal();
-
- /**
- *
- */
- SVGAnimatedValue();
-
- /**
- *
- */
- SVGAnimatedValue(const SVGValue &baseValue);
-
- /**
- *
- */
- SVGAnimatedValue(const SVGValue &baseValue, const SVGValue &animValue);
-
- /**
- *
- */
- SVGAnimatedValue(const SVGAnimatedValue &other);
-
- /**
- *
- */
- SVGAnimatedValue &operator=(const SVGAnimatedValue &other);
-
- /**
- *
- */
- SVGAnimatedValue &operator=(const SVGValue &baseVal);
-
- /**
- *
- */
- ~SVGAnimatedValue();
-
-private:
-
- void init();
-
- void assign(const SVGAnimatedValue &other);
-
- SVGValue baseVal;
-
- SVGValue animVal;
-
-};
-
-
-/*#########################################################################
-## SVGAnimatedValueList
-#########################################################################*/
-
-/**
- * This class is used to merge all of the "Animated" values, with only
- * a different type, into a single API. This class subsumes the following:
- * SVGAnimatedValueList
- * SVGAnimatedValueList
- * SVGAnimatedTransformList
- */
-class SVGAnimatedValueList
-{
-public:
-
- /**
- *
- */
- SVGValueList &getBaseVal();
-
- /**
- *
- */
- void setBaseVal(const SVGValueList &val) throw (DOMException);
-
- /**
- *
- */
- SVGValueList &getAnimVal();
-
- /**
- *
- */
- SVGAnimatedValueList();
-
- /**
- *
- */
- SVGAnimatedValueList(const SVGValueList &baseValue);
-
- /**
- *
- */
- SVGAnimatedValueList(const SVGValueList &baseValue, const SVGValueList &animValue);
-
- /**
- *
- */
- SVGAnimatedValueList(const SVGAnimatedValueList &other);
-
- /**
- *
- */
- SVGAnimatedValueList &operator=(const SVGAnimatedValueList &other);
-
- /**
- *
- */
- SVGAnimatedValueList &operator=(const SVGValueList &baseVal);
-
- /**
- *
- */
- ~SVGAnimatedValueList();
-
-private:
-
- void init();
-
- void assign(const SVGAnimatedValueList &other);
-
- SVGValueList baseVal;
-
- SVGValueList animVal;
-
-};
-
-
-
-/*#########################################################################
-## SVGICCColor
-#########################################################################*/
-
-/**
- *
- */
-class SVGICCColor
-{
-public:
-
- /**
- *
- */
- DOMString getColorProfile();
-
- /**
- *
- */
- void setColorProfile(const DOMString &val) throw(DOMException);
-
- /**
- *
- */
- SVGValueList &getColors();
-
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGICCColor();
-
- /**
- *
- */
- SVGICCColor(const SVGICCColor &other);
-
- /**
- *
- */
- ~SVGICCColor();
-
-protected:
-
- DOMString colorProfile;
-
- SVGValueList colors;
-
-};
-
-
-
-/*#########################################################################
-## SVGColor
-#########################################################################*/
-
-/**
- *
- */
-class SVGColor : public css::CSSValue
-{
-public:
-
-
- /**
- * Color Types
- */
- typedef enum
- {
- SVG_COLORTYPE_UNKNOWN = 0,
- SVG_COLORTYPE_RGBCOLOR = 1,
- SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2,
- SVG_COLORTYPE_CURRENTCOLOR = 3
- } ColorType;
-
-
- /**
- *
- */
- unsigned short getColorType();
-
- /**
- *
- */
- css::RGBColor getRgbColor();
-
- /**
- *
- */
- SVGICCColor getIccColor();
-
-
- /**
- *
- */
- void setRGBColor(const DOMString& /*rgbColor*/)
- throw(SVGException);
-
- /**
- *
- */
- void setRGBColorICCColor(const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw(SVGException);
-
- /**
- *
- */
- void setColor(unsigned short /*colorType*/,
- const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw(SVGException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGColor();
-
- /**
- *
- */
- SVGColor(const SVGColor &other);
-
- /**
- *
- */
- ~SVGColor();
-
-protected:
-
- int colorType;
-
-};
-
-
-
-/*#########################################################################
-## SVGPaint
-#########################################################################*/
-
-/**
- *
- */
-class SVGPaint : public SVGColor
-{
-public:
-
- /**
- * Paint Types
- */
- typedef enum
- {
- SVG_PAINTTYPE_UNKNOWN = 0,
- SVG_PAINTTYPE_RGBCOLOR = 1,
- SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2,
- SVG_PAINTTYPE_NONE = 101,
- SVG_PAINTTYPE_CURRENTCOLOR = 102,
- SVG_PAINTTYPE_URI_NONE = 103,
- SVG_PAINTTYPE_URI_CURRENTCOLOR = 104,
- SVG_PAINTTYPE_URI_RGBCOLOR = 105,
- SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106,
- SVG_PAINTTYPE_URI = 107
- } PaintType;
-
-
- /**
- *
- */
- unsigned short getPaintType();
-
- /**
- *
- */
- DOMString getUri();
-
- /**
- *
- */
- void setUri(const DOMString& uriArg);
-
- /**
- *
- */
- void setPaint(unsigned short paintTypeArg,
- const DOMString& uriArg,
- const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw(SVGException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGPaint();
-
- /**
- *
- */
- SVGPaint(const SVGPaint &other);
-
- /**
- *
- */
- ~SVGPaint();
-
-protected:
-
- unsigned int paintType;
- DOMString uri;
-
-};
-
-
-
-
-//########################################################################
-//########################################################################
-//# I N T E R F A C E S
-//########################################################################
-//########################################################################
-
-
-
-
-
-
-
-/*#########################################################################
-## SVGStylable
-#########################################################################*/
-
-/**
- *
- */
-class SVGStylable
-{
-public:
-
- /**
- *
- */
- SVGAnimatedValue getClassName();
-
- /**
- *
- */
- css::CSSStyleDeclaration getStyle();
-
-
- /**
- *
- */
- css::CSSValue getPresentationAttribute(const DOMString& /*name*/);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGStylable();
-
- /**
- *
- */
- SVGStylable(const SVGStylable &other);
-
- /**
- *
- */
- ~SVGStylable();
-
-protected:
-
- SVGAnimatedValue className;
- css::CSSStyleDeclaration style;
-
-};
-
-
-
-
-
-/*#########################################################################
-## SVGLocatable
-#########################################################################*/
-
-/**
- *
- */
-class SVGLocatable
-{
-public:
-
- /**
- *
- */
- SVGElementPtr getNearestViewportElement();
-
- /**
- *
- */
- SVGElementPtr getFarthestViewportElement();
-
- /**
- *
- */
- SVGRect getBBox();
-
- /**
- *
- */
- SVGMatrix getCTM();
-
- /**
- *
- */
- SVGMatrix getScreenCTM();
-
- /**
- *
- */
- SVGMatrix getTransformToElement(const SVGElement &/*element*/)
- throw(SVGException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGLocatable();
-
- /**
- *
- */
- SVGLocatable(const SVGLocatable &/*other*/);
-
- /**
- *
- */
- ~SVGLocatable();
-
-protected:
-
- SVGRect bbox;
- SVGMatrix ctm;
- SVGMatrix screenCtm;
-
-};
-
-
-/*#########################################################################
-## SVGTransformable
-#########################################################################*/
-
-/**
- *
- */
-class SVGTransformable : public SVGLocatable
-{
-public:
-
-
- /**
- *
- */
- SVGAnimatedValueList &getTransform();
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGTransformable();
-
- /**
- *
- */
- SVGTransformable(const SVGTransformable &other);
-
- /**
- *
- */
- ~SVGTransformable();
-
-protected:
-
- SVGAnimatedValueList transforms;
-};
-
-
-
-/*#########################################################################
-## SVGTests
-#########################################################################*/
-
-/**
- *
- */
-class SVGTests
-{
-public:
-
- /**
- *
- */
- SVGValueList &getRequiredFeatures();
-
- /**
- *
- */
- SVGValueList &getRequiredExtensions();
-
- /**
- *
- */
- SVGValueList &getSystemLanguage();
-
- /**
- *
- */
- bool hasExtension(const DOMString& /*extension*/);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGTests();
-
- /**
- *
- */
- SVGTests(const SVGTests &other);
-
- /**
- *
- */
- ~SVGTests();
-
-protected:
-
- SVGValueList requiredFeatures;
- SVGValueList requiredExtensions;
- SVGValueList systemLanguage;
-
-};
-
-
-
-
-
-
-/*#########################################################################
-## SVGLangSpace
-#########################################################################*/
-
-/**
- *
- */
-class SVGLangSpace
-{
-public:
-
-
- /**
- *
- */
- DOMString getXmlLang();
-
- /**
- *
- */
- void setXmlLang(const DOMString &val) throw(DOMException);
-
- /**
- *
- */
- DOMString getXmlSpace();
-
- /**
- *
- */
- void setXmlSpace(const DOMString &val) throw(DOMException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGLangSpace();
-
- /**
- *
- */
- SVGLangSpace(const SVGLangSpace &other);
-
- /**
- *
- */
- ~SVGLangSpace();
-
-protected:
-
- DOMString xmlLang;
- DOMString xmlSpace;
-
-};
-
-
-
-/*#########################################################################
-## SVGExternalResourcesRequired
-#########################################################################*/
-
-/**
- *
- */
-class SVGExternalResourcesRequired
-{
-public:
-
- /**
- * boolean
- */
- SVGAnimatedValue getExternalResourcesRequired();
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGExternalResourcesRequired();
-
- /**
- *
- */
- SVGExternalResourcesRequired(const SVGExternalResourcesRequired &other);
-
- /**
- *
- */
- ~SVGExternalResourcesRequired();
-
-protected:
-
- SVGAnimatedValue required; //boolean
-
-};
-
-
-
-
-
-
-
-
-
-/*#########################################################################
-## SVGFitToViewBox
-#########################################################################*/
-
-/**
- *
- */
-class SVGFitToViewBox
-{
-public:
-
- /**
- * rect
- */
- SVGAnimatedValue getViewBox();
-
- /**
- * preserveAspectRatio
- */
- SVGAnimatedValue getPreserveAspectRatio();
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGFitToViewBox();
-
- /**
- *
- */
- SVGFitToViewBox(const SVGFitToViewBox &other);
-
- /**
- *
- */
- ~SVGFitToViewBox();
-
-protected:
-
- SVGAnimatedValue viewBox; //rect
- SVGAnimatedValue preserveAspectRatio;
-
-};
-
-
-/*#########################################################################
-## SVGZoomAndPan
-#########################################################################*/
-
-/**
- *
- */
-class SVGZoomAndPan
-{
-public:
-
- /**
- * Zoom and Pan Types
- */
- typedef enum
- {
- SVG_ZOOMANDPAN_UNKNOWN = 0,
- SVG_ZOOMANDPAN_DISABLE = 1,
- SVG_ZOOMANDPAN_MAGNIFY = 2
- } ZoomAndPanType;
-
- /**
- *
- */
- unsigned short getZoomAndPan();
-
- /**
- *
- */
- void setZoomAndPan(unsigned short val) throw(DOMException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGZoomAndPan();
-
- /**
- *
- */
- SVGZoomAndPan(const SVGZoomAndPan &other);
-
- /**
- *
- */
- ~SVGZoomAndPan();
-
-protected:
-
- unsigned short zoomAndPan;
-
-};
-
-
-
-
-
-
-/*#########################################################################
-## SVGViewSpec
-#########################################################################*/
-
-/**
- *
- */
-class SVGViewSpec : public SVGZoomAndPan,
- public SVGFitToViewBox
-{
-public:
-
- /**
- *
- */
- SVGValueList getTransform();
-
- /**
- *
- */
- SVGElementPtr getViewTarget();
-
- /**
- *
- */
- DOMString getViewBoxString();
-
- /**
- *
- */
- DOMString getPreserveAspectRatioString();
-
- /**
- *
- */
- DOMString getTransformString();
-
- /**
- *
- */
- DOMString getViewTargetString();
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGViewSpec();
-
- /**
- *
- */
- SVGViewSpec(const SVGViewSpec &other);
-
- /**
- *
- */
- ~SVGViewSpec();
-
-protected:
-
- SVGElementPtr viewTarget;
- SVGValueList transform;
-};
-
-
-/*#########################################################################
-## SVGURIReference
-#########################################################################*/
-
-/**
- *
- */
-class SVGURIReference
-{
-public:
-
- /**
- * string
- */
- SVGAnimatedValue getHref();
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGURIReference();
-
- /**
- *
- */
- SVGURIReference(const SVGURIReference &other);
-
- /**
- *
- */
- ~SVGURIReference();
-
-protected:
-
- SVGAnimatedValue href;
-
-};
-
-
-
-
-
-
-/*#########################################################################
-## SVGCSSRule
-#########################################################################*/
-
-/**
- *
- */
-class SVGCSSRule : public css::CSSRule
-{
-public:
-
-
- /**
- * Additional CSS RuleType to support ICC color specifications
- */
- typedef enum
- {
- COLOR_PROFILE_RULE = 7
- } ColorProfileRuleType;
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGCSSRule();
-
- /**
- *
- */
- SVGCSSRule(const SVGCSSRule &other);
-
- /**
- *
- */
- ~SVGCSSRule();
-
-};
-
-
-
-/*#########################################################################
-## SVGRenderingIntent
-#########################################################################*/
-
-/**
- *
- */
-class SVGRenderingIntent
-{
-public:
-
- /**
- * Rendering Intent Types
- */
- typedef enum
- {
- RENDERING_INTENT_UNKNOWN = 0,
- RENDERING_INTENT_AUTO = 1,
- RENDERING_INTENT_PERCEPTUAL = 2,
- RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3,
- RENDERING_INTENT_SATURATION = 4,
- RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5
- } RenderingIntentType;
-
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGRenderingIntent();
-
- /**
- *
- */
- SVGRenderingIntent(const SVGRenderingIntent &other);
-
- /**
- *
- */
- ~SVGRenderingIntent();
-
-protected:
-
- unsigned short renderingIntentType;
-};
-
-
-
-
-
-
-
-
-
-/*#########################################################################
-## SVGColorProfileRule
-#########################################################################*/
-
-/**
- *
- */
-class SVGColorProfileRule : public SVGCSSRule,
- public SVGRenderingIntent
-{
-
-public:
-
- /**
- *
- */
- DOMString getSrc();
-
- /**
- *
- */
- void setSrc(const DOMString &val) throw(DOMException);
-
- /**
- *
- */
- DOMString getName();
-
- /**
- *
- */
- void setName(const DOMString &val) throw(DOMException);
-
- /**
- *
- */
- unsigned short getRenderingIntent();
-
- /**
- *
- */
- void setRenderingIntent(unsigned short val) throw(DOMException);
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGColorProfileRule();
-
- /**
- *
- */
- SVGColorProfileRule(const SVGColorProfileRule &other);
-
- /**
- *
- */
- ~SVGColorProfileRule();
-
-protected:
-
- unsigned short renderingIntent;
- DOMString src;
- DOMString name;
-
-};
-
-
-
-/*#########################################################################
-## SVGFilterPrimitiveStandardAttributes
-#########################################################################*/
-
-/**
- *
- */
-class SVGFilterPrimitiveStandardAttributes : public SVGStylable
-{
-public:
-
- /**
- * length
- */
- SVGAnimatedValue getX();
-
- /**
- * length
- */
- SVGAnimatedValue getY();
-
- /**
- * length
- */
- SVGAnimatedValue getWidth();
-
- /**
- * length
- */
- SVGAnimatedValue getHeight();
-
- /**
- * string
- */
- SVGAnimatedValue getResult();
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGFilterPrimitiveStandardAttributes();
-
- /**
- *
- */
- SVGFilterPrimitiveStandardAttributes(
- const SVGFilterPrimitiveStandardAttributes &other);
-
- /**
- *
- */
- ~SVGFilterPrimitiveStandardAttributes();
-
-protected:
-
- SVGAnimatedValue x;
- SVGAnimatedValue y;
- SVGAnimatedValue width;
- SVGAnimatedValue height;
- SVGAnimatedValue result;
-
-};
-
-
-/*#########################################################################
-## SVGEvent
-#########################################################################*/
-
-/**
- *
- */
-class SVGEvent : events::Event
-{
-public:
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGEvent();
-
- /**
- *
- */
- SVGEvent(const SVGEvent &other);
-
- /**
- *
- */
- ~SVGEvent();
-
-};
-
-
-
-
-/*#########################################################################
-## SVGZoomEvent
-#########################################################################*/
-
-/**
- *
- */
-class SVGZoomEvent : events::UIEvent
-{
-public:
-
- /**
- *
- */
- SVGRect getZoomRectScreen();
-
- /**
- *
- */
- double getPreviousScale();
-
- /**
- *
- */
- SVGPoint getPreviousTranslate();
-
- /**
- *
- */
- double getNewScale();
-
- /**
- *
- */
- SVGPoint getNewTranslate();
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGZoomEvent();
-
- /**
- *
- */
- SVGZoomEvent(const SVGZoomEvent &other);
-
- /**
- *
- */
- ~SVGZoomEvent();
-
-protected:
-
- SVGRect zoomRectScreen;
- double previousScale;
- SVGPoint previousTranslate;
- double newScale;
- SVGPoint newTranslate;
-
-};
-
-
-
-/*#########################################################################
-## SVGElementInstance
-#########################################################################*/
-
-/**
- *
- */
-class SVGElementInstance : public events::EventTarget
-{
-public:
-
- /**
- *
- */
- SVGElementPtr getCorrespondingElement();
-
- /**
- *
- */
- SVGUseElementPtr getCorrespondingUseElement();
-
- /**
- *
- */
- SVGElementInstance getParentNode();
-
- /**
- * Since we are using stack types and this is a circular definition,
- * we will instead implement this as a global function below:
- * SVGElementInstanceList getChildNodes(const SVGElementInstance instance);
- */
- //SVGElementInstanceList getChildNodes();
-
- /**
- *
- */
- SVGElementInstance getFirstChild();
-
- /**
- *
- */
- SVGElementInstance getLastChild();
-
- /**
- *
- */
- SVGElementInstance getPreviousSibling();
-
- /**
- *
- */
- SVGElementInstance getNextSibling();
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGElementInstance();
-
- /**
- *
- */
- SVGElementInstance(const SVGElementInstance &other);
-
- /**
- *
- */
- ~SVGElementInstance();
-
-protected:
-
- SVGElementPtr correspondingElement;
- SVGUseElementPtr correspondingUseElement;
-
-};
-
-
-
-
-
-
-/*#########################################################################
-## SVGElementInstanceList
-#########################################################################*/
-
-/**
- *
- */
-class SVGElementInstanceList
-{
-public:
-
- /**
- *
- */
- unsigned long getLength();
-
- /**
- *
- */
- SVGElementInstance item(unsigned long index);
-
- /**
- * This static method replaces the circular definition of:
- * SVGElementInstanceList SVGElementInstance::getChildNodes()
- *
- */
- static SVGElementInstanceList getChildNodes(const SVGElementInstance &/*instance*/);
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- SVGElementInstanceList();
-
- /**
- *
- */
- SVGElementInstanceList(const SVGElementInstanceList &other);
-
- /**
- *
- */
- ~SVGElementInstanceList();
-
-protected:
-
- std::vector<SVGElementInstance> items;
-
-
-};
-
-
-
-
-
-
-
-
-//########################################################################
-//########################################################################
-//########################################################################
-//# D O M
-//########################################################################
-//########################################################################
-//########################################################################
-
-
-
-
-
-/*#########################################################################
-## Types
-#########################################################################*/
-
-/**
- * Bitmasks for has_an interface for SVGElement
- */
-#define SVG_ANGLE 0x00000001
-#define SVG_ANIMATED_ANGLE 0x00000002
-#define SVG_ANIMATED_BOOLEAN 0x00000004
-#define SVG_ANIMATED_ENUMERATION 0x00000008
-#define SVG_ANIMATED_INTEGER 0x00000010
-#define SVG_ANIMATED_LENGTH 0x00000020
-#define SVG_ANIMATED_LENGTH_LIST 0x00000040
-#define SVG_ANIMATED_NUMBER 0x00000080
-#define SVG_ANIMATED_NUMBER_LIST 0x00000100
-#define SVG_ANIMATED_RECT 0x00000200
-#define SVG_ANIMATED_STRING 0x00000400
-#define SVG_COLOR 0x00000800
-#define SVG_CSS_RULE 0x00001000
-#define SVG_EXTERNAL_RESOURCES_REQUIRED 0x00002000
-#define SVG_FIT_TO_VIEWBOX 0x00004000
-#define SVG_ICCCOLOR 0x00008000
-#define SVG_LANG_SPACE 0x00010000
-#define SVG_LENGTH 0x00020000
-#define SVG_LENGTH_LIST 0x00040000
-#define SVG_LOCATABLE 0x00080000
-#define SVG_NUMBER 0x00100000
-#define SVG_NUMBER_LIST 0x00200000
-#define SVG_RECT 0x00400000
-#define SVG_RENDERING_INTENT 0x00800000
-#define SVG_STRING_LIST 0x01000000
-#define SVG_STYLABLE 0x02000000
-#define SVG_TESTS 0x04000000
-#define SVG_TRANSFORMABLE 0x08000000
-#define SVG_UNIT_TYPES 0x10000000
-#define SVG_URI_REFERENCE 0x20000000
-#define SVG_VIEW_SPEC 0x40000000
-#define SVG_ZOOM_AND_PAN 0x80000000
-
-/**
- * How many above? Quite handy
- */
-#define SVG_NR_INTERFACES 32
-
-
-/**
- * Enumerations for SVGElement types
- */
-typedef enum
-{
- SVG_A_ELEMENT = 0,
- SVG_ALTGLYPH_ELEMENT,
- SVG_ALTGLYPHDEF_ELEMENT,
- SVG_ALTGLYPHITEM_ELEMENT,
- SVG_ANIMATE_ELEMENT,
- SVG_ANIMATECOLOR_ELEMENT,
- SVG_ANIMATEMOTION_ELEMENT,
- SVG_ANIMATETRANSFORM_ELEMENT,
- SVG_CIRCLE_ELEMENT,
- SVG_CLIPPATH_ELEMENT,
- SVG_COLOR_PROFILE_ELEMENT,
- SVG_CURSOR_ELEMENT,
- SVG_DEFINITION_SRC_ELEMENT,
- SVG_DEFS_ELEMENT,
- SVG_DESC_ELEMENT,
- SVG_ELLIPSE_ELEMENT,
- SVG_FEBLEND_ELEMENT,
- SVG_FECOLORMATRIX_ELEMENT,
- SVG_FECOMPONENTTRANSFER_ELEMENT,
- SVG_FECOMPOSITE_ELEMENT,
- SVG_FECONVOLVEMATRIX_ELEMENT,
- SVG_FEDIFFUSELIGHTING_ELEMENT,
- SVG_FEDISPLACEMENTMAP_ELEMENT,
- SVG_FEDISTANTLIGHT_ELEMENT,
- SVG_FEFLOOD_ELEMENT,
- SVG_FEFUNCA_ELEMENT,
- SVG_FEFUNCB_ELEMENT,
- SVG_FEFUNCG_ELEMENT,
- SVG_FEFUNCR_ELEMENT,
- SVG_FEGAUSSIANBLUR_ELEMENT,
- SVG_FEIMAGE_ELEMENT,
- SVG_FEMERGE_ELEMENT,
- SVG_FEMERGENODE_ELEMENT,
- SVG_FEMORPHOLOGY_ELEMENT,
- SVG_FEOFFSET_ELEMENT,
- SVG_FEPOINTLIGHT_ELEMENT,
- SVG_FESPECULARLIGHTING_ELEMENT,
- SVG_FESPOTLIGHT_ELEMENT,
- SVG_FETILE_ELEMENT,
- SVG_FETURBULENCE_ELEMENT,
- SVG_FILTER_ELEMENT,
- SVG_FONT_ELEMENT,
- SVG_FONT_FACE_ELEMENT,
- SVG_FONT_FACE_FORMAT_ELEMENT,
- SVG_FONT_FACE_NAME_ELEMENT,
- SVG_FONT_FACE_SRC_ELEMENT,
- SVG_FONT_FACE_URI_ELEMENT,
- SVG_FOREIGNOBJECT_ELEMENT,
- SVG_G_ELEMENT,
- SVG_GLYPH_ELEMENT,
- SVG_GLYPHREF_ELEMENT,
- SVG_HKERN_ELEMENT,
- SVG_IMAGE_ELEMENT,
- SVG_LINE_ELEMENT,
- SVG_LINEARGRADIENT_ELEMENT,
- SVG_MARKER_ELEMENT,
- SVG_MASK_ELEMENT,
- SVG_METADATA_ELEMENT,
- SVG_MISSING_GLYPH_ELEMENT,
- SVG_MPATH_ELEMENT,
- SVG_PATH_ELEMENT,
- SVG_PATTERN_ELEMENT,
- SVG_POLYGON_ELEMENT,
- SVG_POLYLINE_ELEMENT,
- SVG_RADIALGRADIENT_ELEMENT,
- SVG_RECT_ELEMENT,
- SVG_SCRIPT_ELEMENT,
- SVG_SET_ELEMENT,
- SVG_STOP_ELEMENT,
- SVG_STYLE_ELEMENT,
- SVG_SVG_ELEMENT,
- SVG_SWITCH_ELEMENT,
- SVG_SYMBOL_ELEMENT,
- SVG_TEXT_ELEMENT,
- SVG_TEXTPATH_ELEMENT,
- SVG_TITLE_ELEMENT,
- SVG_TREF_ELEMENT,
- SVG_TSPAN_ELEMENT,
- SVG_USE_ELEMENT,
- SVG_VIEW_ELEMENT,
- SVG_VKERN_ELEMENT,
- SVG_MAX_ELEMENT
-} SVGElementType;
-
-
-
-
-/**
- * Look up the SVG Element type enum for a given string
- * Return -1 if not found
- */
-int svgElementStrToEnum(const char *str);
-
-
-/**
- * Return the string corresponding to a given SVG element type enum
- * Return "unknown" if not found
- */
-const char *svgElementEnumToStr(int type);
-
-
-
-
-/*#########################################################################
-## SVGElement
-#########################################################################*/
-
-/**
- * All of the SVG DOM interfaces that correspond directly to elements in the SVG
- * language(e.g., the SVGPathElement interface corresponds directly to the
- * 'path' element in the language) are derivative from base class SVGElement.
- */
-class SVGElement : public Element
-{
-public:
-
- //####################################################################
- //# BASE METHODS FOR SVGElement
- //####################################################################
-
- /**
- * Get the value of the id attribute on the given element.
- */
- DOMString getId();
-
- /**
- * Set the value of the id attribute on the given element.
- */
- void setId(const DOMString &val) throw(DOMException);
-
- /**
- * Corresponds to attribute xml:base on the given element.
- */
- DOMString getXmlBase();
-
- /**
- * Corresponds to attribute xml:base on the given element.
- */
- void setXmlBase(const DOMString &val) throw(DOMException);
-
- /**
- * The nearest ancestor 'svg' element. Null if the given element is the
- * outermost 'svg' element.
- */
- SVGElementPtr getOwnerSVGElement();
-
- /**
- * The element which established the current viewport. Often, the nearest
- * ancestor 'svg' element. Null if the given element is the outermost 'svg'
- * element.
- */
- SVGElementPtr getViewportElement();
-
-
-
- //####################################################################
- //####################################################################
- //# E L E M E N T S
- //####################################################################
- //####################################################################
-
- //####################################################################
- //# SVGAElement
- //####################################################################
-
-
- /**
- *
- */
- SVGAnimatedValue getTarget();
-
-
-
- //####################################################################
- //# SVGAltGlyphElement
- //####################################################################
-
-
- /**
- * Get the attribute glyphRef on the given element.
- */
- DOMString getGlyphRef();
-
- /**
- * Set the attribute glyphRef on the given element.
- */
- void setGlyphRef(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute format on the given element.
- */
- DOMString getFormat();
-
- /**
- * Set the attribute format on the given element.
- */
- void setFormat(const DOMString &val) throw(DOMException);
-
-
- //####################################################################
- //# SVGAltGlyphDefElement
- //####################################################################
-
- //####################################################################
- //# SVGAltGlyphItemElement
- //####################################################################
-
-
- //####################################################################
- //# SVGAnimateElement
- //####################################################################
-
-
- //####################################################################
- //# SVGAnimateColorElement
- //####################################################################
-
- //####################################################################
- //# SVGAnimateMotionElement
- //####################################################################
-
-
- //####################################################################
- //# SVGAnimateTransformElement
- //####################################################################
-
-
- //####################################################################
- //# SVGAnimationElement
- //####################################################################
-
-
- /**
- *
- */
- SVGElementPtr getTargetElement();
-
- /**
- *
- */
- double getStartTime();
-
- /**
- *
- */
- double getCurrentTime();
-
- /**
- *
- */
- double getSimpleDuration() throw(DOMException);
-
-
-
- //####################################################################
- //# SVGCircleElement
- //####################################################################
-
- /**
- * Corresponds to attribute cx on the given 'circle' element.
- */
- SVGAnimatedValue getCx();
-
- /**
- * Corresponds to attribute cy on the given 'circle' element.
- */
- SVGAnimatedValue getCy();
-
- /**
- * Corresponds to attribute r on the given 'circle' element.
- */
- SVGAnimatedValue getR();
-
- //####################################################################
- //# SVGClipPathElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute clipPathUnits on the given 'clipPath' element.
- * Takes one of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getClipPathUnits();
-
-
-
- //####################################################################
- //# SVGColorProfileElement
- //####################################################################
-
-
- /**
- * Get the attribute local on the given element.
- */
- DOMString getLocal();
-
- /**
- * Set the attribute local on the given element.
- */
- void setLocal(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute name on the given element.
- */
- DOMString getName();
-
- /**
- * Set the attribute name on the given element.
- */
- void setName(const DOMString &val) throw(DOMException);
-
- /**
- * Set the attribute rendering-intent on the given element.
- * The type of rendering intent, identified by one of the
- * SVGRenderingIntent constants.
- */
- unsigned short getRenderingIntent();
-
- /**
- * Get the attribute rendering-intent on the given element.
- */
- void setRenderingIntent(unsigned short val) throw(DOMException);
-
-
- //####################################################################
- //# SVGComponentTransferFunctionElement
- //####################################################################
-
-
- /**
- * Component Transfer Types
- */
- typedef enum
- {
- SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0,
- SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1,
- SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2,
- SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3,
- SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4,
- SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5
- } ComponentTransferType;
-
-
- /**
- * Corresponds to attribute type on the given element. Takes one\
- * of the Component Transfer Types.
- * -- also in SVGCSSRule
- */
- // SVGAnimatedValue getType();
-
- /**
- * Corresponds to attribute tableValues on the given element.
- */
- SVGAnimatedValueList getTableValues();
-
- /**
- * Corresponds to attribute slope on the given element.
- */
- SVGAnimatedValue getSlope();
-
- /**
- * Corresponds to attribute intercept on the given element.
- */
- SVGAnimatedValue getIntercept();
-
- /**
- * Corresponds to attribute amplitude on the given element.
- */
- SVGAnimatedValue getAmplitude();
-
- /**
- * Corresponds to attribute exponent on the given element.
- */
- SVGAnimatedValue getExponent();
-
- /**
- * Corresponds to attribute offset on the given element.
- */
- SVGAnimatedValue getOffset();
-
- //####################################################################
- //# SVGCursorElement
- //####################################################################
-
- /**
- * -- also in SVGRect
- */
- // SVGAnimatedValue getX();
-
- /**
- * -- also in SVGRect
- */
- // SVGAnimatedValue getY();
-
-
- //####################################################################
- //# SVGDefinitionSrcElement
- //####################################################################
-
- //####################################################################
- //# SVGDefsElement
- //####################################################################
-
- //####################################################################
- //# SVGDescElement
- //####################################################################
-
- //####################################################################
- //# SVGEllipseElement
- //####################################################################
-
- /**
- * Corresponds to attribute cx on the given 'ellipse' element.
- * -- also in Circle
- */
- // SVGAnimatedValue getCx();
-
- /**
- * Corresponds to attribute cy on the given 'ellipse' element.
- * -- also in Circle
- */
- // SVGAnimatedValue getCy();
-
- /**
- * Corresponds to attribute rx on the given 'ellipse' element.
- */
- SVGAnimatedValue getRx();
-
- /**
- * Corresponds to attribute ry on the given 'ellipse' element.
- */
- SVGAnimatedValue getRy();
-
-
- //####################################################################
- //# SVGFEBlendElement
- //####################################################################
-
- /**
- * Blend Mode Types
- */
- typedef enum
- {
- SVG_FEBLEND_MODE_UNKNOWN = 0,
- SVG_FEBLEND_MODE_NORMAL = 1,
- SVG_FEBLEND_MODE_MULTIPLY = 2,
- SVG_FEBLEND_MODE_SCREEN = 3,
- SVG_FEBLEND_MODE_DARKEN = 4,
- SVG_FEBLEND_MODE_LIGHTEN = 5
- } BlendModeType;
-
- /**
- * Corresponds to attribute in on the given 'feBlend' element.
- */
- SVGAnimatedValue getIn1();
-
- /**
- * Corresponds to attribute in2 on the given 'feBlend' element.
- */
- SVGAnimatedValue getIn2();
-
- /**
- * Corresponds to attribute mode on the given 'feBlend' element.
- * Takes one of the Blend Mode Types.
- */
- SVGAnimatedValue getMode();
-
-
- //####################################################################
- //# SVGFEColorMatrixElement
- //####################################################################
-
- /**
- * Color Matrix Types
- */
- typedef enum
- {
- SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0,
- SVG_FECOLORMATRIX_TYPE_MATRIX = 1,
- SVG_FECOLORMATRIX_TYPE_SATURATE = 2,
- SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3,
- SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4
- } ColorMatrixType;
-
-
- /**
- * Corresponds to attribute in on the given 'feColorMatrix' element.
- * - also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- /**
- * Corresponds to attribute type on the given 'feColorMatrix' element.
- * Takes one of the Color Matrix Types.
- * -- also in CSSRule
- */
- // SVGAnimatedValue getType();
-
- /**
- * Corresponds to attribute values on the given 'feColorMatrix' element.
- * Provides access to the contents of the values attribute.
- */
- SVGAnimatedValueList getValues();
-
-
- //####################################################################
- //# SVGFEComponentTransferElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute in on the given 'feComponentTransfer' element.
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- //####################################################################
- //# SVGFECompositeElement
- //####################################################################
-
- /**
- * Composite Operators
- */
- typedef enum
- {
- SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0,
- SVG_FECOMPOSITE_OPERATOR_OVER = 1,
- SVG_FECOMPOSITE_OPERATOR_IN = 2,
- SVG_FECOMPOSITE_OPERATOR_OUT = 3,
- SVG_FECOMPOSITE_OPERATOR_ATOP = 4,
- SVG_FECOMPOSITE_OPERATOR_XOR = 5,
- SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6
- } CompositeOperatorType;
-
- /**
- * Corresponds to attribute in on the given 'feComposite' element.
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- /**
- * Corresponds to attribute in2 on the given 'feComposite' element.
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn2();
-
- /**
- * Corresponds to attribute operator on the given 'feComposite' element.
- * Takes one of the Composite Operators.
- */
- SVGAnimatedValue getOperator();
-
- /**
- * Corresponds to attribute k1 on the given 'feComposite' element.
- */
- SVGAnimatedValue getK1();
-
- /**
- * Corresponds to attribute k2 on the given 'feComposite' element.
- */
- SVGAnimatedValue getK2();
-
- /**
- * Corresponds to attribute k3 on the given 'feComposite' element.
- */
- SVGAnimatedValue getK3();
-
- /**
- * Corresponds to attribute k4 on the given 'feComposite' element.
- */
- SVGAnimatedValue getK4();
-
-
- //####################################################################
- //# SVGFEConvolveMatrixElement
- //####################################################################
-
-
- /**
- * Edge Mode Values
- */
- typedef enum
- {
- SVG_EDGEMODE_UNKNOWN = 0,
- SVG_EDGEMODE_DUPLICATE = 1,
- SVG_EDGEMODE_WRAP = 2,
- SVG_EDGEMODE_NONE = 3
- } EdgeModeType;
-
-
- /**
- * Corresponds to attribute order on the given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getOrderX();
-
- /**
- * Corresponds to attribute order on the given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getOrderY();
-
- /**
- * Corresponds to attribute kernelMatrix on the given element.
- */
- SVGAnimatedValueList getKernelMatrix();
-
- /**
- * Corresponds to attribute divisor on the given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getDivisor();
-
- /**
- * Corresponds to attribute bias on the given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getBias();
-
- /**
- * Corresponds to attribute targetX on the given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getTargetX();
-
- /**
- * Corresponds to attribute targetY on the given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getTargetY();
-
- /**
- * Corresponds to attribute edgeMode on the given 'feConvolveMatrix'
- * element. Takes one of the Edge Mode Types.
- */
- SVGAnimatedValue getEdgeMode();
-
- /**
- * Corresponds to attribute kernelUnitLength on the
- * given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getKernelUnitLengthX();
-
- /**
- * Corresponds to attribute kernelUnitLength on the given
- * 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getKernelUnitLengthY();
-
- /**
- * Corresponds to attribute preserveAlpha on the
- * given 'feConvolveMatrix' element.
- */
- SVGAnimatedValue getPreserveAlpha();
-
-
-
- //####################################################################
- //# SVGFEDiffuseLightingElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute in on the given 'feDiffuseLighting' element.
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- /**
- * Corresponds to attribute surfaceScale on the given
- * 'feDiffuseLighting' element.
- */
- SVGAnimatedValue getSurfaceScale();
-
- /**
- * Corresponds to attribute diffuseConstant on the given
- * 'feDiffuseLighting' element.
- */
- SVGAnimatedValue getDiffuseConstant();
-
- /**
- * Corresponds to attribute kernelUnitLength on the given
- * 'feDiffuseLighting' element.
- */
- // SVGAnimatedValue getKernelUnitLengthX();
-
- /**
- * Corresponds to attribute kernelUnitLength on the given
- * 'feDiffuseLighting' element.
- */
- // SVGAnimatedValue getKernelUnitLengthY();
-
-
-
-
- //####################################################################
- //# SVGFEDisplacementMapElement
- //####################################################################
-
-
- /**
- * Channel Selectors
- */
- typedef enum
- {
- SVG_CHANNEL_UNKNOWN = 0,
- SVG_CHANNEL_R = 1,
- SVG_CHANNEL_G = 2,
- SVG_CHANNEL_B = 3,
- SVG_CHANNEL_A = 4
- } ChannelSelector;
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn2();
-
-
- /**
- *
- */
- SVGAnimatedValue getScale();
-
- /**
- *
- */
- SVGAnimatedValue getXChannelSelector();
-
- /**
- *
- */
- SVGAnimatedValue getYChannelSelector();
-
- //####################################################################
- //# SVGFEDistantLightElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute azimuth on the given 'feDistantLight' element.
- */
- SVGAnimatedValue getAzimuth();
-
-
- /**
- * Corresponds to attribute elevation on the given 'feDistantLight'
- * element
- */
- SVGAnimatedValue getElevation();
-
-
- //####################################################################
- //# SVGFEFloodElement
- //####################################################################
-
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
-
- //####################################################################
- //# SVGFEFuncAElement
- //####################################################################
-
- //####################################################################
- //# SVGFEFuncBElement
- //####################################################################
-
- //####################################################################
- //# SVGFEFuncGElement
- //####################################################################
-
- //####################################################################
- //# SVGFEFuncRElement
- //####################################################################
-
-
- //####################################################################
- //# SVGFEGaussianBlurElement
- //####################################################################
-
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
-
- /**
- *
- */
- SVGAnimatedValue getStdDeviationX();
-
- /**
- *
- */
- SVGAnimatedValue getStdDeviationY();
-
-
- /**
- *
- */
- void setStdDeviation(double stdDeviationX, double stdDeviationY);
-
-
- //####################################################################
- //# SVGFEImageElement
- //####################################################################
-
-
- //####################################################################
- //# SVGFEMergeElement
- //####################################################################
-
- //####################################################################
- //# SVGFEMergeNodeElement
- //####################################################################
-
- //####################################################################
- //# SVGFEMorphologyElement
- //####################################################################
-
-
-
- /**
- * Morphology Operators
- */
- typedef enum
- {
- SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0,
- SVG_MORPHOLOGY_OPERATOR_ERODE = 1,
- SVG_MORPHOLOGY_OPERATOR_DILATE = 2
- } MorphologyOperatorType;
-
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
-
- /**
- *
- */
- // SVGAnimatedValue getOperator();
-
- /**
- *
- */
- SVGAnimatedValue getRadiusX();
-
- /**
- *
- */
- SVGAnimatedValue getRadiusY();
-
- //####################################################################
- //# SVGFEOffsetElement
- //####################################################################
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- /**
- *
- */
- SVGAnimatedValue getDx();
-
- /**
- *
- */
- SVGAnimatedValue getDy();
-
-
- //####################################################################
- //# SVGFEPointLightElement
- //####################################################################
-
- /**
- * Corresponds to attribute x on the given 'fePointLight' element.
- */
- SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'fePointLight' element.
- */
- SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute z on the given 'fePointLight' element.
- */
- SVGAnimatedValue getZ();
-
- //####################################################################
- //# SVGFESpecularLightingElement
- //####################################################################
-
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
- /**
- *
- */
- // SVGAnimatedValue getSurfaceScale();
-
- /**
- *
- */
- SVGAnimatedValue getSpecularConstant();
-
- /**
- *
- */
- SVGAnimatedValue getSpecularExponent();
-
-
- //####################################################################
- //# SVGFESpotLightElement
- //####################################################################
-
- /**
- * Corresponds to attribute x on the given 'feSpotLight' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'feSpotLight' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute z on the given 'feSpotLight' element.
- */
- // SVGAnimatedValue getZ();
-
- /**
- * Corresponds to attribute pointsAtX on the given 'feSpotLight' element.
- */
- SVGAnimatedValue getPointsAtX();
-
- /**
- * Corresponds to attribute pointsAtY on the given 'feSpotLight' element.
- */
- SVGAnimatedValue getPointsAtY();
-
- /**
- * Corresponds to attribute pointsAtZ on the given 'feSpotLight' element.
- */
- SVGAnimatedValue getPointsAtZ();
-
- /**
- * Corresponds to attribute specularExponent on the
- * given 'feSpotLight' element.
- */
- // SVGAnimatedValue getSpecularExponent();
-
- /**
- * Corresponds to attribute limitingConeAngle on the
- * given 'feSpotLight' element.
- */
- SVGAnimatedValue getLimitingConeAngle();
-
-
- //####################################################################
- //# SVGFETileElement
- //####################################################################
-
-
- /**
- *
- * -- also in feBlend
- */
- // SVGAnimatedValue getIn1();
-
-
- //####################################################################
- //# SVGFETurbulenceElement
- //####################################################################
-
-
- /**
- * Turbulence Types
- */
- typedef enum
- {
- SVG_TURBULENCE_TYPE_UNKNOWN = 0,
- SVG_TURBULENCE_TYPE_FRACTALNOISE = 1,
- SVG_TURBULENCE_TYPE_TURBULENCE = 2
- } TurbulenceType;
-
- /**
- * Stitch Options
- */
- typedef enum
- {
- SVG_STITCHTYPE_UNKNOWN = 0,
- SVG_STITCHTYPE_STITCH = 1,
- SVG_STITCHTYPE_NOSTITCH = 2
- } StitchOption;
-
-
-
- /**
- *
- */
- SVGAnimatedValue getBaseFrequencyX();
-
- /**
- *
- */
- SVGAnimatedValue getBaseFrequencyY();
-
- /**
- *
- */
- SVGAnimatedValue getNumOctaves();
-
- /**
- *
- */
- SVGAnimatedValue getSeed();
-
- /**
- *
- */
- SVGAnimatedValue getStitchTiles();
-
- /**
- *
- */
- SVGAnimatedValue getType();
-
-
-
- //####################################################################
- //# SVGFilterElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute filterUnits on the given 'filter' element. Takes one
- * of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getFilterUnits();
-
- /**
- * Corresponds to attribute primitiveUnits on the given 'filter' element. Takes
- * one of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getPrimitiveUnits();
-
- /**
- *
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute x on the given 'filter' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute y on the given 'filter' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'filter' element.
- */
- // SVGAnimatedValue getHeight();
-
-
- /**
- * Corresponds to attribute filterRes on the given 'filter' element.
- * Contains the X component of attribute filterRes.
- */
- SVGAnimatedValue getFilterResX();
-
- /**
- * Corresponds to attribute filterRes on the given 'filter' element.
- * Contains the Y component(possibly computed automatically)
- * of attribute filterRes.
- */
- SVGAnimatedValue getFilterResY();
-
- /**
- * Sets the values for attribute filterRes.
- */
- void setFilterRes(unsigned long filterResX, unsigned long filterResY);
-
-
- //####################################################################
- //# SVGFontElement
- //####################################################################
-
- //####################################################################
- //# SVGFontFaceElement
- //####################################################################
-
- //####################################################################
- //# SVGFontFaceFormatElement
- //####################################################################
-
- //####################################################################
- //# SVGFontFaceNameElement
- //####################################################################
-
- //####################################################################
- //# SVGFontFaceSrcElement
- //####################################################################
-
- //####################################################################
- //# SVGFontFaceUriElement
- //####################################################################
-
- //####################################################################
- //# SVGForeignObjectElement
- //####################################################################
-
- /**
- *
- */
- // SVGAnimatedValue getX();
-
- /**
- *
- */
- // SVGAnimatedValue getY();
-
- /**
- *
- */
- // SVGAnimatedValue getWidth();
-
- /**
- *
- */
- // SVGAnimatedValue getHeight();
-
-
-
- //####################################################################
- //# SVGGlyphRefElement
- //####################################################################
-
-
- /**
- * Get the attribute glyphRef on the given element.
- */
- // DOMString getGlyphRef();
-
- /**
- * Set the attribute glyphRef on the given element.
- */
- // void setGlyphRef(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute format on the given element.
- */
- // DOMString getFormat();
-
- /**
- * Set the attribute format on the given element.
- */
- // void setFormat(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute x on the given element.
- */
- // double getX();
-
- /**
- * Set the attribute x on the given element.
- */
- // void setX(double val) throw(DOMException);
-
- /**
- * Get the attribute y on the given element.
- */
- // double getY();
-
- /**
- * Set the attribute y on the given element.
- */
- // void setY(double val) throw(DOMException);
-
- /**
- * Get the attribute dx on the given element.
- */
- // double getDx();
-
- /**
- * Set the attribute dx on the given element.
- */
- // void setDx(double val) throw(DOMException);
-
- /**
- * Get the attribute dy on the given element.
- */
- // double getDy();
-
- /**
- * Set the attribute dy on the given element.
- */
- // void setDy(double val) throw(DOMException);
-
-
- //####################################################################
- //# SVGGradientElement
- //####################################################################
-
-
- /**
- * Spread Method Types
- */
- typedef enum
- {
- SVG_SPREADMETHOD_UNKNOWN = 0,
- SVG_SPREADMETHOD_PAD = 1,
- SVG_SPREADMETHOD_REFLECT = 2,
- SVG_SPREADMETHOD_REPEAT = 3
- } SpreadMethodType;
-
-
- /**
- * Corresponds to attribute gradientUnits on the given element.
- * Takes one of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue &getGradientUnits();
-
- /**
- * Corresponds to attribute gradientTransform on the given element.
- */
- SVGAnimatedValueList &getGradientTransform();
-
- /**
- * Corresponds to attribute spreadMethod on the given element.
- * One of the Spread Method Types.
- */
- SVGAnimatedValue &getSpreadMethod();
-
-
-
- //####################################################################
- //# SVGHKernElement
- //####################################################################
-
- //####################################################################
- //# SVGImageElement
- //####################################################################
-
- /**
- * Corresponds to attribute x on the given 'image' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'image' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute width on the given 'image' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'image' element.
- */
- // SVGAnimatedValue getHeight();
-
-
- /**
- * Corresponds to attribute preserveAspectRatio on the given element.
- */
- // SVGAnimatedPreserveAspectRatio getPreserveAspectRatio();
-
- //####################################################################
- //# SVGLinearGradientElement
- //####################################################################
-
- /**
- * Corresponds to attribute x1 on the given 'linearGradient' element.
- */
- // SVGAnimatedValue getX1();
-
- /**
- * Corresponds to attribute y1 on the given 'linearGradient' element.
- */
- // SVGAnimatedValue getY1();
-
- /**
- * Corresponds to attribute x2 on the given 'linearGradient' element.
- */
- // SVGAnimatedValue getX2();
-
- /**
- * Corresponds to attribute y2 on the given 'linearGradient' element.
- */
- // SVGAnimatedValue getY2();
-
-
-
- //####################################################################
- //# SVGLineElement
- //####################################################################
-
- /**
- * Corresponds to attribute x1 on the given 'line' element.
- */
- // SVGAnimatedValue getX1();
-
- /**
- * Corresponds to attribute y1 on the given 'line' element.
- */
- // SVGAnimatedValue getY1();
-
- /**
- * Corresponds to attribute x2 on the given 'line' element.
- */
- // SVGAnimatedValue getX2();
-
- /**
- * Corresponds to attribute y2 on the given 'line' element.
- */
- // SVGAnimatedValue getY2();
-
-
- //####################################################################
- //# SVGMarkerElement
- //####################################################################
-
-
- /**
- * Marker Unit Types
- */
- typedef enum
- {
- SVG_MARKERUNITS_UNKNOWN = 0,
- SVG_MARKERUNITS_USERSPACEONUSE = 1,
- SVG_MARKERUNITS_STROKEWIDTH = 2
- } MarkerUnitType;
-
- /**
- * Marker Orientation Types
- */
- typedef enum
- {
- SVG_MARKER_ORIENT_UNKNOWN = 0,
- SVG_MARKER_ORIENT_AUTO = 1,
- SVG_MARKER_ORIENT_ANGLE = 2
- } MarkerOrientationType;
-
-
- /**
- * Corresponds to attribute refX on the given 'marker' element.
- */
- SVGAnimatedValue getRefX();
-
- /**
- * Corresponds to attribute refY on the given 'marker' element.
- */
- SVGAnimatedValue getRefY();
-
- /**
- * Corresponds to attribute markerUnits on the given 'marker' element.
- * One of the Marker Units Types defined above.
- */
- SVGAnimatedValue getMarkerUnits();
-
- /**
- * Corresponds to attribute markerWidth on the given 'marker' element.
- */
- SVGAnimatedValue getMarkerWidth();
-
- /**
- * Corresponds to attribute markerHeight on the given 'marker' element.
- */
- SVGAnimatedValue getMarkerHeight();
-
- /**
- * Corresponds to attribute orient on the given 'marker' element.
- * One of the Marker Orientation Types defined above.
- */
- SVGAnimatedValue getOrientType();
-
- /**
- * Corresponds to attribute orient on the given 'marker' element.
- * If markerUnits is SVG_MARKER_ORIENT_ANGLE, the angle value for
- * attribute orient; otherwise, it will be set to zero.
- */
- SVGAnimatedValue getOrientAngle();
-
-
- /**
- * Sets the value of attribute orient to 'auto'.
- */
- void setOrientToAuto();
-
- /**
- * Sets the value of attribute orient to the given angle.
- */
- void setOrientToAngle(const SVGAngle &angle);
-
-
- //####################################################################
- //# SVGMaskElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute maskUnits on the given 'mask' element. Takes one of
- * the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getMaskUnits();
-
- /**
- * Corresponds to attribute maskContentUnits on the given 'mask' element. Takes
- * one of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getMaskContentUnits();
-
- /**
- * Corresponds to attribute x on the given 'mask' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'mask' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute width on the given 'mask' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'mask' element.
- */
- // SVGAnimatedValue getHeight();
-
- //####################################################################
- //# SVGMetadataElement
- //####################################################################
-
- //####################################################################
- //# SVGMissingGlyphElement
- //####################################################################
-
-
- //####################################################################
- //# SVGMPathElement
- //####################################################################
-
- /**
- * Corresponds to attribute pathLength on the given 'path' element.
- */
- SVGAnimatedValue getPathLength();
-
- /**
- * Returns the user agent's computed value for the total length of the path using
- * the user agent's distance-along-a-path algorithm, as a distance in the current
- * user coordinate system.
- */
- double getTotalLength();
-
- /**
- * Returns the(x,y) coordinate in user space which is distance units along the
- * path, utilizing the user agent's distance-along-a-path algorithm.
- */
- SVGPoint getPointAtLength(double distance);
-
- /**
- * Returns the index into pathSegList which is distance units along the path,
- * utilizing the user agent's distance-along-a-path algorithm.
- */
- unsigned long getPathSegAtLength(double distance);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegClosePath object.
- */
- SVGPathSeg createSVGPathSegClosePath();
-
- /**
- * Returns a stand-alone, parentless SVGPathSegMovetoAbs object.
- */
- SVGPathSeg createSVGPathSegMovetoAbs(double x, double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegMovetoRel object.
- */
- SVGPathSeg createSVGPathSegMovetoRel(double x, double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegLinetoAbs object.
- */
- SVGPathSeg createSVGPathSegLinetoAbs(double x, double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegLinetoRel object.
- */
- SVGPathSeg createSVGPathSegLinetoRel(double x, double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicAbs object.
- */
- SVGPathSeg createSVGPathSegCurvetoCubicAbs(double x, double y,
- double x1, double y1, double x2, double y2);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicRel object.
- */
- SVGPathSeg createSVGPathSegCurvetoCubicRel(double x, double y,
- double x1, double y1, double x2, double y2);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticAbs object.
- */
- SVGPathSeg createSVGPathSegCurvetoQuadraticAbs(double x, double y,
- double x1, double y1);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticRel object.
- */
- SVGPathSeg createSVGPathSegCurvetoQuadraticRel(double x, double y,
- double x1, double y1);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegArcAbs object.
- */
- SVGPathSeg createSVGPathSegArcAbs(double x, double y,
- double r1, double r2, double angle,
- bool largeArcFlag, bool sweepFlag);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegArcRel object.
- */
- SVGPathSeg createSVGPathSegArcRel(double x, double y, double r1,
- double r2, double angle, bool largeArcFlag,
- bool sweepFlag);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalAbs object.
- */
- SVGPathSeg createSVGPathSegLinetoHorizontalAbs(double x);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalRel object.
- */
- SVGPathSeg createSVGPathSegLinetoHorizontalRel(double x);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegLinetoVerticalAbs object.
- */
- SVGPathSeg createSVGPathSegLinetoVerticalAbs(double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegLinetoVerticalRel object.
- */
- SVGPathSeg createSVGPathSegLinetoVerticalRel(double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothAbs object.
- */
- SVGPathSeg createSVGPathSegCurvetoCubicSmoothAbs(double x, double y,
- double x2, double y2);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothRel object.
- */
- SVGPathSeg createSVGPathSegCurvetoCubicSmoothRel(double x, double y,
- double x2, double y2);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothAbs
- * object.
- */
- SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothAbs(double x, double y);
-
- /**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothRel
- * object.
- */
- SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothRel(double x, double y);
-
- //####################################################################
- //# SVGPathElement
- //####################################################################
-
- //####################################################################
- //# SVGPatternElement
- //####################################################################
-
- /**
- * Corresponds to attribute patternUnits on the given 'pattern' element.
- * Takes one of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getPatternUnits();
-
- /**
- * Corresponds to attribute patternContentUnits on the given 'pattern'
- * element. Takes one of the constants defined in SVGUnitTypes.
- */
- SVGAnimatedValue getPatternContentUnits();
-
- /**
- * Corresponds to attribute patternTransform on the given 'pattern' element.
- */
- SVGAnimatedValueList &getPatternTransform();
-
- /**
- * Corresponds to attribute x on the given 'pattern' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- *
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute width on the given 'pattern' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'pattern' element.
- */
- // SVGAnimatedValue getHeight();
-
-
- //####################################################################
- //# SVGPolyLineElement
- //####################################################################
-
- //####################################################################
- //# SVGPolygonElement
- //####################################################################
-
- //####################################################################
- //# SVGRadialGradientElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute cx on the given 'radialGradient' element.
- */
- // SVGAnimatedValue getCx();
-
-
- /**
- * Corresponds to attribute cy on the given 'radialGradient' element.
- */
- // SVGAnimatedValue getCy();
-
-
- /**
- * Corresponds to attribute r on the given 'radialGradient' element.
- */
- // SVGAnimatedValue getR();
-
-
- /**
- * Corresponds to attribute fx on the given 'radialGradient' element.
- */
- SVGAnimatedValue getFx();
-
-
- /**
- * Corresponds to attribute fy on the given 'radialGradient' element.
- */
- SVGAnimatedValue getFy();
-
-
- //####################################################################
- //# SVGRectElement
- //####################################################################
-
- /**
- * Corresponds to attribute x on the given 'rect' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'rect' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute width on the given 'rect' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'rect' element.
- */
- // SVGAnimatedValue getHeight();
-
-
- /**
- * Corresponds to attribute rx on the given 'rect' element.
- */
- // SVGAnimatedValue getRx();
-
- /**
- * Corresponds to attribute ry on the given 'rect' element.
- */
- // SVGAnimatedValue getRy();
-
-
- //####################################################################
- //# SVGScriptElement
- //####################################################################
-
- /**
- *
- */
- // DOMString getType();
-
- /**
- *
- */
- // void setType(const DOMString &val) throw(DOMException);
-
- //####################################################################
- //# SVGSetElement
- //####################################################################
-
- //####################################################################
- //# SVGStopElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute offset on the given 'stop' element.
- */
- // SVGAnimatedValue getOffset();
-
-
- //####################################################################
- //# SVGStyleElement
- //####################################################################
-
- /**
- * Get the attribute xml:space on the given element.
- */
- DOMString getXmlspace();
-
- /**
- * Set the attribute xml:space on the given element.
- */
- void setXmlspace(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute type on the given 'style' element.
- */
- // DOMString getType();
-
- /**
- * Set the attribute type on the given 'style' element.
- */
- // void setType(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute media on the given 'style' element.
- */
- DOMString getMedia();
-
- /**
- * Set the attribute media on the given 'style' element.
- */
- void setMedia(const DOMString &val) throw(DOMException);
-
- /**
- * Get the attribute title on the given 'style' element.
- */
- DOMString getTitle();
-
- /**
- * Set the attribute title on the given 'style' element.
- */
- void setTitle(const DOMString &val) throw(DOMException);
-
- //####################################################################
- //# SVGSymbolElement
- //####################################################################
-
- //####################################################################
- //# SVGSVGElement
- //####################################################################
-
- /**
- * Corresponds to attribute x on the given 'svg' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'svg' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute width on the given 'svg' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'svg' element.
- */
- // SVGAnimatedValue getHeight();
-
- /**
- * Get the attribute contentScriptType on the given 'svg' element.
- */
- DOMString getContentScriptType();
-
- /**
- * Set the attribute contentScriptType on the given 'svg' element.
- */
- void setContentScriptType(const DOMString &val) throw(DOMException);
-
-
- /**
- * Get the attribute contentStyleType on the given 'svg' element.
- */
- DOMString getContentStyleType();
-
- /**
- * Set the attribute contentStyleType on the given 'svg' element.
- */
- void setContentStyleType(const DOMString &val) throw(DOMException);
-
- /**
- * The position and size of the viewport(implicit or explicit) that corresponds
- * to this 'svg' element. When the user agent is actually rendering the content,
- * then the position and size values represent the actual values when rendering.
- * The position and size values are unitless values in the coordinate system of
- * the parent element. If no parent element exists(i.e., 'svg' element
- * represents the root of the document tree), if this SVG document is embedded as
- * part of another document(e.g., via the HTML 'object' element), then the
- * position and size are unitless values in the coordinate system of the parent
- * document.(If the parent uses CSS or XSL layout, then unitless values
- * represent pixel units for the current CSS or XSL viewport, as described in the
- * CSS2 specification.) If the parent element does not have a coordinate system,
- * then the user agent should provide reasonable default values for this attribute.
- * */
- SVGRect getViewport();
-
- /**
- * Size of a pixel units(as defined by CSS2) along the x-axis of the viewport,
- * which represents a unit somewhere in the range of 70dpi to 120dpi, and, on
- * systems that support this, might actually match the characteristics of the
- * target medium. On systems where it is impossible to know the size of a pixel,
- * a suitable default pixel size is provided.
- */
- double getPixelUnitToMillimeterX();
-
- /**
- * Corresponding size of a pixel unit along the y-axis of the viewport.
- */
- double getPixelUnitToMillimeterY();
-
- /**
- * User interface(UI) events in DOM Level 2 indicate the screen positions at
- * which the given UI event occurred. When the user agent actually knows the
- * physical size of a "screen unit", this attribute will express that information;
- * otherwise, user agents will provide a suitable default value such as .28mm.
- */
- double getScreenPixelToMillimeterX();
-
- /**
- * Corresponding size of a screen pixel along the y-axis of the viewport.
- */
- double getScreenPixelToMillimeterY();
-
-
- /**
- * The initial view(i.e., before magnification and panning) of the current
- * innermost SVG document fragment can be either the "standard" view(i.e., based
- * on attributes on the 'svg' element such as fitBoxToViewport) or to a "custom"
- * view(i.e., a hyperlink into a particular 'view' or other element - see
- * Linking into SVG content: URI fragments and SVG views). If the initial view is
- * the "standard" view, then this attribute is false. If the initial view is a
- * "custom" view, then this attribute is true.
- */
- bool getUseCurrentView();
-
- /**
- * Set the value above
- */
- void setUseCurrentView(bool val) throw(DOMException);
-
- /**
- * The definition of the initial view(i.e., before magnification and panning) of
- * the current innermost SVG document fragment. The meaning depends on the
- * situation:
- *
- * * If the initial view was a "standard" view, then:
- * o the values for viewBox, preserveAspectRatio and zoomAndPan within
- * currentView will match the values for the corresponding DOM attributes that
- * are on SVGSVGElement directly
- * o the values for transform and viewTarget within currentView will be null
- * * If the initial view was a link into a 'view' element, then:
- * o the values for viewBox, preserveAspectRatio and zoomAndPan within
- * currentView will correspond to the corresponding attributes for the given
- * 'view' element
- * o the values for transform and viewTarget within currentView will be null
- * * If the initial view was a link into another element(i.e., other than a
- * 'view'), then:
- * o the values for viewBox, preserveAspectRatio and zoomAndPan within
- * currentView will match the values for the corresponding DOM attributes that
- * are on SVGSVGElement directly for the closest ancestor 'svg' element
- * o the values for transform within currentView will be null
- * o the viewTarget within currentView will represent the target of the link
- * * If the initial view was a link into the SVG document fragment using an SVG
- * view specification fragment identifier(i.e., #svgView(...)), then:
- * o the values for viewBox, preserveAspectRatio, zoomAndPan, transform and
- * viewTarget within currentView will correspond to the values from the SVG view
- * specification fragment identifier
- *
- */
- SVGViewSpec getCurrentView();
-
-
- /**
- * This attribute indicates the current scale factor relative to the initial view
- * to take into account user magnification and panning operations, as described
- * under Magnification and panning. DOM attributes currentScale and
- * currentTranslate are equivalent to the 2x3 matrix [a b c d e f] =
- * [currentScale 0 0 currentScale currentTranslate.x currentTranslate.y]. If
- * "magnification" is enabled(i.e., zoomAndPan="magnify"), then the effect is as
- * if an extra transformation were placed at the outermost level on the SVG
- * document fragment(i.e., outside the outermost 'svg' element).
- */
- double getCurrentScale();
-
- /**
- * Set the value above.
- */
- void setCurrentScale(double val) throw(DOMException);
-
- /**
- * The corresponding translation factor that takes into account
- * user "magnification".
- */
- SVGPoint getCurrentTranslate();
-
- /**
- * Takes a time-out value which indicates that redraw shall not occur until:(a)
- * the corresponding unsuspendRedraw(suspend_handle_id) call has been made,(b)
- * an unsuspendRedrawAll() call has been made, or(c) its timer has timed out. In
- * environments that do not support interactivity(e.g., print media), then
- * redraw shall not be suspended. suspend_handle_id =
- * suspendRedraw(max_wait_milliseconds) and unsuspendRedraw(suspend_handle_id)
- * must be packaged as balanced pairs. When you want to suspend redraw actions as
- * a collection of SVG DOM changes occur, then precede the changes to the SVG DOM
- * with a method call similar to suspend_handle_id =
- * suspendRedraw(max_wait_milliseconds) and follow the changes with a method call
- * similar to unsuspendRedraw(suspend_handle_id). Note that multiple
- * suspendRedraw calls can be used at once and that each such method call is
- * treated independently of the other suspendRedraw method calls.
- */
- unsigned long suspendRedraw(unsigned long max_wait_milliseconds);
-
- /**
- * Cancels a specified suspendRedraw() by providing a unique suspend_handle_id.
- */
- void unsuspendRedraw(unsigned long suspend_handle_id) throw(DOMException);
-
- /**
- * Cancels all currently active suspendRedraw() method calls. This method is most
- * useful at the very end of a set of SVG DOM calls to ensure that all pending
- * suspendRedraw() method calls have been cancelled.
- */
- void unsuspendRedrawAll();
-
- /**
- * In rendering environments supporting interactivity, forces the user agent to
- * immediately redraw all regions of the viewport that require updating.
- */
- void forceRedraw();
-
- /**
- * Suspends(i.e., pauses) all currently running animations that are defined
- * within the SVG document fragment corresponding to this 'svg' element, causing
- * the animation clock corresponding to this document fragment to stand still
- * until it is unpaused.
- */
- void pauseAnimations();
-
- /**
- * Unsuspends(i.e., unpauses) currently running animations that are defined
- * within the SVG document fragment, causing the animation clock to continue from
- * the time at which it was suspended.
- */
- void unpauseAnimations();
-
- /**
- * Returns true if this SVG document fragment is in a paused state.
- */
- bool animationsPaused();
-
- /**
- * Returns the current time in seconds relative to the start time for
- * the current SVG document fragment.
- */
- // double getCurrentTime();
-
- /**
- * Adjusts the clock for this SVG document fragment, establishing
- * a new current time.
- */
- void setCurrentTime(double seconds);
-
- /**
- * Returns the list of graphics elements whose rendered content intersects the
- * supplied rectangle, honoring the 'pointer-events' property value on each
- * candidate graphics element.
- */
- NodeList getIntersectionList(const SVGRect &rect,
- const SVGElementPtr referenceElement);
-
- /**
- * Returns the list of graphics elements whose rendered content is entirely
- * contained within the supplied rectangle, honoring the 'pointer-events'
- * property value on each candidate graphics element.
- */
- NodeList getEnclosureList(const SVGRect &rect,
- const SVGElementPtr referenceElement);
-
- /**
- * Returns true if the rendered content of the given element intersects the
- * supplied rectangle, honoring the 'pointer-events' property value on each
- * candidate graphics element.
- */
- bool checkIntersection(const SVGElementPtr element, const SVGRect &rect);
-
- /**
- * Returns true if the rendered content of the given element is entirely
- * contained within the supplied rectangle, honoring the 'pointer-events'
- * property value on each candidate graphics element.
- */
- bool checkEnclosure(const SVGElementPtr element, const SVGRect &rect);
-
- /**
- * Unselects any selected objects, including any selections of text
- * strings and type-in bars.
- */
- void deselectAll();
-
- /**
- * Creates an SVGNumber object outside of any document trees. The object
- * is initialized to a value of zero.
- */
- SVGNumber createSVGNumber();
-
- /**
- * Creates an SVGLength object outside of any document trees. The object
- * is initialized to the value of 0 user units.
- */
- SVGLength createSVGLength();
-
- /**
- * Creates an SVGAngle object outside of any document trees. The object
- * is initialized to the value 0 degrees(unitless).
- */
- SVGAngle createSVGAngle();
-
- /**
- * Creates an SVGPoint object outside of any document trees. The object
- * is initialized to the point(0,0) in the user coordinate system.
- */
- SVGPoint createSVGPoint();
-
- /**
- * Creates an SVGMatrix object outside of any document trees. The object
- * is initialized to the identity matrix.
- */
- SVGMatrix createSVGMatrix();
-
- /**
- * Creates an SVGRect object outside of any document trees. The object
- * is initialized such that all values are set to 0 user units.
- */
- SVGRect createSVGRect();
-
- /**
- * Creates an SVGTransform object outside of any document trees.
- * The object is initialized to an identity matrix transform
- * (SVG_TRANSFORM_MATRIX).
- */
- SVGTransform createSVGTransform();
-
- /**
- * Creates an SVGTransform object outside of any document trees.
- * The object is initialized to the given matrix transform
- * (i.e., SVG_TRANSFORM_MATRIX).
- */
- SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix);
-
- /**
- * Searches this SVG document fragment(i.e., the search is restricted to a
- * subset of the document tree) for an Element whose id is given by elementId. If
- * an Element is found, that Element is returned. If no such element exists,
- * returns null. Behavior is not defined if more than one element has this id.
- */
- ElementPtr getElementById(const DOMString& elementId);
-
-
- //####################################################################
- //# SVGTextElement
- //####################################################################
-
-
- //####################################################################
- //# SVGTextContentElement
- //####################################################################
-
-
- /**
- * lengthAdjust Types
- */
- typedef enum
- {
- LENGTHADJUST_UNKNOWN = 0,
- LENGTHADJUST_SPACING = 1,
- LENGTHADJUST_SPACINGANDGLYPHS = 2
- } LengthAdjustType;
-
-
- /**
- * Corresponds to attribute textLength on the given element.
- */
- SVGAnimatedValue getTextLength();
-
-
- /**
- * Corresponds to attribute lengthAdjust on the given element. The value must be
- * one of the length adjust constants specified above.
- */
- SVGAnimatedValue getLengthAdjust();
-
-
- /**
- * Returns the total number of characters to be rendered within the current
- * element. Includes characters which are included via a 'tref' reference.
- */
- long getNumberOfChars();
-
- /**
- * The total sum of all of the advance values from rendering all of the
- * characters within this element, including the advance value on the glyphs
- *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
- * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
- * elements. For non-rendering environments, the user agent shall make reasonable
- * assumptions about glyph metrics.
- */
- double getComputedTextLength();
-
- /**
- * The total sum of all of the advance values from rendering the specified
- * substring of the characters, including the advance value on the glyphs
- *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
- * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
- * elements. For non-rendering environments, the user agent shall make reasonable
- * assumptions about glyph metrics.
- */
- double getSubStringLength(unsigned long charnum, unsigned long nchars)
- throw(DOMException);
-
- /**
- * Returns the current text position before rendering the character in the user
- * coordinate system for rendering the glyph(s) that correspond to the specified
- * character. The current text position has already taken into account the
- * effects of any inter-character adjustments due to properties 'kerning',
- * 'letter-spacing' and 'word-spacing' and adjustments due to attributes x, y, dx
- * and dy. If multiple consecutive characters are rendered inseparably(e.g., as
- * a single glyph or a sequence of glyphs), then each of the inseparable
- * characters will return the start position for the first glyph.
- */
- SVGPoint getStartPositionOfChar(unsigned long charnum) throw(DOMException);
-
- /**
- * Returns the current text position after rendering the character in the user
- * coordinate system for rendering the glyph(s) that correspond to the specified
- * character. This current text position does not take into account the effects
- * of any inter-character adjustments to prepare for the next character, such as
- * properties 'kerning', 'letter-spacing' and 'word-spacing' and adjustments due
- * to attributes x, y, dx and dy. If multiple consecutive characters are rendered
- * inseparably(e.g., as a single glyph or a sequence of glyphs), then each of
- * the inseparable characters will return the end position for the last glyph.
- */
- SVGPoint getEndPositionOfChar(unsigned long charnum) throw(DOMException);
-
- /**
- * Returns a tightest rectangle which defines the minimum and maximum X and Y
- * values in the user coordinate system for rendering the glyph(s) that
- * correspond to the specified character. The calculations assume that all glyphs
- * occupy the full standard glyph cell for the font. If multiple consecutive
- * characters are rendered inseparably(e.g., as a single glyph or a sequence of
- * glyphs), then each of the inseparable characters will return the same extent.
- */
- SVGRect getExtentOfChar(unsigned long charnum) throw(DOMException);
-
- /**
- * Returns the rotation value relative to the current user coordinate system used
- * to render the glyph(s) corresponding to the specified character. If multiple
- * glyph(s) are used to render the given character and the glyphs each have
- * different rotations(e.g., due to text-on-a-path), the user agent shall return
- * an average value(e.g., the rotation angle at the midpoint along the path for
- * all glyphs used to render this character). The rotation value represents the
- * rotation that is supplemental to any rotation due to properties
- * 'glyph-orientation-horizontal' and 'glyph-orientation-vertical'; thus, any
- * glyph rotations due to these properties are not included into the returned
- * rotation value. If multiple consecutive characters are rendered inseparably
- *(e.g., as a single glyph or a sequence of glyphs), then each of the
- * inseparable characters will return the same rotation value.
- */
- double getRotationOfChar(unsigned long charnum) throw(DOMException);
-
- /**
- * Returns the index of the character whose corresponding glyph cell bounding box
- * contains the specified point. The calculations assume that all glyphs occupy
- * the full standard glyph cell for the font. If no such character exists, a
- * value of -1 is returned. If multiple such characters exist, the character
- * within the element whose glyphs were rendered last(i.e., take into account
- * any reordering such as for bidirectional text) is used. If multiple
- * consecutive characters are rendered inseparably(e.g., as a single glyph or a
- * sequence of glyphs), then the user agent shall allocate an equal percentage of
- * the text advance amount to each of the contributing characters in determining
- * which of the characters is chosen.
- */
- long getCharNumAtPosition(const SVGPoint &point);
-
- /**
- * Causes the specified substring to be selected just as if the user
- * selected the substring interactively.
- */
- void selectSubString(unsigned long charnum, unsigned long nchars)
- throw(DOMException);
-
-
-
-
-
- //####################################################################
- //# SVGTextPathElement
- //####################################################################
-
-
- /**
- * textPath Method Types
- */
- typedef enum
- {
- TEXTPATH_METHODTYPE_UNKNOWN = 0,
- TEXTPATH_METHODTYPE_ALIGN = 1,
- TEXTPATH_METHODTYPE_STRETCH = 2
- } TextPathMethodType;
-
- /**
- * textPath Spacing Types
- */
- typedef enum
- {
- TEXTPATH_SPACINGTYPE_UNKNOWN = 0,
- TEXTPATH_SPACINGTYPE_AUTO = 1,
- TEXTPATH_SPACINGTYPE_EXACT = 2
- } TextPathSpacingType;
-
-
- /**
- * Corresponds to attribute startOffset on the given 'textPath' element.
- */
- SVGAnimatedValue getStartOffset();
-
- /**
- * Corresponds to attribute method on the given 'textPath' element. The value
- * must be one of the method type constants specified above.
- */
- SVGAnimatedValue getMethod();
-
- /**
- * Corresponds to attribute spacing on the given 'textPath' element.
- * The value must be one of the spacing type constants specified above.
- */
- SVGAnimatedValue getSpacing();
-
-
- //####################################################################
- //# SVGTextPositioningElement
- //####################################################################
-
-
- /**
- * Corresponds to attribute x on the given element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute dx on the given element.
- */
- // SVGAnimatedValue getDx();
-
- /**
- * Corresponds to attribute dy on the given element.
- */
- // SVGAnimatedValue getDy();
-
-
- /**
- * Corresponds to attribute rotate on the given element.
- */
- SVGAnimatedValueList getRotate();
-
-
- //####################################################################
- //# SVGTitleElement
- //####################################################################
-
- //####################################################################
- //# SVGTRefElement
- //####################################################################
-
- //####################################################################
- //# SVGTSpanElement
- //####################################################################
-
- //####################################################################
- //# SVGSwitchElement
- //####################################################################
-
- //####################################################################
- //# SVGUseElement
- //####################################################################
-
- /**
- * Corresponds to attribute x on the given 'use' element.
- */
- // SVGAnimatedValue getX();
-
- /**
- * Corresponds to attribute y on the given 'use' element.
- */
- // SVGAnimatedValue getY();
-
- /**
- * Corresponds to attribute width on the given 'use' element.
- */
- // SVGAnimatedValue getWidth();
-
- /**
- * Corresponds to attribute height on the given 'use' element.
- */
- // SVGAnimatedValue getHeight();
-
- /**
- * The root of the "instance tree". See description of SVGElementInstance for
- * a discussion on the instance tree.
- * */
- SVGElementInstance getInstanceRoot();
-
- /**
- * If the 'href' attribute is being animated, contains the current animated root
- * of the "instance tree". If the 'href' attribute is not currently being
- * animated, contains the same value as 'instanceRoot'. The root of the "instance
- * tree". See description of SVGElementInstance for a discussion on the instance
- * tree.
- */
- SVGElementInstance getAnimatedInstanceRoot();
-
- //####################################################################
- //# SVGVKernElement
- //####################################################################
-
- //####################################################################
- //# SVGViewElement
- //####################################################################
-
-
- /**
- *
- */
- SVGValueList getViewTarget();
-
-
-
-
- //##################
- //# Non-API methods
- //##################
-
-
- /**
- *
- */
- ~SVGElement() {}
-
-
-};
-
-
-
-/*#########################################################################
-## SVGDocument
-#########################################################################*/
-
-/**
- * When an 'svg' element is embedded inline as a component of a document from
- * another namespace, such as when an 'svg' element is embedded inline within an
- * XHTML document [XHTML], then an SVGDocument object will not exist; instead,
- * the root object in the document object hierarchy will be a Document object of
- * a different type, such as an HTMLDocument object.
- *
- * However, an SVGDocument object will indeed exist when the root element of the
- * XML document hierarchy is an 'svg' element, such as when viewing a stand-alone
- * SVG file(i.e., a file with MIME type "image/svg+xml"). In this case, the
- * SVGDocument object will be the root object of the document object model
- * hierarchy.
- *
- * In the case where an SVG document is embedded by reference, such as when an
- * XHTML document has an 'object' element whose href attribute references an SVG
- * document(i.e., a document whose MIME type is "image/svg+xml" and whose root
- * element is thus an 'svg' element), there will exist two distinct DOM
- * hierarchies. The first DOM hierarchy will be for the referencing document
- *(e.g., an XHTML document). The second DOM hierarchy will be for the referenced
- * SVG document. In this second DOM hierarchy, the root object of the document
- * object model hierarchy is an SVGDocument object.
- */
-class SVGDocument : public Document,
- public events::DocumentEvent
-{
-public:
-
-
- /**
- * The title of a document as specified by the title sub-element of the 'svg'
- * root element(i.e., <svg><title>Here is the title</title>...</svg>)
- */
- DOMString getTitle();
-
- /**
- * Returns the URI of the page that linked to this page. The value is an empty
- * string if the user navigated to the page directly(not through a link, but,
- * for example, via a bookmark).
- */
- DOMString getReferrer();
-
- /**
- * The domain name of the server that served the document, or a null string if
- * the server cannot be identified by a domain name.
- */
- DOMString getDomain();
-
- /**
- * The complete URI of the document.
- */
- DOMString getURL();
-
- /**
- * The root 'svg' element in the document hierarchy.
- */
- SVGElementPtr getRootElement();
-
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- ~SVGDocument() {}
-
-};
-
-
-
-/*#########################################################################
-## GetSVGDocument
-#########################################################################*/
-
-/**
- * In the case where an SVG document is embedded by reference, such as when an
- * XHTML document has an 'object' element whose href(or equivalent) attribute
- * references an SVG document(i.e., a document whose MIME type is
- * "image/svg+xml" and whose root element is thus an 'svg' element), the SVG user
- * agent is required to implement the GetSVGDocument interface for the element
- * which references the SVG document(e.g., the HTML 'object' or comparable
- * referencing elements).
- */
-class GetSVGDocument
-{
-public:
-
- /**
- * Returns the SVGDocument object for the referenced SVG document.
- */
- SVGDocumentPtr getSVGDocument()
- throw(DOMException);
-
- //##################
- //# Non-API methods
- //##################
-
- /**
- *
- */
- ~GetSVGDocument() {}
-
-};
-
-
-
-
-
-
-
-} //namespace svg
-} //namespace dom
-} //namespace w3c
-} //namespace org
-
-#endif // __SVG_H__
-/*#########################################################################
-## E N D O F F I L E
-#########################################################################*/
-
+#ifndef __SVG_H__
+#define __SVG_H__
+
+/**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright(C) 2005-2008 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or(at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * =======================================================================
+ * NOTES
+ *
+ * This API follows:
+ * http://www.w3.org/TR/SVG11/svgdom.html
+ *
+ * This file defines the main SVG-DOM Node types. Other non-Node types are
+ * defined in svgtypes.h.
+ *
+ */
+
+
+// For access to DOM2 core
+#include "dom/dom.h"
+
+// For access to DOM2 events
+#include "dom/events.h"
+
+// For access to those parts from DOM2 CSS OM used by SVG DOM.
+#include "dom/css.h"
+
+// For access to those parts from DOM2 Views OM used by SVG DOM.
+#include "dom/views.h"
+
+// For access to the SMIL OM used by SVG DOM.
+#include "dom/smil.h"
+
+
+#include <math.h>
+
+#define SVG_NAMESPACE "http://www.w3.org/2000/svg"
+
+
+namespace org
+{
+namespace w3c
+{
+namespace dom
+{
+namespace svg
+{
+
+
+//local definitions
+typedef dom::DOMString DOMString;
+typedef dom::DOMException DOMException;
+typedef dom::Element Element;
+typedef dom::ElementPtr ElementPtr;
+typedef dom::Document Document;
+typedef dom::DocumentPtr DocumentPtr;
+typedef dom::NodeList NodeList;
+
+
+
+
+class SVGElement;
+typedef Ptr<SVGElement> SVGElementPtr;
+class SVGUseElement;
+typedef Ptr<SVGUseElement> SVGUseElementPtr;
+class SVGDocument;
+typedef Ptr<SVGDocument> SVGDocumentPtr;
+
+/*#########################################################################
+## SVGException
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGException
+{
+public:
+
+ /**
+ * SVGExceptionCode
+ */
+ typedef enum
+ {
+ SVG_WRONG_TYPE_ERR = 0,
+ SVG_INVALID_VALUE_ERR = 1,
+ SVG_MATRIX_NOT_INVERTABLE = 2
+ } SVGExceptionCode;
+
+ unsigned short code;
+};
+
+
+
+
+
+
+
+//########################################################################
+//########################################################################
+//# V A L U E S
+//########################################################################
+//########################################################################
+
+
+
+
+
+/*#########################################################################
+## SVGAngle
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGAngle
+{
+public:
+
+ /**
+ * Angle Unit Types
+ */
+ typedef enum
+ {
+ SVG_ANGLETYPE_UNKNOWN = 0,
+ SVG_ANGLETYPE_UNSPECIFIED = 1,
+ SVG_ANGLETYPE_DEG = 2,
+ SVG_ANGLETYPE_RAD = 3,
+ SVG_ANGLETYPE_GRAD = 4
+ } AngleUnitType;
+
+ /**
+ *
+ */
+ unsigned short getUnitType();
+
+ /**
+ *
+ */
+ double getValue();
+
+ /**
+ *
+ */
+ void setValue(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getValueInSpecifiedUnits();
+
+ /**
+ *
+ */
+ void setValueInSpecifiedUnits(double /*val*/)
+ throw(DOMException);
+
+ /**
+ *
+ */
+ DOMString getValueAsString();
+
+ /**
+ *
+ */
+ void setValueAsString(const DOMString &/*val*/)
+ throw(DOMException);
+
+ /**
+ *
+ */
+ void newValueSpecifiedUnits(unsigned short /*unitType*/,
+ double /*valueInSpecifiedUnits*/);
+
+ /**
+ *
+ */
+ void convertToSpecifiedUnits(unsigned short /*unitType*/);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGAngle();
+
+ /**
+ *
+ */
+ SVGAngle(const SVGAngle &other);
+
+ /**
+ *
+ */
+ ~SVGAngle();
+
+protected:
+
+ int unitType;
+
+ double value;
+
+};
+
+
+/*#########################################################################
+## SVGLength
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGLength
+{
+public:
+
+ /**
+ * Length Unit Types
+ */
+ typedef enum
+ {
+ SVG_LENGTHTYPE_UNKNOWN = 0,
+ SVG_LENGTHTYPE_NUMBER = 1,
+ SVG_LENGTHTYPE_PERCENTAGE = 2,
+ SVG_LENGTHTYPE_EMS = 3,
+ SVG_LENGTHTYPE_EXS = 4,
+ SVG_LENGTHTYPE_PX = 5,
+ SVG_LENGTHTYPE_CM = 6,
+ SVG_LENGTHTYPE_MM = 7,
+ SVG_LENGTHTYPE_IN = 8,
+ SVG_LENGTHTYPE_PT = 9,
+ SVG_LENGTHTYPE_PC = 10
+ } LengthUnitType;
+
+ /**
+ *
+ */
+ unsigned short getUnitType();
+
+ /**
+ *
+ */
+ double getValue();
+
+ /**
+ *
+ */
+ void setValue(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getValueInSpecifiedUnits();
+
+ /**
+ *
+ */
+ void setValueInSpecifiedUnits(double /*val*/) throw(DOMException);
+
+ /**
+ *
+ */
+ DOMString getValueAsString();
+
+ /**
+ *
+ */
+ void setValueAsString(const DOMString& /*val*/) throw(DOMException);
+
+ /**
+ *
+ */
+ void newValueSpecifiedUnits(unsigned short /*unitType*/, double /*val*/);
+
+ /**
+ *
+ */
+ void convertToSpecifiedUnits(unsigned short /*unitType*/);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGLength();
+
+ /**
+ *
+ */
+ SVGLength(const SVGLength &other);
+
+ /**
+ *
+ */
+ ~SVGLength();
+
+protected:
+
+ int unitType;
+
+ double value;
+
+};
+
+/*#########################################################################
+## SVGMatrix
+#########################################################################*/
+
+/**
+ * In SVG, a Matrix is defined like this:
+ *
+ * | a c e |
+ * | b d f |
+ * | 0 0 1 |
+ *
+ */
+class SVGMatrix
+{
+public:
+
+
+ /**
+ *
+ */
+ double getA();
+
+ /**
+ *
+ */
+ void setA(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getB();
+
+ /**
+ *
+ */
+ void setB(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getC();
+
+ /**
+ *
+ */
+ void setC(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getD();
+
+ /**
+ *
+ */
+ void setD(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getE();
+
+ /**
+ *
+ */
+ void setE(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getF();
+
+ /**
+ *
+ */
+ void setF(double val) throw(DOMException);
+
+
+ /**
+ * Return the result of postmultiplying this matrix with another.
+ */
+ SVGMatrix multiply(const SVGMatrix &other);
+
+ /**
+ * Calculate the inverse of this matrix
+ *
+ *
+ * The determinant of a 3x3 matrix E
+ * (let's use our own notation for a bit)
+ *
+ * A B C
+ * D E F
+ * G H I
+ * is
+ * AEI - AFH - BDI + BFG + CDH - CEG
+ *
+ * Since in our affine transforms, G and H==0 and I==1,
+ * this reduces to:
+ * AE - BD
+ * In SVG's naming scheme, that is: a * d - c * b . SIMPLE!
+ *
+ * In a similar method of attack, SVG's adjunct matrix is:
+ *
+ * d -c cf-ed
+ * -b a eb-af
+ * 0 0 ad-cb
+ *
+ * To get the inverse matrix, we divide the adjunct matrix by
+ * the determinant. Notice that(ad-cb)/(ad-cb)==1. Very cool.
+ * So what we end up with is this:
+ *
+ * a = d/(ad-cb) c = -c/(ad-cb) e =(cf-ed)/(ad-cb)
+ * b = -b/(ad-cb) d = a/(ad-cb) f =(eb-af)/(ad-cb)
+ *
+ * (Since this would be in all SVG-DOM implementations,
+ * somebody needed to document this! ^^)
+ *
+ */
+ SVGMatrix inverse() throw(SVGException);
+
+ /**
+ * Equivalent to multiplying by:
+ * | 1 0 x |
+ * | 0 1 y |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix translate(double x, double y);
+
+ /**
+ * Equivalent to multiplying by:
+ * | scale 0 0 |
+ * | 0 scale 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix scale(double scale);
+
+ /**
+ * Equivalent to multiplying by:
+ * | scaleX 0 0 |
+ * | 0 scaleY 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix scaleNonUniform(double scaleX, double scaleY);
+
+ /**
+ * Equivalent to multiplying by:
+ * | cos(a) -sin(a) 0 |
+ * | sin(a) cos(a) 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix rotate(double angle);
+
+ /**
+ * Equivalent to multiplying by:
+ * | cos(a) -sin(a) 0 |
+ * | sin(a) cos(a) 0 |
+ * | 0 0 1 |
+ * In this case, angle 'a' is computed as the artangent
+ * of the slope y/x . It is negative if the slope is negative.
+ */
+ SVGMatrix rotateFromVector(double x, double y) throw(SVGException);
+
+ /**
+ * Equivalent to multiplying by:
+ * | -1 0 0 |
+ * | 0 1 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix flipX();
+
+ /**
+ * Equivalent to multiplying by:
+ * | 1 0 0 |
+ * | 0 -1 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix flipY();
+
+ /**
+ * | 1 tan(a) 0 |
+ * | 0 1 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix skewX(double angle);
+
+ /**
+ * Equivalent to multiplying by:
+ * | 1 0 0 |
+ * | tan(a) 1 0 |
+ * | 0 0 1 |
+ *
+ */
+ SVGMatrix skewY(double angle);
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGMatrix();
+
+ /**
+ *
+ */
+ SVGMatrix(double aArg, double bArg, double cArg,
+ double dArg, double eArg, double fArg);
+
+ /**
+ * Copy constructor
+ */
+ SVGMatrix(const SVGMatrix &other);
+
+ /**
+ *
+ */
+ ~SVGMatrix() {}
+
+protected:
+
+friend class SVGTransform;
+
+ /*
+ * Set to the identify matrix
+ */
+ void identity();
+
+ double a, b, c, d, e, f;
+
+};
+
+
+/*#########################################################################
+## SVGNumber
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGNumber
+{
+public:
+
+ /**
+ *
+ */
+ double getValue();
+
+ /**
+ *
+ */
+ void setValue(double val) throw(DOMException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGNumber();
+
+ /**
+ *
+ */
+ SVGNumber(const SVGNumber &other);
+
+ /**
+ *
+ */
+ ~SVGNumber();
+
+protected:
+
+ double value;
+
+};
+
+/*#########################################################################
+## SVGPoint
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGPoint
+{
+public:
+
+ /**
+ *
+ */
+ double getX();
+
+ /**
+ *
+ */
+ void setX(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getY();
+
+ /**
+ *
+ */
+ void setY(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ SVGPoint matrixTransform(const SVGMatrix &/*matrix*/);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGPoint();
+
+ /**
+ *
+ */
+ SVGPoint(const SVGPoint &other);
+
+ /**
+ *
+ */
+ ~SVGPoint();
+
+protected:
+
+ double x, y;
+};
+
+
+/*#########################################################################
+## SVGPathSeg
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGPathSeg
+{
+public:
+
+ /**
+ * Path Segment Types
+ */
+ typedef enum
+ {
+ PATHSEG_UNKNOWN = 0,
+ PATHSEG_CLOSEPATH = 1,
+ PATHSEG_MOVETO_ABS = 2,
+ PATHSEG_MOVETO_REL = 3,
+ PATHSEG_LINETO_ABS = 4,
+ PATHSEG_LINETO_REL = 5,
+ PATHSEG_CURVETO_CUBIC_ABS = 6,
+ PATHSEG_CURVETO_CUBIC_REL = 7,
+ PATHSEG_CURVETO_QUADRATIC_ABS = 8,
+ PATHSEG_CURVETO_QUADRATIC_REL = 9,
+ PATHSEG_ARC_ABS = 10,
+ PATHSEG_ARC_REL = 11,
+ PATHSEG_LINETO_HORIZONTAL_ABS = 12,
+ PATHSEG_LINETO_HORIZONTAL_REL = 13,
+ PATHSEG_LINETO_VERTICAL_ABS = 14,
+ PATHSEG_LINETO_VERTICAL_REL = 15,
+ PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16,
+ PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17,
+ PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18,
+ PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19
+ } PathSegmentType;
+
+ /**
+ *
+ */
+ unsigned short getPathSegType();
+
+ /**
+ *
+ */
+ DOMString getPathSegTypeAsLetter();
+
+ /**
+ * From the various subclasses
+ */
+
+ /**
+ *
+ */
+ double getX();
+
+ /**
+ *
+ */
+ void setX(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getX1();
+
+ /**
+ *
+ */
+ void setX1(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getX2();
+
+ /**
+ *
+ */
+ void setX2(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getY();
+
+ /**
+ *
+ */
+ void setY(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getY1();
+
+ /**
+ *
+ */
+ void setY1(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getY2();
+
+ /**
+ *
+ */
+ void setY2(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getR1();
+
+ /**
+ *
+ */
+ void setR1(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getR2();
+
+ /**
+ *
+ */
+ void setR2(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getAngle();
+
+ /**
+ *
+ */
+ void setAngle(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ bool getLargeArcFlag();
+
+ /**
+ *
+ */
+ void setLargeArcFlag(bool val) throw(DOMException);
+
+ /**
+ *
+ */
+ bool getSweepFlag();
+
+ /**
+ *
+ */
+ void setSweepFlag(bool val) throw(DOMException);
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGPathSeg();
+
+ /**
+ *
+ */
+ SVGPathSeg(int typeArg);
+
+ /**
+ *
+ */
+ SVGPathSeg(const SVGPathSeg &other);
+
+ /**
+ *
+ */
+ SVGPathSeg &operator=(const SVGPathSeg &other);
+
+ /**
+ *
+ */
+ ~SVGPathSeg();
+
+protected:
+
+ void init();
+
+ void assign(const SVGPathSeg &other);
+
+ int type;
+ double x, y, x1, y1, x2, y2;
+ double r1, r2;
+ double angle;
+ bool largeArcFlag;
+ bool sweepFlag;
+};
+
+
+/*#########################################################################
+## SVGPreserveAspectRatio
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGPreserveAspectRatio
+{
+public:
+
+
+ /**
+ * Alignment Types
+ */
+ typedef enum
+ {
+ SVG_PRESERVEASPECTRATIO_UNKNOWN = 0,
+ SVG_PRESERVEASPECTRATIO_NONE = 1,
+ SVG_PRESERVEASPECTRATIO_XMINYMIN = 2,
+ SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3,
+ SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4,
+ SVG_PRESERVEASPECTRATIO_XMINYMID = 5,
+ SVG_PRESERVEASPECTRATIO_XMIDYMID = 6,
+ SVG_PRESERVEASPECTRATIO_XMAXYMID = 7,
+ SVG_PRESERVEASPECTRATIO_XMINYMAX = 8,
+ SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9,
+ SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10
+ } AlignmentType;
+
+
+ /**
+ * Meet-or-slice Types
+ */
+ typedef enum
+ {
+ SVG_MEETORSLICE_UNKNOWN = 0,
+ SVG_MEETORSLICE_MEET = 1,
+ SVG_MEETORSLICE_SLICE = 2
+ } MeetOrSliceType;
+
+
+ /**
+ *
+ */
+ unsigned short getAlign();
+
+ /**
+ *
+ */
+ void setAlign(unsigned short val) throw(DOMException);
+
+ /**
+ *
+ */
+ unsigned short getMeetOrSlice();
+
+ /**
+ *
+ */
+ void setMeetOrSlice(unsigned short val) throw(DOMException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGPreserveAspectRatio();
+
+ /**
+ *
+ */
+ SVGPreserveAspectRatio(const SVGPreserveAspectRatio &other);
+
+ /**
+ *
+ */
+ ~SVGPreserveAspectRatio();
+
+protected:
+
+ unsigned short align;
+ unsigned short meetOrSlice;
+
+};
+
+
+
+/*#########################################################################
+## SVGRect
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGRect
+{
+public:
+
+ /**
+ *
+ */
+ double getX();
+
+ /**
+ *
+ */
+ void setX(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getY();
+
+ /**
+ *
+ */
+ void setY(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getWidth();
+
+ /**
+ *
+ */
+ void setWidth(double val) throw(DOMException);
+
+ /**
+ *
+ */
+ double getHeight();
+
+ /**
+ *
+ */
+ void setHeight(double val) throw(DOMException);
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGRect();
+
+ /**
+ *
+ */
+ SVGRect(const SVGRect &other);
+
+ /**
+ *
+ */
+ ~SVGRect();
+
+protected:
+
+ double x, y, width, height;
+
+};
+
+/*#########################################################################
+## SVGTransform
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGTransform
+{
+public:
+
+ /**
+ * Transform Types
+ */
+ typedef enum
+ {
+ SVG_TRANSFORM_UNKNOWN = 0,
+ SVG_TRANSFORM_MATRIX = 1,
+ SVG_TRANSFORM_TRANSLATE = 2,
+ SVG_TRANSFORM_SCALE = 3,
+ SVG_TRANSFORM_ROTATE = 4,
+ SVG_TRANSFORM_SKEWX = 5,
+ SVG_TRANSFORM_SKEWY = 6,
+ } TransformType;
+
+ /**
+ *
+ */
+ unsigned short getType();
+
+
+ /**
+ *
+ */
+ SVGMatrix getMatrix();
+
+ /**
+ *
+ */
+ double getAngle();
+
+ /**
+ *
+ */
+ void setMatrix(const SVGMatrix &matrixArg);
+
+ /**
+ *
+ */
+ void setTranslate(double tx, double ty);
+
+ /**
+ *
+ */
+ void setScale(double sx, double sy);
+
+ /**
+ *
+ */
+ void setRotate(double angleArg, double cx, double cy);
+
+ /**
+ *
+ */
+ void setSkewX(double angleArg);
+
+ /**
+ *
+ */
+ void setSkewY(double angleArg);
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGTransform();
+
+ /**
+ *
+ */
+ SVGTransform(const SVGTransform &other);
+
+ /**
+ *
+ */
+ ~SVGTransform();
+
+protected:
+
+ int type;
+ double angle;
+
+ SVGMatrix matrix;
+};
+
+
+
+
+/*#########################################################################
+## SVGUnitTypes
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGUnitTypes
+{
+public:
+
+ /**
+ * Unit Types
+ */
+ typedef enum
+ {
+ SVG_UNIT_TYPE_UNKNOWN = 0,
+ SVG_UNIT_TYPE_USERSPACEONUSE = 1,
+ SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2
+ } UnitType;
+
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGUnitTypes();
+
+ /**
+ *
+ */
+ ~SVGUnitTypes();
+
+};
+
+
+
+
+/*#########################################################################
+## SVGValue
+#########################################################################*/
+
+/**
+ * This is a helper class that will hold several types of data. It will
+ * be used in those situations where methods are common to different
+ * interfaces, except for the data type. This class holds the following:
+ * SVGAngle
+ * SVGBoolean
+ * SVGEnumeration
+ * SVGInteger
+ * SVGLength
+ * SVGNumber
+ * SVGPreserveAspectRatio
+ * SVGRect
+ * SVGString
+ */
+class SVGValue
+{
+public:
+
+ /**
+ *
+ */
+ typedef enum
+ {
+ SVG_ANGLE,
+ SVG_BOOLEAN,
+ SVG_ENUMERATION,
+ SVG_INTEGER,
+ SVG_LENGTH,
+ SVG_NUMBER,
+ SVG_PRESERVE_ASPECT_RATIO,
+ SVG_RECT,
+ SVG_STRING,
+ } SVGValueType;
+
+ /**
+ * Constructor
+ */
+ SVGValue();
+
+ /**
+ * Copy constructor
+ */
+ SVGValue(const SVGValue &other);
+
+ /**
+ * Assignment
+ */
+ SVGValue &operator=(const SVGValue &other);
+
+ /**
+ *
+ */
+ ~SVGValue();
+
+ //###########################
+ // TYPES
+ //###########################
+
+ /**
+ * Angle
+ */
+ SVGValue(const SVGAngle &v);
+
+ SVGAngle angleValue();
+
+ /**
+ * Boolean
+ */
+ SVGValue(bool v);
+
+ bool booleanValue();
+
+
+ /**
+ * Enumeration
+ */
+ SVGValue(short v);
+
+ short enumerationValue();
+
+ /**
+ * Integer
+ */
+ SVGValue(long v);
+
+ long integerValue();
+
+ /**
+ * Length
+ */
+ SVGValue(const SVGLength &v);
+
+ SVGLength lengthValue();
+
+ /**
+ * Number
+ */
+ SVGValue(double v);
+
+ double numberValue();
+
+ /**
+ * PathSegment
+ */
+ SVGValue(const SVGPathSeg &v);
+
+ SVGPathSeg pathDataValue();
+
+
+ /**
+ * Points
+ */
+ SVGValue(const SVGPoint &v);
+
+ SVGPoint pointValue();
+
+
+ /**
+ * PreserveAspectRatio
+ */
+ SVGValue(const SVGPreserveAspectRatio &v);
+
+ SVGPreserveAspectRatio preserveAspectRatioValue();
+
+ /**
+ * Rect
+ */
+ SVGValue(const SVGRect &v);
+
+ SVGRect rectValue();
+
+ /**
+ * String
+ */
+ SVGValue(const DOMString &v);
+
+ DOMString stringValue();
+
+ /**
+ * TransformList
+ */
+ SVGValue(const SVGTransform &v);
+
+ SVGTransform transformValue();
+
+
+private:
+
+ void init();
+
+ void assign(const SVGValue &other);
+
+ short type;
+ SVGAngle angleval; // SVGAngle
+ bool bval; // SVGBoolean
+ short eval; // SVGEnumeration
+ long ival; // SVGInteger
+ SVGLength lengthval; // SVGLength
+ double dval; // SVGNumber
+ SVGPathSeg segval; // SVGPathSeg
+ SVGPoint pointval; // SVGPoint
+ SVGPreserveAspectRatio parval; // SVGPreserveAspectRatio
+ SVGRect rval; // SVGRect
+ DOMString sval; // SVGString
+ SVGTransform transformval; // SVGTransform
+
+};
+
+
+/*#########################################################################
+## SVGValueList
+#########################################################################*/
+
+/**
+ * THis is used to generify a bit the several different types of lists:
+ *
+ * SVGLengthList -> SVGValueList<SVGLength>
+ * SVGValueList -> SVGValueList<SVGNumber>
+ * SVGPathData -> SVGValueList<SVGPathSeg>
+ * SVGPoints -> SVGValueList<SVGPoint>
+ * SVGTransformList -> SVGValueList<SVGTransform>
+ */
+class SVGValueList
+{
+public:
+
+ /**
+ *
+ */
+ typedef enum
+ {
+ SVG_LIST_LENGTH,
+ SVG_LIST_NUMBER,
+ SVG_LIST_PATHSEG,
+ SVG_LIST_POINT,
+ SVG_LIST_TRANSFORM
+ } SVGValueListTypes;
+
+ /**
+ *
+ */
+ unsigned long getNumberOfItems();
+
+
+ /**
+ *
+ */
+ void clear() throw(DOMException);
+
+ /**
+ *
+ */
+ SVGValue getItem(unsigned long index) throw(DOMException);
+
+ /**
+ *
+ */
+ SVGValue insertItemBefore(const SVGValue &newItem,
+ unsigned long index)
+ throw(DOMException, SVGException);
+
+ /**
+ *
+ */
+ SVGValue replaceItem(const SVGValue &newItem,
+ unsigned long index)
+ throw(DOMException, SVGException);
+
+ /**
+ *
+ */
+ SVGValue removeItem(unsigned long index) throw(DOMException);
+
+ /**
+ *
+ */
+ SVGValue appendItem(const SVGValue &newItem)
+ throw(DOMException, SVGException);
+
+ /**
+ * Matrix
+ */
+ SVGValue initialize(const SVGValue &newItem)
+ throw(DOMException, SVGException);
+
+ /**
+ * Matrix
+ */
+ SVGValue createSVGTransformFromMatrix(const SVGValue &matrix);
+
+ /**
+ * Matrix
+ */
+ SVGValue consolidate();
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGValueList();
+
+ /**
+ *
+ */
+ SVGValueList(const SVGValueList &other);
+
+ /**
+ *
+ */
+ ~SVGValueList();
+
+protected:
+
+ std::vector<SVGValue> items;
+
+};
+
+
+
+
+
+/*#########################################################################
+## SVGAnimatedValue
+#########################################################################*/
+
+/**
+ * This class is used to merge all of the "Animated" values, with only
+ * a different type, into a single API. This class subsumes the following:
+ * SVGAnimatedValue
+ * SVGAnimatedValue
+ * SVGAnimatedValue
+ * SVGAnimatedValue
+ * SVGAnimatedValue
+ * SVGAnimatedValue
+ * SVGAnimatedPathData
+ * SVGAnimatedPoints
+ * SVGAnimatedPreserveAspectRatio
+ * SVGAnimatedValue
+ * SVGAnimatedValue
+ */
+class SVGAnimatedValue
+{
+public:
+
+ /**
+ *
+ */
+ SVGValue &getBaseVal();
+
+ /**
+ *
+ */
+ void setBaseVal(const SVGValue &val) throw (DOMException);
+
+ /**
+ *
+ */
+ SVGValue &getAnimVal();
+
+ /**
+ *
+ */
+ SVGAnimatedValue();
+
+ /**
+ *
+ */
+ SVGAnimatedValue(const SVGValue &baseValue);
+
+ /**
+ *
+ */
+ SVGAnimatedValue(const SVGValue &baseValue, const SVGValue &animValue);
+
+ /**
+ *
+ */
+ SVGAnimatedValue(const SVGAnimatedValue &other);
+
+ /**
+ *
+ */
+ SVGAnimatedValue &operator=(const SVGAnimatedValue &other);
+
+ /**
+ *
+ */
+ SVGAnimatedValue &operator=(const SVGValue &baseVal);
+
+ /**
+ *
+ */
+ ~SVGAnimatedValue();
+
+private:
+
+ void init();
+
+ void assign(const SVGAnimatedValue &other);
+
+ SVGValue baseVal;
+
+ SVGValue animVal;
+
+};
+
+
+/*#########################################################################
+## SVGAnimatedValueList
+#########################################################################*/
+
+/**
+ * This class is used to merge all of the "Animated" values, with only
+ * a different type, into a single API. This class subsumes the following:
+ * SVGAnimatedValueList
+ * SVGAnimatedValueList
+ * SVGAnimatedTransformList
+ */
+class SVGAnimatedValueList
+{
+public:
+
+ /**
+ *
+ */
+ SVGValueList &getBaseVal();
+
+ /**
+ *
+ */
+ void setBaseVal(const SVGValueList &val) throw (DOMException);
+
+ /**
+ *
+ */
+ SVGValueList &getAnimVal();
+
+ /**
+ *
+ */
+ SVGAnimatedValueList();
+
+ /**
+ *
+ */
+ SVGAnimatedValueList(const SVGValueList &baseValue);
+
+ /**
+ *
+ */
+ SVGAnimatedValueList(const SVGValueList &baseValue, const SVGValueList &animValue);
+
+ /**
+ *
+ */
+ SVGAnimatedValueList(const SVGAnimatedValueList &other);
+
+ /**
+ *
+ */
+ SVGAnimatedValueList &operator=(const SVGAnimatedValueList &other);
+
+ /**
+ *
+ */
+ SVGAnimatedValueList &operator=(const SVGValueList &baseVal);
+
+ /**
+ *
+ */
+ ~SVGAnimatedValueList();
+
+private:
+
+ void init();
+
+ void assign(const SVGAnimatedValueList &other);
+
+ SVGValueList baseVal;
+
+ SVGValueList animVal;
+
+};
+
+
+
+/*#########################################################################
+## SVGICCColor
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGICCColor
+{
+public:
+
+ /**
+ *
+ */
+ DOMString getColorProfile();
+
+ /**
+ *
+ */
+ void setColorProfile(const DOMString &val) throw(DOMException);
+
+ /**
+ *
+ */
+ SVGValueList &getColors();
+
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGICCColor();
+
+ /**
+ *
+ */
+ SVGICCColor(const SVGICCColor &other);
+
+ /**
+ *
+ */
+ ~SVGICCColor();
+
+protected:
+
+ DOMString colorProfile;
+
+ SVGValueList colors;
+
+};
+
+
+
+/*#########################################################################
+## SVGColor
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGColor : public css::CSSValue
+{
+public:
+
+
+ /**
+ * Color Types
+ */
+ typedef enum
+ {
+ SVG_COLORTYPE_UNKNOWN = 0,
+ SVG_COLORTYPE_RGBCOLOR = 1,
+ SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2,
+ SVG_COLORTYPE_CURRENTCOLOR = 3
+ } ColorType;
+
+
+ /**
+ *
+ */
+ unsigned short getColorType();
+
+ /**
+ *
+ */
+ css::RGBColor getRgbColor();
+
+ /**
+ *
+ */
+ SVGICCColor getIccColor();
+
+
+ /**
+ *
+ */
+ void setRGBColor(const DOMString& /*rgbColor*/)
+ throw(SVGException);
+
+ /**
+ *
+ */
+ void setRGBColorICCColor(const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw(SVGException);
+
+ /**
+ *
+ */
+ void setColor(unsigned short /*colorType*/,
+ const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw(SVGException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGColor();
+
+ /**
+ *
+ */
+ SVGColor(const SVGColor &other);
+
+ /**
+ *
+ */
+ ~SVGColor();
+
+protected:
+
+ int colorType;
+
+};
+
+
+
+/*#########################################################################
+## SVGPaint
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGPaint : public SVGColor
+{
+public:
+
+ /**
+ * Paint Types
+ */
+ typedef enum
+ {
+ SVG_PAINTTYPE_UNKNOWN = 0,
+ SVG_PAINTTYPE_RGBCOLOR = 1,
+ SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2,
+ SVG_PAINTTYPE_NONE = 101,
+ SVG_PAINTTYPE_CURRENTCOLOR = 102,
+ SVG_PAINTTYPE_URI_NONE = 103,
+ SVG_PAINTTYPE_URI_CURRENTCOLOR = 104,
+ SVG_PAINTTYPE_URI_RGBCOLOR = 105,
+ SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106,
+ SVG_PAINTTYPE_URI = 107
+ } PaintType;
+
+
+ /**
+ *
+ */
+ unsigned short getPaintType();
+
+ /**
+ *
+ */
+ DOMString getUri();
+
+ /**
+ *
+ */
+ void setUri(const DOMString& uriArg);
+
+ /**
+ *
+ */
+ void setPaint(unsigned short paintTypeArg,
+ const DOMString& uriArg,
+ const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw(SVGException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGPaint();
+
+ /**
+ *
+ */
+ SVGPaint(const SVGPaint &other);
+
+ /**
+ *
+ */
+ ~SVGPaint();
+
+protected:
+
+ unsigned int paintType;
+ DOMString uri;
+
+};
+
+
+
+
+//########################################################################
+//########################################################################
+//# I N T E R F A C E S
+//########################################################################
+//########################################################################
+
+
+
+
+
+
+
+/*#########################################################################
+## SVGStylable
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGStylable
+{
+public:
+
+ /**
+ *
+ */
+ SVGAnimatedValue getClassName();
+
+ /**
+ *
+ */
+ css::CSSStyleDeclaration getStyle();
+
+
+ /**
+ *
+ */
+ css::CSSValue getPresentationAttribute(const DOMString& /*name*/);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGStylable();
+
+ /**
+ *
+ */
+ SVGStylable(const SVGStylable &other);
+
+ /**
+ *
+ */
+ ~SVGStylable();
+
+protected:
+
+ SVGAnimatedValue className;
+ css::CSSStyleDeclaration style;
+
+};
+
+
+
+
+
+/*#########################################################################
+## SVGLocatable
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGLocatable
+{
+public:
+
+ /**
+ *
+ */
+ SVGElementPtr getNearestViewportElement();
+
+ /**
+ *
+ */
+ SVGElementPtr getFarthestViewportElement();
+
+ /**
+ *
+ */
+ SVGRect getBBox();
+
+ /**
+ *
+ */
+ SVGMatrix getCTM();
+
+ /**
+ *
+ */
+ SVGMatrix getScreenCTM();
+
+ /**
+ *
+ */
+ SVGMatrix getTransformToElement(const SVGElement &/*element*/)
+ throw(SVGException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGLocatable();
+
+ /**
+ *
+ */
+ SVGLocatable(const SVGLocatable &/*other*/);
+
+ /**
+ *
+ */
+ ~SVGLocatable();
+
+protected:
+
+ SVGRect bbox;
+ SVGMatrix ctm;
+ SVGMatrix screenCtm;
+
+};
+
+
+/*#########################################################################
+## SVGTransformable
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGTransformable : public SVGLocatable
+{
+public:
+
+
+ /**
+ *
+ */
+ SVGAnimatedValueList &getTransform();
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGTransformable();
+
+ /**
+ *
+ */
+ SVGTransformable(const SVGTransformable &other);
+
+ /**
+ *
+ */
+ ~SVGTransformable();
+
+protected:
+
+ SVGAnimatedValueList transforms;
+};
+
+
+
+/*#########################################################################
+## SVGTests
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGTests
+{
+public:
+
+ /**
+ *
+ */
+ SVGValueList &getRequiredFeatures();
+
+ /**
+ *
+ */
+ SVGValueList &getRequiredExtensions();
+
+ /**
+ *
+ */
+ SVGValueList &getSystemLanguage();
+
+ /**
+ *
+ */
+ bool hasExtension(const DOMString& /*extension*/);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGTests();
+
+ /**
+ *
+ */
+ SVGTests(const SVGTests &other);
+
+ /**
+ *
+ */
+ ~SVGTests();
+
+protected:
+
+ SVGValueList requiredFeatures;
+ SVGValueList requiredExtensions;
+ SVGValueList systemLanguage;
+
+};
+
+
+
+
+
+
+/*#########################################################################
+## SVGLangSpace
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGLangSpace
+{
+public:
+
+
+ /**
+ *
+ */
+ DOMString getXmlLang();
+
+ /**
+ *
+ */
+ void setXmlLang(const DOMString &val) throw(DOMException);
+
+ /**
+ *
+ */
+ DOMString getXmlSpace();
+
+ /**
+ *
+ */
+ void setXmlSpace(const DOMString &val) throw(DOMException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGLangSpace();
+
+ /**
+ *
+ */
+ SVGLangSpace(const SVGLangSpace &other);
+
+ /**
+ *
+ */
+ ~SVGLangSpace();
+
+protected:
+
+ DOMString xmlLang;
+ DOMString xmlSpace;
+
+};
+
+
+
+/*#########################################################################
+## SVGExternalResourcesRequired
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGExternalResourcesRequired
+{
+public:
+
+ /**
+ * boolean
+ */
+ SVGAnimatedValue getExternalResourcesRequired();
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGExternalResourcesRequired();
+
+ /**
+ *
+ */
+ SVGExternalResourcesRequired(const SVGExternalResourcesRequired &other);
+
+ /**
+ *
+ */
+ ~SVGExternalResourcesRequired();
+
+protected:
+
+ SVGAnimatedValue required; //boolean
+
+};
+
+
+
+
+
+
+
+
+
+/*#########################################################################
+## SVGFitToViewBox
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGFitToViewBox
+{
+public:
+
+ /**
+ * rect
+ */
+ SVGAnimatedValue getViewBox();
+
+ /**
+ * preserveAspectRatio
+ */
+ SVGAnimatedValue getPreserveAspectRatio();
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGFitToViewBox();
+
+ /**
+ *
+ */
+ SVGFitToViewBox(const SVGFitToViewBox &other);
+
+ /**
+ *
+ */
+ ~SVGFitToViewBox();
+
+protected:
+
+ SVGAnimatedValue viewBox; //rect
+ SVGAnimatedValue preserveAspectRatio;
+
+};
+
+
+/*#########################################################################
+## SVGZoomAndPan
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGZoomAndPan
+{
+public:
+
+ /**
+ * Zoom and Pan Types
+ */
+ typedef enum
+ {
+ SVG_ZOOMANDPAN_UNKNOWN = 0,
+ SVG_ZOOMANDPAN_DISABLE = 1,
+ SVG_ZOOMANDPAN_MAGNIFY = 2
+ } ZoomAndPanType;
+
+ /**
+ *
+ */
+ unsigned short getZoomAndPan();
+
+ /**
+ *
+ */
+ void setZoomAndPan(unsigned short val) throw(DOMException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGZoomAndPan();
+
+ /**
+ *
+ */
+ SVGZoomAndPan(const SVGZoomAndPan &other);
+
+ /**
+ *
+ */
+ ~SVGZoomAndPan();
+
+protected:
+
+ unsigned short zoomAndPan;
+
+};
+
+
+
+
+
+
+/*#########################################################################
+## SVGViewSpec
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGViewSpec : public SVGZoomAndPan,
+ public SVGFitToViewBox
+{
+public:
+
+ /**
+ *
+ */
+ SVGValueList getTransform();
+
+ /**
+ *
+ */
+ SVGElementPtr getViewTarget();
+
+ /**
+ *
+ */
+ DOMString getViewBoxString();
+
+ /**
+ *
+ */
+ DOMString getPreserveAspectRatioString();
+
+ /**
+ *
+ */
+ DOMString getTransformString();
+
+ /**
+ *
+ */
+ DOMString getViewTargetString();
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGViewSpec();
+
+ /**
+ *
+ */
+ SVGViewSpec(const SVGViewSpec &other);
+
+ /**
+ *
+ */
+ ~SVGViewSpec();
+
+protected:
+
+ SVGElementPtr viewTarget;
+ SVGValueList transform;
+};
+
+
+/*#########################################################################
+## SVGURIReference
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGURIReference
+{
+public:
+
+ /**
+ * string
+ */
+ SVGAnimatedValue getHref();
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGURIReference();
+
+ /**
+ *
+ */
+ SVGURIReference(const SVGURIReference &other);
+
+ /**
+ *
+ */
+ ~SVGURIReference();
+
+protected:
+
+ SVGAnimatedValue href;
+
+};
+
+
+
+
+
+
+/*#########################################################################
+## SVGCSSRule
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGCSSRule : public css::CSSRule
+{
+public:
+
+
+ /**
+ * Additional CSS RuleType to support ICC color specifications
+ */
+ typedef enum
+ {
+ COLOR_PROFILE_RULE = 7
+ } ColorProfileRuleType;
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGCSSRule();
+
+ /**
+ *
+ */
+ SVGCSSRule(const SVGCSSRule &other);
+
+ /**
+ *
+ */
+ ~SVGCSSRule();
+
+};
+
+
+
+/*#########################################################################
+## SVGRenderingIntent
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGRenderingIntent
+{
+public:
+
+ /**
+ * Rendering Intent Types
+ */
+ typedef enum
+ {
+ RENDERING_INTENT_UNKNOWN = 0,
+ RENDERING_INTENT_AUTO = 1,
+ RENDERING_INTENT_PERCEPTUAL = 2,
+ RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3,
+ RENDERING_INTENT_SATURATION = 4,
+ RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5
+ } RenderingIntentType;
+
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGRenderingIntent();
+
+ /**
+ *
+ */
+ SVGRenderingIntent(const SVGRenderingIntent &other);
+
+ /**
+ *
+ */
+ ~SVGRenderingIntent();
+
+protected:
+
+ unsigned short renderingIntentType;
+};
+
+
+
+
+
+
+
+
+
+/*#########################################################################
+## SVGColorProfileRule
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGColorProfileRule : public SVGCSSRule,
+ public SVGRenderingIntent
+{
+
+public:
+
+ /**
+ *
+ */
+ DOMString getSrc();
+
+ /**
+ *
+ */
+ void setSrc(const DOMString &val) throw(DOMException);
+
+ /**
+ *
+ */
+ DOMString getName();
+
+ /**
+ *
+ */
+ void setName(const DOMString &val) throw(DOMException);
+
+ /**
+ *
+ */
+ unsigned short getRenderingIntent();
+
+ /**
+ *
+ */
+ void setRenderingIntent(unsigned short val) throw(DOMException);
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGColorProfileRule();
+
+ /**
+ *
+ */
+ SVGColorProfileRule(const SVGColorProfileRule &other);
+
+ /**
+ *
+ */
+ ~SVGColorProfileRule();
+
+protected:
+
+ unsigned short renderingIntent;
+ DOMString src;
+ DOMString name;
+
+};
+
+
+
+/*#########################################################################
+## SVGFilterPrimitiveStandardAttributes
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGFilterPrimitiveStandardAttributes : public SVGStylable
+{
+public:
+
+ /**
+ * length
+ */
+ SVGAnimatedValue getX();
+
+ /**
+ * length
+ */
+ SVGAnimatedValue getY();
+
+ /**
+ * length
+ */
+ SVGAnimatedValue getWidth();
+
+ /**
+ * length
+ */
+ SVGAnimatedValue getHeight();
+
+ /**
+ * string
+ */
+ SVGAnimatedValue getResult();
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGFilterPrimitiveStandardAttributes();
+
+ /**
+ *
+ */
+ SVGFilterPrimitiveStandardAttributes(
+ const SVGFilterPrimitiveStandardAttributes &other);
+
+ /**
+ *
+ */
+ ~SVGFilterPrimitiveStandardAttributes();
+
+protected:
+
+ SVGAnimatedValue x;
+ SVGAnimatedValue y;
+ SVGAnimatedValue width;
+ SVGAnimatedValue height;
+ SVGAnimatedValue result;
+
+};
+
+
+/*#########################################################################
+## SVGEvent
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGEvent : events::Event
+{
+public:
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGEvent();
+
+ /**
+ *
+ */
+ SVGEvent(const SVGEvent &other);
+
+ /**
+ *
+ */
+ ~SVGEvent();
+
+};
+
+
+
+
+/*#########################################################################
+## SVGZoomEvent
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGZoomEvent : events::UIEvent
+{
+public:
+
+ /**
+ *
+ */
+ SVGRect getZoomRectScreen();
+
+ /**
+ *
+ */
+ double getPreviousScale();
+
+ /**
+ *
+ */
+ SVGPoint getPreviousTranslate();
+
+ /**
+ *
+ */
+ double getNewScale();
+
+ /**
+ *
+ */
+ SVGPoint getNewTranslate();
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGZoomEvent();
+
+ /**
+ *
+ */
+ SVGZoomEvent(const SVGZoomEvent &other);
+
+ /**
+ *
+ */
+ ~SVGZoomEvent();
+
+protected:
+
+ SVGRect zoomRectScreen;
+ double previousScale;
+ SVGPoint previousTranslate;
+ double newScale;
+ SVGPoint newTranslate;
+
+};
+
+
+
+/*#########################################################################
+## SVGElementInstance
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGElementInstance : public events::EventTarget
+{
+public:
+
+ /**
+ *
+ */
+ SVGElementPtr getCorrespondingElement();
+
+ /**
+ *
+ */
+ SVGUseElementPtr getCorrespondingUseElement();
+
+ /**
+ *
+ */
+ SVGElementInstance getParentNode();
+
+ /**
+ * Since we are using stack types and this is a circular definition,
+ * we will instead implement this as a global function below:
+ * SVGElementInstanceList getChildNodes(const SVGElementInstance instance);
+ */
+ //SVGElementInstanceList getChildNodes();
+
+ /**
+ *
+ */
+ SVGElementInstance getFirstChild();
+
+ /**
+ *
+ */
+ SVGElementInstance getLastChild();
+
+ /**
+ *
+ */
+ SVGElementInstance getPreviousSibling();
+
+ /**
+ *
+ */
+ SVGElementInstance getNextSibling();
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGElementInstance();
+
+ /**
+ *
+ */
+ SVGElementInstance(const SVGElementInstance &other);
+
+ /**
+ *
+ */
+ ~SVGElementInstance();
+
+protected:
+
+ SVGElementPtr correspondingElement;
+ SVGUseElementPtr correspondingUseElement;
+
+};
+
+
+
+
+
+
+/*#########################################################################
+## SVGElementInstanceList
+#########################################################################*/
+
+/**
+ *
+ */
+class SVGElementInstanceList
+{
+public:
+
+ /**
+ *
+ */
+ unsigned long getLength();
+
+ /**
+ *
+ */
+ SVGElementInstance item(unsigned long index);
+
+ /**
+ * This static method replaces the circular definition of:
+ * SVGElementInstanceList SVGElementInstance::getChildNodes()
+ *
+ */
+ static SVGElementInstanceList getChildNodes(const SVGElementInstance &/*instance*/);
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ SVGElementInstanceList();
+
+ /**
+ *
+ */
+ SVGElementInstanceList(const SVGElementInstanceList &other);
+
+ /**
+ *
+ */
+ ~SVGElementInstanceList();
+
+protected:
+
+ std::vector<SVGElementInstance> items;
+
+
+};
+
+
+
+
+
+
+
+
+//########################################################################
+//########################################################################
+//########################################################################
+//# D O M
+//########################################################################
+//########################################################################
+//########################################################################
+
+
+
+
+
+/*#########################################################################
+## Types
+#########################################################################*/
+
+/**
+ * Bitmasks for has_an interface for SVGElement
+ */
+#define SVG_ANGLE 0x00000001
+#define SVG_ANIMATED_ANGLE 0x00000002
+#define SVG_ANIMATED_BOOLEAN 0x00000004
+#define SVG_ANIMATED_ENUMERATION 0x00000008
+#define SVG_ANIMATED_INTEGER 0x00000010
+#define SVG_ANIMATED_LENGTH 0x00000020
+#define SVG_ANIMATED_LENGTH_LIST 0x00000040
+#define SVG_ANIMATED_NUMBER 0x00000080
+#define SVG_ANIMATED_NUMBER_LIST 0x00000100
+#define SVG_ANIMATED_RECT 0x00000200
+#define SVG_ANIMATED_STRING 0x00000400
+#define SVG_COLOR 0x00000800
+#define SVG_CSS_RULE 0x00001000
+#define SVG_EXTERNAL_RESOURCES_REQUIRED 0x00002000
+#define SVG_FIT_TO_VIEWBOX 0x00004000
+#define SVG_ICCCOLOR 0x00008000
+#define SVG_LANG_SPACE 0x00010000
+#define SVG_LENGTH 0x00020000
+#define SVG_LENGTH_LIST 0x00040000
+#define SVG_LOCATABLE 0x00080000
+#define SVG_NUMBER 0x00100000
+#define SVG_NUMBER_LIST 0x00200000
+#define SVG_RECT 0x00400000
+#define SVG_RENDERING_INTENT 0x00800000
+#define SVG_STRING_LIST 0x01000000
+#define SVG_STYLABLE 0x02000000
+#define SVG_TESTS 0x04000000
+#define SVG_TRANSFORMABLE 0x08000000
+#define SVG_UNIT_TYPES 0x10000000
+#define SVG_URI_REFERENCE 0x20000000
+#define SVG_VIEW_SPEC 0x40000000
+#define SVG_ZOOM_AND_PAN 0x80000000
+
+/**
+ * How many above? Quite handy
+ */
+#define SVG_NR_INTERFACES 32
+
+
+/**
+ * Enumerations for SVGElement types
+ */
+typedef enum
+{
+ SVG_A_ELEMENT = 0,
+ SVG_ALTGLYPH_ELEMENT,
+ SVG_ALTGLYPHDEF_ELEMENT,
+ SVG_ALTGLYPHITEM_ELEMENT,
+ SVG_ANIMATE_ELEMENT,
+ SVG_ANIMATECOLOR_ELEMENT,
+ SVG_ANIMATEMOTION_ELEMENT,
+ SVG_ANIMATETRANSFORM_ELEMENT,
+ SVG_CIRCLE_ELEMENT,
+ SVG_CLIPPATH_ELEMENT,
+ SVG_COLOR_PROFILE_ELEMENT,
+ SVG_CURSOR_ELEMENT,
+ SVG_DEFINITION_SRC_ELEMENT,
+ SVG_DEFS_ELEMENT,
+ SVG_DESC_ELEMENT,
+ SVG_ELLIPSE_ELEMENT,
+ SVG_FEBLEND_ELEMENT,
+ SVG_FECOLORMATRIX_ELEMENT,
+ SVG_FECOMPONENTTRANSFER_ELEMENT,
+ SVG_FECOMPOSITE_ELEMENT,
+ SVG_FECONVOLVEMATRIX_ELEMENT,
+ SVG_FEDIFFUSELIGHTING_ELEMENT,
+ SVG_FEDISPLACEMENTMAP_ELEMENT,
+ SVG_FEDISTANTLIGHT_ELEMENT,
+ SVG_FEFLOOD_ELEMENT,
+ SVG_FEFUNCA_ELEMENT,
+ SVG_FEFUNCB_ELEMENT,
+ SVG_FEFUNCG_ELEMENT,
+ SVG_FEFUNCR_ELEMENT,
+ SVG_FEGAUSSIANBLUR_ELEMENT,
+ SVG_FEIMAGE_ELEMENT,
+ SVG_FEMERGE_ELEMENT,
+ SVG_FEMERGENODE_ELEMENT,
+ SVG_FEMORPHOLOGY_ELEMENT,
+ SVG_FEOFFSET_ELEMENT,
+ SVG_FEPOINTLIGHT_ELEMENT,
+ SVG_FESPECULARLIGHTING_ELEMENT,
+ SVG_FESPOTLIGHT_ELEMENT,
+ SVG_FETILE_ELEMENT,
+ SVG_FETURBULENCE_ELEMENT,
+ SVG_FILTER_ELEMENT,
+ SVG_FONT_ELEMENT,
+ SVG_FONT_FACE_ELEMENT,
+ SVG_FONT_FACE_FORMAT_ELEMENT,
+ SVG_FONT_FACE_NAME_ELEMENT,
+ SVG_FONT_FACE_SRC_ELEMENT,
+ SVG_FONT_FACE_URI_ELEMENT,
+ SVG_FOREIGNOBJECT_ELEMENT,
+ SVG_G_ELEMENT,
+ SVG_GLYPH_ELEMENT,
+ SVG_GLYPHREF_ELEMENT,
+ SVG_HKERN_ELEMENT,
+ SVG_IMAGE_ELEMENT,
+ SVG_LINE_ELEMENT,
+ SVG_LINEARGRADIENT_ELEMENT,
+ SVG_MARKER_ELEMENT,
+ SVG_MASK_ELEMENT,
+ SVG_METADATA_ELEMENT,
+ SVG_MISSING_GLYPH_ELEMENT,
+ SVG_MPATH_ELEMENT,
+ SVG_PATH_ELEMENT,
+ SVG_PATTERN_ELEMENT,
+ SVG_POLYGON_ELEMENT,
+ SVG_POLYLINE_ELEMENT,
+ SVG_RADIALGRADIENT_ELEMENT,
+ SVG_RECT_ELEMENT,
+ SVG_SCRIPT_ELEMENT,
+ SVG_SET_ELEMENT,
+ SVG_STOP_ELEMENT,
+ SVG_STYLE_ELEMENT,
+ SVG_SVG_ELEMENT,
+ SVG_SWITCH_ELEMENT,
+ SVG_SYMBOL_ELEMENT,
+ SVG_TEXT_ELEMENT,
+ SVG_TEXTPATH_ELEMENT,
+ SVG_TITLE_ELEMENT,
+ SVG_TREF_ELEMENT,
+ SVG_TSPAN_ELEMENT,
+ SVG_USE_ELEMENT,
+ SVG_VIEW_ELEMENT,
+ SVG_VKERN_ELEMENT,
+ SVG_MAX_ELEMENT
+} SVGElementType;
+
+
+
+
+/**
+ * Look up the SVG Element type enum for a given string
+ * Return -1 if not found
+ */
+int svgElementStrToEnum(const char *str);
+
+
+/**
+ * Return the string corresponding to a given SVG element type enum
+ * Return "unknown" if not found
+ */
+const char *svgElementEnumToStr(int type);
+
+
+
+
+/*#########################################################################
+## SVGElement
+#########################################################################*/
+
+/**
+ * All of the SVG DOM interfaces that correspond directly to elements in the SVG
+ * language(e.g., the SVGPathElement interface corresponds directly to the
+ * 'path' element in the language) are derivative from base class SVGElement.
+ */
+class SVGElement : public Element
+{
+public:
+
+ //####################################################################
+ //# BASE METHODS FOR SVGElement
+ //####################################################################
+
+ /**
+ * Get the value of the id attribute on the given element.
+ */
+ DOMString getId();
+
+ /**
+ * Set the value of the id attribute on the given element.
+ */
+ void setId(const DOMString &val) throw(DOMException);
+
+ /**
+ * Corresponds to attribute xml:base on the given element.
+ */
+ DOMString getXmlBase();
+
+ /**
+ * Corresponds to attribute xml:base on the given element.
+ */
+ void setXmlBase(const DOMString &val) throw(DOMException);
+
+ /**
+ * The nearest ancestor 'svg' element. Null if the given element is the
+ * outermost 'svg' element.
+ */
+ SVGElementPtr getOwnerSVGElement();
+
+ /**
+ * The element which established the current viewport. Often, the nearest
+ * ancestor 'svg' element. Null if the given element is the outermost 'svg'
+ * element.
+ */
+ SVGElementPtr getViewportElement();
+
+
+
+ //####################################################################
+ //####################################################################
+ //# E L E M E N T S
+ //####################################################################
+ //####################################################################
+
+ //####################################################################
+ //# SVGAElement
+ //####################################################################
+
+
+ /**
+ *
+ */
+ SVGAnimatedValue getTarget();
+
+
+
+ //####################################################################
+ //# SVGAltGlyphElement
+ //####################################################################
+
+
+ /**
+ * Get the attribute glyphRef on the given element.
+ */
+ DOMString getGlyphRef();
+
+ /**
+ * Set the attribute glyphRef on the given element.
+ */
+ void setGlyphRef(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute format on the given element.
+ */
+ DOMString getFormat();
+
+ /**
+ * Set the attribute format on the given element.
+ */
+ void setFormat(const DOMString &val) throw(DOMException);
+
+
+ //####################################################################
+ //# SVGAltGlyphDefElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGAltGlyphItemElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGAnimateElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGAnimateColorElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGAnimateMotionElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGAnimateTransformElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGAnimationElement
+ //####################################################################
+
+
+ /**
+ *
+ */
+ SVGElementPtr getTargetElement();
+
+ /**
+ *
+ */
+ double getStartTime();
+
+ /**
+ *
+ */
+ double getCurrentTime();
+
+ /**
+ *
+ */
+ double getSimpleDuration() throw(DOMException);
+
+
+
+ //####################################################################
+ //# SVGCircleElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute cx on the given 'circle' element.
+ */
+ SVGAnimatedValue getCx();
+
+ /**
+ * Corresponds to attribute cy on the given 'circle' element.
+ */
+ SVGAnimatedValue getCy();
+
+ /**
+ * Corresponds to attribute r on the given 'circle' element.
+ */
+ SVGAnimatedValue getR();
+
+ //####################################################################
+ //# SVGClipPathElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute clipPathUnits on the given 'clipPath' element.
+ * Takes one of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getClipPathUnits();
+
+
+
+ //####################################################################
+ //# SVGColorProfileElement
+ //####################################################################
+
+
+ /**
+ * Get the attribute local on the given element.
+ */
+ DOMString getLocal();
+
+ /**
+ * Set the attribute local on the given element.
+ */
+ void setLocal(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute name on the given element.
+ */
+ DOMString getName();
+
+ /**
+ * Set the attribute name on the given element.
+ */
+ void setName(const DOMString &val) throw(DOMException);
+
+ /**
+ * Set the attribute rendering-intent on the given element.
+ * The type of rendering intent, identified by one of the
+ * SVGRenderingIntent constants.
+ */
+ unsigned short getRenderingIntent();
+
+ /**
+ * Get the attribute rendering-intent on the given element.
+ */
+ void setRenderingIntent(unsigned short val) throw(DOMException);
+
+
+ //####################################################################
+ //# SVGComponentTransferFunctionElement
+ //####################################################################
+
+
+ /**
+ * Component Transfer Types
+ */
+ typedef enum
+ {
+ SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0,
+ SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1,
+ SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2,
+ SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3,
+ SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4,
+ SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5
+ } ComponentTransferType;
+
+
+ /**
+ * Corresponds to attribute type on the given element. Takes one\
+ * of the Component Transfer Types.
+ * -- also in SVGCSSRule
+ */
+ // SVGAnimatedValue getType();
+
+ /**
+ * Corresponds to attribute tableValues on the given element.
+ */
+ SVGAnimatedValueList getTableValues();
+
+ /**
+ * Corresponds to attribute slope on the given element.
+ */
+ SVGAnimatedValue getSlope();
+
+ /**
+ * Corresponds to attribute intercept on the given element.
+ */
+ SVGAnimatedValue getIntercept();
+
+ /**
+ * Corresponds to attribute amplitude on the given element.
+ */
+ SVGAnimatedValue getAmplitude();
+
+ /**
+ * Corresponds to attribute exponent on the given element.
+ */
+ SVGAnimatedValue getExponent();
+
+ /**
+ * Corresponds to attribute offset on the given element.
+ */
+ SVGAnimatedValue getOffset();
+
+ //####################################################################
+ //# SVGCursorElement
+ //####################################################################
+
+ /**
+ * -- also in SVGRect
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * -- also in SVGRect
+ */
+ // SVGAnimatedValue getY();
+
+
+ //####################################################################
+ //# SVGDefinitionSrcElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGDefsElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGDescElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGEllipseElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute cx on the given 'ellipse' element.
+ * -- also in Circle
+ */
+ // SVGAnimatedValue getCx();
+
+ /**
+ * Corresponds to attribute cy on the given 'ellipse' element.
+ * -- also in Circle
+ */
+ // SVGAnimatedValue getCy();
+
+ /**
+ * Corresponds to attribute rx on the given 'ellipse' element.
+ */
+ SVGAnimatedValue getRx();
+
+ /**
+ * Corresponds to attribute ry on the given 'ellipse' element.
+ */
+ SVGAnimatedValue getRy();
+
+
+ //####################################################################
+ //# SVGFEBlendElement
+ //####################################################################
+
+ /**
+ * Blend Mode Types
+ */
+ typedef enum
+ {
+ SVG_FEBLEND_MODE_UNKNOWN = 0,
+ SVG_FEBLEND_MODE_NORMAL = 1,
+ SVG_FEBLEND_MODE_MULTIPLY = 2,
+ SVG_FEBLEND_MODE_SCREEN = 3,
+ SVG_FEBLEND_MODE_DARKEN = 4,
+ SVG_FEBLEND_MODE_LIGHTEN = 5
+ } BlendModeType;
+
+ /**
+ * Corresponds to attribute in on the given 'feBlend' element.
+ */
+ SVGAnimatedValue getIn1();
+
+ /**
+ * Corresponds to attribute in2 on the given 'feBlend' element.
+ */
+ SVGAnimatedValue getIn2();
+
+ /**
+ * Corresponds to attribute mode on the given 'feBlend' element.
+ * Takes one of the Blend Mode Types.
+ */
+ SVGAnimatedValue getMode();
+
+
+ //####################################################################
+ //# SVGFEColorMatrixElement
+ //####################################################################
+
+ /**
+ * Color Matrix Types
+ */
+ typedef enum
+ {
+ SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0,
+ SVG_FECOLORMATRIX_TYPE_MATRIX = 1,
+ SVG_FECOLORMATRIX_TYPE_SATURATE = 2,
+ SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3,
+ SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4
+ } ColorMatrixType;
+
+
+ /**
+ * Corresponds to attribute in on the given 'feColorMatrix' element.
+ * - also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ /**
+ * Corresponds to attribute type on the given 'feColorMatrix' element.
+ * Takes one of the Color Matrix Types.
+ * -- also in CSSRule
+ */
+ // SVGAnimatedValue getType();
+
+ /**
+ * Corresponds to attribute values on the given 'feColorMatrix' element.
+ * Provides access to the contents of the values attribute.
+ */
+ SVGAnimatedValueList getValues();
+
+
+ //####################################################################
+ //# SVGFEComponentTransferElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute in on the given 'feComponentTransfer' element.
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ //####################################################################
+ //# SVGFECompositeElement
+ //####################################################################
+
+ /**
+ * Composite Operators
+ */
+ typedef enum
+ {
+ SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0,
+ SVG_FECOMPOSITE_OPERATOR_OVER = 1,
+ SVG_FECOMPOSITE_OPERATOR_IN = 2,
+ SVG_FECOMPOSITE_OPERATOR_OUT = 3,
+ SVG_FECOMPOSITE_OPERATOR_ATOP = 4,
+ SVG_FECOMPOSITE_OPERATOR_XOR = 5,
+ SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6
+ } CompositeOperatorType;
+
+ /**
+ * Corresponds to attribute in on the given 'feComposite' element.
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ /**
+ * Corresponds to attribute in2 on the given 'feComposite' element.
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn2();
+
+ /**
+ * Corresponds to attribute operator on the given 'feComposite' element.
+ * Takes one of the Composite Operators.
+ */
+ SVGAnimatedValue getOperator();
+
+ /**
+ * Corresponds to attribute k1 on the given 'feComposite' element.
+ */
+ SVGAnimatedValue getK1();
+
+ /**
+ * Corresponds to attribute k2 on the given 'feComposite' element.
+ */
+ SVGAnimatedValue getK2();
+
+ /**
+ * Corresponds to attribute k3 on the given 'feComposite' element.
+ */
+ SVGAnimatedValue getK3();
+
+ /**
+ * Corresponds to attribute k4 on the given 'feComposite' element.
+ */
+ SVGAnimatedValue getK4();
+
+
+ //####################################################################
+ //# SVGFEConvolveMatrixElement
+ //####################################################################
+
+
+ /**
+ * Edge Mode Values
+ */
+ typedef enum
+ {
+ SVG_EDGEMODE_UNKNOWN = 0,
+ SVG_EDGEMODE_DUPLICATE = 1,
+ SVG_EDGEMODE_WRAP = 2,
+ SVG_EDGEMODE_NONE = 3
+ } EdgeModeType;
+
+
+ /**
+ * Corresponds to attribute order on the given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getOrderX();
+
+ /**
+ * Corresponds to attribute order on the given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getOrderY();
+
+ /**
+ * Corresponds to attribute kernelMatrix on the given element.
+ */
+ SVGAnimatedValueList getKernelMatrix();
+
+ /**
+ * Corresponds to attribute divisor on the given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getDivisor();
+
+ /**
+ * Corresponds to attribute bias on the given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getBias();
+
+ /**
+ * Corresponds to attribute targetX on the given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getTargetX();
+
+ /**
+ * Corresponds to attribute targetY on the given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getTargetY();
+
+ /**
+ * Corresponds to attribute edgeMode on the given 'feConvolveMatrix'
+ * element. Takes one of the Edge Mode Types.
+ */
+ SVGAnimatedValue getEdgeMode();
+
+ /**
+ * Corresponds to attribute kernelUnitLength on the
+ * given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getKernelUnitLengthX();
+
+ /**
+ * Corresponds to attribute kernelUnitLength on the given
+ * 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getKernelUnitLengthY();
+
+ /**
+ * Corresponds to attribute preserveAlpha on the
+ * given 'feConvolveMatrix' element.
+ */
+ SVGAnimatedValue getPreserveAlpha();
+
+
+
+ //####################################################################
+ //# SVGFEDiffuseLightingElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute in on the given 'feDiffuseLighting' element.
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ /**
+ * Corresponds to attribute surfaceScale on the given
+ * 'feDiffuseLighting' element.
+ */
+ SVGAnimatedValue getSurfaceScale();
+
+ /**
+ * Corresponds to attribute diffuseConstant on the given
+ * 'feDiffuseLighting' element.
+ */
+ SVGAnimatedValue getDiffuseConstant();
+
+ /**
+ * Corresponds to attribute kernelUnitLength on the given
+ * 'feDiffuseLighting' element.
+ */
+ // SVGAnimatedValue getKernelUnitLengthX();
+
+ /**
+ * Corresponds to attribute kernelUnitLength on the given
+ * 'feDiffuseLighting' element.
+ */
+ // SVGAnimatedValue getKernelUnitLengthY();
+
+
+
+
+ //####################################################################
+ //# SVGFEDisplacementMapElement
+ //####################################################################
+
+
+ /**
+ * Channel Selectors
+ */
+ typedef enum
+ {
+ SVG_CHANNEL_UNKNOWN = 0,
+ SVG_CHANNEL_R = 1,
+ SVG_CHANNEL_G = 2,
+ SVG_CHANNEL_B = 3,
+ SVG_CHANNEL_A = 4
+ } ChannelSelector;
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn2();
+
+
+ /**
+ *
+ */
+ SVGAnimatedValue getScale();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getXChannelSelector();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getYChannelSelector();
+
+ //####################################################################
+ //# SVGFEDistantLightElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute azimuth on the given 'feDistantLight' element.
+ */
+ SVGAnimatedValue getAzimuth();
+
+
+ /**
+ * Corresponds to attribute elevation on the given 'feDistantLight'
+ * element
+ */
+ SVGAnimatedValue getElevation();
+
+
+ //####################################################################
+ //# SVGFEFloodElement
+ //####################################################################
+
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+
+ //####################################################################
+ //# SVGFEFuncAElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFEFuncBElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFEFuncGElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFEFuncRElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGFEGaussianBlurElement
+ //####################################################################
+
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+
+ /**
+ *
+ */
+ SVGAnimatedValue getStdDeviationX();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getStdDeviationY();
+
+
+ /**
+ *
+ */
+ void setStdDeviation(double stdDeviationX, double stdDeviationY);
+
+
+ //####################################################################
+ //# SVGFEImageElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGFEMergeElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFEMergeNodeElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFEMorphologyElement
+ //####################################################################
+
+
+
+ /**
+ * Morphology Operators
+ */
+ typedef enum
+ {
+ SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0,
+ SVG_MORPHOLOGY_OPERATOR_ERODE = 1,
+ SVG_MORPHOLOGY_OPERATOR_DILATE = 2
+ } MorphologyOperatorType;
+
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getOperator();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getRadiusX();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getRadiusY();
+
+ //####################################################################
+ //# SVGFEOffsetElement
+ //####################################################################
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getDx();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getDy();
+
+
+ //####################################################################
+ //# SVGFEPointLightElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x on the given 'fePointLight' element.
+ */
+ SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'fePointLight' element.
+ */
+ SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute z on the given 'fePointLight' element.
+ */
+ SVGAnimatedValue getZ();
+
+ //####################################################################
+ //# SVGFESpecularLightingElement
+ //####################################################################
+
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getSurfaceScale();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getSpecularConstant();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getSpecularExponent();
+
+
+ //####################################################################
+ //# SVGFESpotLightElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x on the given 'feSpotLight' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'feSpotLight' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute z on the given 'feSpotLight' element.
+ */
+ // SVGAnimatedValue getZ();
+
+ /**
+ * Corresponds to attribute pointsAtX on the given 'feSpotLight' element.
+ */
+ SVGAnimatedValue getPointsAtX();
+
+ /**
+ * Corresponds to attribute pointsAtY on the given 'feSpotLight' element.
+ */
+ SVGAnimatedValue getPointsAtY();
+
+ /**
+ * Corresponds to attribute pointsAtZ on the given 'feSpotLight' element.
+ */
+ SVGAnimatedValue getPointsAtZ();
+
+ /**
+ * Corresponds to attribute specularExponent on the
+ * given 'feSpotLight' element.
+ */
+ // SVGAnimatedValue getSpecularExponent();
+
+ /**
+ * Corresponds to attribute limitingConeAngle on the
+ * given 'feSpotLight' element.
+ */
+ SVGAnimatedValue getLimitingConeAngle();
+
+
+ //####################################################################
+ //# SVGFETileElement
+ //####################################################################
+
+
+ /**
+ *
+ * -- also in feBlend
+ */
+ // SVGAnimatedValue getIn1();
+
+
+ //####################################################################
+ //# SVGFETurbulenceElement
+ //####################################################################
+
+
+ /**
+ * Turbulence Types
+ */
+ typedef enum
+ {
+ SVG_TURBULENCE_TYPE_UNKNOWN = 0,
+ SVG_TURBULENCE_TYPE_FRACTALNOISE = 1,
+ SVG_TURBULENCE_TYPE_TURBULENCE = 2
+ } TurbulenceType;
+
+ /**
+ * Stitch Options
+ */
+ typedef enum
+ {
+ SVG_STITCHTYPE_UNKNOWN = 0,
+ SVG_STITCHTYPE_STITCH = 1,
+ SVG_STITCHTYPE_NOSTITCH = 2
+ } StitchOption;
+
+
+
+ /**
+ *
+ */
+ SVGAnimatedValue getBaseFrequencyX();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getBaseFrequencyY();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getNumOctaves();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getSeed();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getStitchTiles();
+
+ /**
+ *
+ */
+ SVGAnimatedValue getType();
+
+
+
+ //####################################################################
+ //# SVGFilterElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute filterUnits on the given 'filter' element. Takes one
+ * of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getFilterUnits();
+
+ /**
+ * Corresponds to attribute primitiveUnits on the given 'filter' element. Takes
+ * one of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getPrimitiveUnits();
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute x on the given 'filter' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute y on the given 'filter' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'filter' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+
+ /**
+ * Corresponds to attribute filterRes on the given 'filter' element.
+ * Contains the X component of attribute filterRes.
+ */
+ SVGAnimatedValue getFilterResX();
+
+ /**
+ * Corresponds to attribute filterRes on the given 'filter' element.
+ * Contains the Y component(possibly computed automatically)
+ * of attribute filterRes.
+ */
+ SVGAnimatedValue getFilterResY();
+
+ /**
+ * Sets the values for attribute filterRes.
+ */
+ void setFilterRes(unsigned long filterResX, unsigned long filterResY);
+
+
+ //####################################################################
+ //# SVGFontElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFontFaceElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFontFaceFormatElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFontFaceNameElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFontFaceSrcElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGFontFaceUriElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGForeignObjectElement
+ //####################################################################
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getHeight();
+
+
+
+ //####################################################################
+ //# SVGGlyphRefElement
+ //####################################################################
+
+
+ /**
+ * Get the attribute glyphRef on the given element.
+ */
+ // DOMString getGlyphRef();
+
+ /**
+ * Set the attribute glyphRef on the given element.
+ */
+ // void setGlyphRef(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute format on the given element.
+ */
+ // DOMString getFormat();
+
+ /**
+ * Set the attribute format on the given element.
+ */
+ // void setFormat(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute x on the given element.
+ */
+ // double getX();
+
+ /**
+ * Set the attribute x on the given element.
+ */
+ // void setX(double val) throw(DOMException);
+
+ /**
+ * Get the attribute y on the given element.
+ */
+ // double getY();
+
+ /**
+ * Set the attribute y on the given element.
+ */
+ // void setY(double val) throw(DOMException);
+
+ /**
+ * Get the attribute dx on the given element.
+ */
+ // double getDx();
+
+ /**
+ * Set the attribute dx on the given element.
+ */
+ // void setDx(double val) throw(DOMException);
+
+ /**
+ * Get the attribute dy on the given element.
+ */
+ // double getDy();
+
+ /**
+ * Set the attribute dy on the given element.
+ */
+ // void setDy(double val) throw(DOMException);
+
+
+ //####################################################################
+ //# SVGGradientElement
+ //####################################################################
+
+
+ /**
+ * Spread Method Types
+ */
+ typedef enum
+ {
+ SVG_SPREADMETHOD_UNKNOWN = 0,
+ SVG_SPREADMETHOD_PAD = 1,
+ SVG_SPREADMETHOD_REFLECT = 2,
+ SVG_SPREADMETHOD_REPEAT = 3
+ } SpreadMethodType;
+
+
+ /**
+ * Corresponds to attribute gradientUnits on the given element.
+ * Takes one of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue &getGradientUnits();
+
+ /**
+ * Corresponds to attribute gradientTransform on the given element.
+ */
+ SVGAnimatedValueList &getGradientTransform();
+
+ /**
+ * Corresponds to attribute spreadMethod on the given element.
+ * One of the Spread Method Types.
+ */
+ SVGAnimatedValue &getSpreadMethod();
+
+
+
+ //####################################################################
+ //# SVGHKernElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGImageElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x on the given 'image' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'image' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute width on the given 'image' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'image' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+
+ /**
+ * Corresponds to attribute preserveAspectRatio on the given element.
+ */
+ // SVGAnimatedPreserveAspectRatio getPreserveAspectRatio();
+
+ //####################################################################
+ //# SVGLinearGradientElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x1 on the given 'linearGradient' element.
+ */
+ // SVGAnimatedValue getX1();
+
+ /**
+ * Corresponds to attribute y1 on the given 'linearGradient' element.
+ */
+ // SVGAnimatedValue getY1();
+
+ /**
+ * Corresponds to attribute x2 on the given 'linearGradient' element.
+ */
+ // SVGAnimatedValue getX2();
+
+ /**
+ * Corresponds to attribute y2 on the given 'linearGradient' element.
+ */
+ // SVGAnimatedValue getY2();
+
+
+
+ //####################################################################
+ //# SVGLineElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x1 on the given 'line' element.
+ */
+ // SVGAnimatedValue getX1();
+
+ /**
+ * Corresponds to attribute y1 on the given 'line' element.
+ */
+ // SVGAnimatedValue getY1();
+
+ /**
+ * Corresponds to attribute x2 on the given 'line' element.
+ */
+ // SVGAnimatedValue getX2();
+
+ /**
+ * Corresponds to attribute y2 on the given 'line' element.
+ */
+ // SVGAnimatedValue getY2();
+
+
+ //####################################################################
+ //# SVGMarkerElement
+ //####################################################################
+
+
+ /**
+ * Marker Unit Types
+ */
+ typedef enum
+ {
+ SVG_MARKERUNITS_UNKNOWN = 0,
+ SVG_MARKERUNITS_USERSPACEONUSE = 1,
+ SVG_MARKERUNITS_STROKEWIDTH = 2
+ } MarkerUnitType;
+
+ /**
+ * Marker Orientation Types
+ */
+ typedef enum
+ {
+ SVG_MARKER_ORIENT_UNKNOWN = 0,
+ SVG_MARKER_ORIENT_AUTO = 1,
+ SVG_MARKER_ORIENT_ANGLE = 2
+ } MarkerOrientationType;
+
+
+ /**
+ * Corresponds to attribute refX on the given 'marker' element.
+ */
+ SVGAnimatedValue getRefX();
+
+ /**
+ * Corresponds to attribute refY on the given 'marker' element.
+ */
+ SVGAnimatedValue getRefY();
+
+ /**
+ * Corresponds to attribute markerUnits on the given 'marker' element.
+ * One of the Marker Units Types defined above.
+ */
+ SVGAnimatedValue getMarkerUnits();
+
+ /**
+ * Corresponds to attribute markerWidth on the given 'marker' element.
+ */
+ SVGAnimatedValue getMarkerWidth();
+
+ /**
+ * Corresponds to attribute markerHeight on the given 'marker' element.
+ */
+ SVGAnimatedValue getMarkerHeight();
+
+ /**
+ * Corresponds to attribute orient on the given 'marker' element.
+ * One of the Marker Orientation Types defined above.
+ */
+ SVGAnimatedValue getOrientType();
+
+ /**
+ * Corresponds to attribute orient on the given 'marker' element.
+ * If markerUnits is SVG_MARKER_ORIENT_ANGLE, the angle value for
+ * attribute orient; otherwise, it will be set to zero.
+ */
+ SVGAnimatedValue getOrientAngle();
+
+
+ /**
+ * Sets the value of attribute orient to 'auto'.
+ */
+ void setOrientToAuto();
+
+ /**
+ * Sets the value of attribute orient to the given angle.
+ */
+ void setOrientToAngle(const SVGAngle &angle);
+
+
+ //####################################################################
+ //# SVGMaskElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute maskUnits on the given 'mask' element. Takes one of
+ * the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getMaskUnits();
+
+ /**
+ * Corresponds to attribute maskContentUnits on the given 'mask' element. Takes
+ * one of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getMaskContentUnits();
+
+ /**
+ * Corresponds to attribute x on the given 'mask' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'mask' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute width on the given 'mask' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'mask' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+ //####################################################################
+ //# SVGMetadataElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGMissingGlyphElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGMPathElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute pathLength on the given 'path' element.
+ */
+ SVGAnimatedValue getPathLength();
+
+ /**
+ * Returns the user agent's computed value for the total length of the path using
+ * the user agent's distance-along-a-path algorithm, as a distance in the current
+ * user coordinate system.
+ */
+ double getTotalLength();
+
+ /**
+ * Returns the(x,y) coordinate in user space which is distance units along the
+ * path, utilizing the user agent's distance-along-a-path algorithm.
+ */
+ SVGPoint getPointAtLength(double distance);
+
+ /**
+ * Returns the index into pathSegList which is distance units along the path,
+ * utilizing the user agent's distance-along-a-path algorithm.
+ */
+ unsigned long getPathSegAtLength(double distance);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegClosePath object.
+ */
+ SVGPathSeg createSVGPathSegClosePath();
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegMovetoAbs object.
+ */
+ SVGPathSeg createSVGPathSegMovetoAbs(double x, double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegMovetoRel object.
+ */
+ SVGPathSeg createSVGPathSegMovetoRel(double x, double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegLinetoAbs object.
+ */
+ SVGPathSeg createSVGPathSegLinetoAbs(double x, double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegLinetoRel object.
+ */
+ SVGPathSeg createSVGPathSegLinetoRel(double x, double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicAbs object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoCubicAbs(double x, double y,
+ double x1, double y1, double x2, double y2);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicRel object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoCubicRel(double x, double y,
+ double x1, double y1, double x2, double y2);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticAbs object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoQuadraticAbs(double x, double y,
+ double x1, double y1);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticRel object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoQuadraticRel(double x, double y,
+ double x1, double y1);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegArcAbs object.
+ */
+ SVGPathSeg createSVGPathSegArcAbs(double x, double y,
+ double r1, double r2, double angle,
+ bool largeArcFlag, bool sweepFlag);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegArcRel object.
+ */
+ SVGPathSeg createSVGPathSegArcRel(double x, double y, double r1,
+ double r2, double angle, bool largeArcFlag,
+ bool sweepFlag);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalAbs object.
+ */
+ SVGPathSeg createSVGPathSegLinetoHorizontalAbs(double x);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalRel object.
+ */
+ SVGPathSeg createSVGPathSegLinetoHorizontalRel(double x);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegLinetoVerticalAbs object.
+ */
+ SVGPathSeg createSVGPathSegLinetoVerticalAbs(double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegLinetoVerticalRel object.
+ */
+ SVGPathSeg createSVGPathSegLinetoVerticalRel(double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothAbs object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoCubicSmoothAbs(double x, double y,
+ double x2, double y2);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothRel object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoCubicSmoothRel(double x, double y,
+ double x2, double y2);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothAbs
+ * object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothAbs(double x, double y);
+
+ /**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothRel
+ * object.
+ */
+ SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothRel(double x, double y);
+
+ //####################################################################
+ //# SVGPathElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGPatternElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute patternUnits on the given 'pattern' element.
+ * Takes one of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getPatternUnits();
+
+ /**
+ * Corresponds to attribute patternContentUnits on the given 'pattern'
+ * element. Takes one of the constants defined in SVGUnitTypes.
+ */
+ SVGAnimatedValue getPatternContentUnits();
+
+ /**
+ * Corresponds to attribute patternTransform on the given 'pattern' element.
+ */
+ SVGAnimatedValueList &getPatternTransform();
+
+ /**
+ * Corresponds to attribute x on the given 'pattern' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ *
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute width on the given 'pattern' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'pattern' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+
+ //####################################################################
+ //# SVGPolyLineElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGPolygonElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGRadialGradientElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute cx on the given 'radialGradient' element.
+ */
+ // SVGAnimatedValue getCx();
+
+
+ /**
+ * Corresponds to attribute cy on the given 'radialGradient' element.
+ */
+ // SVGAnimatedValue getCy();
+
+
+ /**
+ * Corresponds to attribute r on the given 'radialGradient' element.
+ */
+ // SVGAnimatedValue getR();
+
+
+ /**
+ * Corresponds to attribute fx on the given 'radialGradient' element.
+ */
+ SVGAnimatedValue getFx();
+
+
+ /**
+ * Corresponds to attribute fy on the given 'radialGradient' element.
+ */
+ SVGAnimatedValue getFy();
+
+
+ //####################################################################
+ //# SVGRectElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x on the given 'rect' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'rect' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute width on the given 'rect' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'rect' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+
+ /**
+ * Corresponds to attribute rx on the given 'rect' element.
+ */
+ // SVGAnimatedValue getRx();
+
+ /**
+ * Corresponds to attribute ry on the given 'rect' element.
+ */
+ // SVGAnimatedValue getRy();
+
+
+ //####################################################################
+ //# SVGScriptElement
+ //####################################################################
+
+ /**
+ *
+ */
+ // DOMString getType();
+
+ /**
+ *
+ */
+ // void setType(const DOMString &val) throw(DOMException);
+
+ //####################################################################
+ //# SVGSetElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGStopElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute offset on the given 'stop' element.
+ */
+ // SVGAnimatedValue getOffset();
+
+
+ //####################################################################
+ //# SVGStyleElement
+ //####################################################################
+
+ /**
+ * Get the attribute xml:space on the given element.
+ */
+ DOMString getXmlspace();
+
+ /**
+ * Set the attribute xml:space on the given element.
+ */
+ void setXmlspace(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute type on the given 'style' element.
+ */
+ // DOMString getType();
+
+ /**
+ * Set the attribute type on the given 'style' element.
+ */
+ // void setType(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute media on the given 'style' element.
+ */
+ DOMString getMedia();
+
+ /**
+ * Set the attribute media on the given 'style' element.
+ */
+ void setMedia(const DOMString &val) throw(DOMException);
+
+ /**
+ * Get the attribute title on the given 'style' element.
+ */
+ DOMString getTitle();
+
+ /**
+ * Set the attribute title on the given 'style' element.
+ */
+ void setTitle(const DOMString &val) throw(DOMException);
+
+ //####################################################################
+ //# SVGSymbolElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGSVGElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x on the given 'svg' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'svg' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute width on the given 'svg' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'svg' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+ /**
+ * Get the attribute contentScriptType on the given 'svg' element.
+ */
+ DOMString getContentScriptType();
+
+ /**
+ * Set the attribute contentScriptType on the given 'svg' element.
+ */
+ void setContentScriptType(const DOMString &val) throw(DOMException);
+
+
+ /**
+ * Get the attribute contentStyleType on the given 'svg' element.
+ */
+ DOMString getContentStyleType();
+
+ /**
+ * Set the attribute contentStyleType on the given 'svg' element.
+ */
+ void setContentStyleType(const DOMString &val) throw(DOMException);
+
+ /**
+ * The position and size of the viewport(implicit or explicit) that corresponds
+ * to this 'svg' element. When the user agent is actually rendering the content,
+ * then the position and size values represent the actual values when rendering.
+ * The position and size values are unitless values in the coordinate system of
+ * the parent element. If no parent element exists(i.e., 'svg' element
+ * represents the root of the document tree), if this SVG document is embedded as
+ * part of another document(e.g., via the HTML 'object' element), then the
+ * position and size are unitless values in the coordinate system of the parent
+ * document.(If the parent uses CSS or XSL layout, then unitless values
+ * represent pixel units for the current CSS or XSL viewport, as described in the
+ * CSS2 specification.) If the parent element does not have a coordinate system,
+ * then the user agent should provide reasonable default values for this attribute.
+ * */
+ SVGRect getViewport();
+
+ /**
+ * Size of a pixel units(as defined by CSS2) along the x-axis of the viewport,
+ * which represents a unit somewhere in the range of 70dpi to 120dpi, and, on
+ * systems that support this, might actually match the characteristics of the
+ * target medium. On systems where it is impossible to know the size of a pixel,
+ * a suitable default pixel size is provided.
+ */
+ double getPixelUnitToMillimeterX();
+
+ /**
+ * Corresponding size of a pixel unit along the y-axis of the viewport.
+ */
+ double getPixelUnitToMillimeterY();
+
+ /**
+ * User interface(UI) events in DOM Level 2 indicate the screen positions at
+ * which the given UI event occurred. When the user agent actually knows the
+ * physical size of a "screen unit", this attribute will express that information;
+ * otherwise, user agents will provide a suitable default value such as .28mm.
+ */
+ double getScreenPixelToMillimeterX();
+
+ /**
+ * Corresponding size of a screen pixel along the y-axis of the viewport.
+ */
+ double getScreenPixelToMillimeterY();
+
+
+ /**
+ * The initial view(i.e., before magnification and panning) of the current
+ * innermost SVG document fragment can be either the "standard" view(i.e., based
+ * on attributes on the 'svg' element such as fitBoxToViewport) or to a "custom"
+ * view(i.e., a hyperlink into a particular 'view' or other element - see
+ * Linking into SVG content: URI fragments and SVG views). If the initial view is
+ * the "standard" view, then this attribute is false. If the initial view is a
+ * "custom" view, then this attribute is true.
+ */
+ bool getUseCurrentView();
+
+ /**
+ * Set the value above
+ */
+ void setUseCurrentView(bool val) throw(DOMException);
+
+ /**
+ * The definition of the initial view(i.e., before magnification and panning) of
+ * the current innermost SVG document fragment. The meaning depends on the
+ * situation:
+ *
+ * * If the initial view was a "standard" view, then:
+ * o the values for viewBox, preserveAspectRatio and zoomAndPan within
+ * currentView will match the values for the corresponding DOM attributes that
+ * are on SVGSVGElement directly
+ * o the values for transform and viewTarget within currentView will be null
+ * * If the initial view was a link into a 'view' element, then:
+ * o the values for viewBox, preserveAspectRatio and zoomAndPan within
+ * currentView will correspond to the corresponding attributes for the given
+ * 'view' element
+ * o the values for transform and viewTarget within currentView will be null
+ * * If the initial view was a link into another element(i.e., other than a
+ * 'view'), then:
+ * o the values for viewBox, preserveAspectRatio and zoomAndPan within
+ * currentView will match the values for the corresponding DOM attributes that
+ * are on SVGSVGElement directly for the closest ancestor 'svg' element
+ * o the values for transform within currentView will be null
+ * o the viewTarget within currentView will represent the target of the link
+ * * If the initial view was a link into the SVG document fragment using an SVG
+ * view specification fragment identifier(i.e., #svgView(...)), then:
+ * o the values for viewBox, preserveAspectRatio, zoomAndPan, transform and
+ * viewTarget within currentView will correspond to the values from the SVG view
+ * specification fragment identifier
+ *
+ */
+ SVGViewSpec getCurrentView();
+
+
+ /**
+ * This attribute indicates the current scale factor relative to the initial view
+ * to take into account user magnification and panning operations, as described
+ * under Magnification and panning. DOM attributes currentScale and
+ * currentTranslate are equivalent to the 2x3 matrix [a b c d e f] =
+ * [currentScale 0 0 currentScale currentTranslate.x currentTranslate.y]. If
+ * "magnification" is enabled(i.e., zoomAndPan="magnify"), then the effect is as
+ * if an extra transformation were placed at the outermost level on the SVG
+ * document fragment(i.e., outside the outermost 'svg' element).
+ */
+ double getCurrentScale();
+
+ /**
+ * Set the value above.
+ */
+ void setCurrentScale(double val) throw(DOMException);
+
+ /**
+ * The corresponding translation factor that takes into account
+ * user "magnification".
+ */
+ SVGPoint getCurrentTranslate();
+
+ /**
+ * Takes a time-out value which indicates that redraw shall not occur until:(a)
+ * the corresponding unsuspendRedraw(suspend_handle_id) call has been made,(b)
+ * an unsuspendRedrawAll() call has been made, or(c) its timer has timed out. In
+ * environments that do not support interactivity(e.g., print media), then
+ * redraw shall not be suspended. suspend_handle_id =
+ * suspendRedraw(max_wait_milliseconds) and unsuspendRedraw(suspend_handle_id)
+ * must be packaged as balanced pairs. When you want to suspend redraw actions as
+ * a collection of SVG DOM changes occur, then precede the changes to the SVG DOM
+ * with a method call similar to suspend_handle_id =
+ * suspendRedraw(max_wait_milliseconds) and follow the changes with a method call
+ * similar to unsuspendRedraw(suspend_handle_id). Note that multiple
+ * suspendRedraw calls can be used at once and that each such method call is
+ * treated independently of the other suspendRedraw method calls.
+ */
+ unsigned long suspendRedraw(unsigned long max_wait_milliseconds);
+
+ /**
+ * Cancels a specified suspendRedraw() by providing a unique suspend_handle_id.
+ */
+ void unsuspendRedraw(unsigned long suspend_handle_id) throw(DOMException);
+
+ /**
+ * Cancels all currently active suspendRedraw() method calls. This method is most
+ * useful at the very end of a set of SVG DOM calls to ensure that all pending
+ * suspendRedraw() method calls have been cancelled.
+ */
+ void unsuspendRedrawAll();
+
+ /**
+ * In rendering environments supporting interactivity, forces the user agent to
+ * immediately redraw all regions of the viewport that require updating.
+ */
+ void forceRedraw();
+
+ /**
+ * Suspends(i.e., pauses) all currently running animations that are defined
+ * within the SVG document fragment corresponding to this 'svg' element, causing
+ * the animation clock corresponding to this document fragment to stand still
+ * until it is unpaused.
+ */
+ void pauseAnimations();
+
+ /**
+ * Unsuspends(i.e., unpauses) currently running animations that are defined
+ * within the SVG document fragment, causing the animation clock to continue from
+ * the time at which it was suspended.
+ */
+ void unpauseAnimations();
+
+ /**
+ * Returns true if this SVG document fragment is in a paused state.
+ */
+ bool animationsPaused();
+
+ /**
+ * Returns the current time in seconds relative to the start time for
+ * the current SVG document fragment.
+ */
+ // double getCurrentTime();
+
+ /**
+ * Adjusts the clock for this SVG document fragment, establishing
+ * a new current time.
+ */
+ void setCurrentTime(double seconds);
+
+ /**
+ * Returns the list of graphics elements whose rendered content intersects the
+ * supplied rectangle, honoring the 'pointer-events' property value on each
+ * candidate graphics element.
+ */
+ NodeList getIntersectionList(const SVGRect &rect,
+ const SVGElementPtr referenceElement);
+
+ /**
+ * Returns the list of graphics elements whose rendered content is entirely
+ * contained within the supplied rectangle, honoring the 'pointer-events'
+ * property value on each candidate graphics element.
+ */
+ NodeList getEnclosureList(const SVGRect &rect,
+ const SVGElementPtr referenceElement);
+
+ /**
+ * Returns true if the rendered content of the given element intersects the
+ * supplied rectangle, honoring the 'pointer-events' property value on each
+ * candidate graphics element.
+ */
+ bool checkIntersection(const SVGElementPtr element, const SVGRect &rect);
+
+ /**
+ * Returns true if the rendered content of the given element is entirely
+ * contained within the supplied rectangle, honoring the 'pointer-events'
+ * property value on each candidate graphics element.
+ */
+ bool checkEnclosure(const SVGElementPtr element, const SVGRect &rect);
+
+ /**
+ * Unselects any selected objects, including any selections of text
+ * strings and type-in bars.
+ */
+ void deselectAll();
+
+ /**
+ * Creates an SVGNumber object outside of any document trees. The object
+ * is initialized to a value of zero.
+ */
+ SVGNumber createSVGNumber();
+
+ /**
+ * Creates an SVGLength object outside of any document trees. The object
+ * is initialized to the value of 0 user units.
+ */
+ SVGLength createSVGLength();
+
+ /**
+ * Creates an SVGAngle object outside of any document trees. The object
+ * is initialized to the value 0 degrees(unitless).
+ */
+ SVGAngle createSVGAngle();
+
+ /**
+ * Creates an SVGPoint object outside of any document trees. The object
+ * is initialized to the point(0,0) in the user coordinate system.
+ */
+ SVGPoint createSVGPoint();
+
+ /**
+ * Creates an SVGMatrix object outside of any document trees. The object
+ * is initialized to the identity matrix.
+ */
+ SVGMatrix createSVGMatrix();
+
+ /**
+ * Creates an SVGRect object outside of any document trees. The object
+ * is initialized such that all values are set to 0 user units.
+ */
+ SVGRect createSVGRect();
+
+ /**
+ * Creates an SVGTransform object outside of any document trees.
+ * The object is initialized to an identity matrix transform
+ * (SVG_TRANSFORM_MATRIX).
+ */
+ SVGTransform createSVGTransform();
+
+ /**
+ * Creates an SVGTransform object outside of any document trees.
+ * The object is initialized to the given matrix transform
+ * (i.e., SVG_TRANSFORM_MATRIX).
+ */
+ SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix);
+
+ /**
+ * Searches this SVG document fragment(i.e., the search is restricted to a
+ * subset of the document tree) for an Element whose id is given by elementId. If
+ * an Element is found, that Element is returned. If no such element exists,
+ * returns null. Behavior is not defined if more than one element has this id.
+ */
+ ElementPtr getElementById(const DOMString& elementId);
+
+
+ //####################################################################
+ //# SVGTextElement
+ //####################################################################
+
+
+ //####################################################################
+ //# SVGTextContentElement
+ //####################################################################
+
+
+ /**
+ * lengthAdjust Types
+ */
+ typedef enum
+ {
+ LENGTHADJUST_UNKNOWN = 0,
+ LENGTHADJUST_SPACING = 1,
+ LENGTHADJUST_SPACINGANDGLYPHS = 2
+ } LengthAdjustType;
+
+
+ /**
+ * Corresponds to attribute textLength on the given element.
+ */
+ SVGAnimatedValue getTextLength();
+
+
+ /**
+ * Corresponds to attribute lengthAdjust on the given element. The value must be
+ * one of the length adjust constants specified above.
+ */
+ SVGAnimatedValue getLengthAdjust();
+
+
+ /**
+ * Returns the total number of characters to be rendered within the current
+ * element. Includes characters which are included via a 'tref' reference.
+ */
+ long getNumberOfChars();
+
+ /**
+ * The total sum of all of the advance values from rendering all of the
+ * characters within this element, including the advance value on the glyphs
+ *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
+ * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
+ * elements. For non-rendering environments, the user agent shall make reasonable
+ * assumptions about glyph metrics.
+ */
+ double getComputedTextLength();
+
+ /**
+ * The total sum of all of the advance values from rendering the specified
+ * substring of the characters, including the advance value on the glyphs
+ *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
+ * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
+ * elements. For non-rendering environments, the user agent shall make reasonable
+ * assumptions about glyph metrics.
+ */
+ double getSubStringLength(unsigned long charnum, unsigned long nchars)
+ throw(DOMException);
+
+ /**
+ * Returns the current text position before rendering the character in the user
+ * coordinate system for rendering the glyph(s) that correspond to the specified
+ * character. The current text position has already taken into account the
+ * effects of any inter-character adjustments due to properties 'kerning',
+ * 'letter-spacing' and 'word-spacing' and adjustments due to attributes x, y, dx
+ * and dy. If multiple consecutive characters are rendered inseparably(e.g., as
+ * a single glyph or a sequence of glyphs), then each of the inseparable
+ * characters will return the start position for the first glyph.
+ */
+ SVGPoint getStartPositionOfChar(unsigned long charnum) throw(DOMException);
+
+ /**
+ * Returns the current text position after rendering the character in the user
+ * coordinate system for rendering the glyph(s) that correspond to the specified
+ * character. This current text position does not take into account the effects
+ * of any inter-character adjustments to prepare for the next character, such as
+ * properties 'kerning', 'letter-spacing' and 'word-spacing' and adjustments due
+ * to attributes x, y, dx and dy. If multiple consecutive characters are rendered
+ * inseparably(e.g., as a single glyph or a sequence of glyphs), then each of
+ * the inseparable characters will return the end position for the last glyph.
+ */
+ SVGPoint getEndPositionOfChar(unsigned long charnum) throw(DOMException);
+
+ /**
+ * Returns a tightest rectangle which defines the minimum and maximum X and Y
+ * values in the user coordinate system for rendering the glyph(s) that
+ * correspond to the specified character. The calculations assume that all glyphs
+ * occupy the full standard glyph cell for the font. If multiple consecutive
+ * characters are rendered inseparably(e.g., as a single glyph or a sequence of
+ * glyphs), then each of the inseparable characters will return the same extent.
+ */
+ SVGRect getExtentOfChar(unsigned long charnum) throw(DOMException);
+
+ /**
+ * Returns the rotation value relative to the current user coordinate system used
+ * to render the glyph(s) corresponding to the specified character. If multiple
+ * glyph(s) are used to render the given character and the glyphs each have
+ * different rotations(e.g., due to text-on-a-path), the user agent shall return
+ * an average value(e.g., the rotation angle at the midpoint along the path for
+ * all glyphs used to render this character). The rotation value represents the
+ * rotation that is supplemental to any rotation due to properties
+ * 'glyph-orientation-horizontal' and 'glyph-orientation-vertical'; thus, any
+ * glyph rotations due to these properties are not included into the returned
+ * rotation value. If multiple consecutive characters are rendered inseparably
+ *(e.g., as a single glyph or a sequence of glyphs), then each of the
+ * inseparable characters will return the same rotation value.
+ */
+ double getRotationOfChar(unsigned long charnum) throw(DOMException);
+
+ /**
+ * Returns the index of the character whose corresponding glyph cell bounding box
+ * contains the specified point. The calculations assume that all glyphs occupy
+ * the full standard glyph cell for the font. If no such character exists, a
+ * value of -1 is returned. If multiple such characters exist, the character
+ * within the element whose glyphs were rendered last(i.e., take into account
+ * any reordering such as for bidirectional text) is used. If multiple
+ * consecutive characters are rendered inseparably(e.g., as a single glyph or a
+ * sequence of glyphs), then the user agent shall allocate an equal percentage of
+ * the text advance amount to each of the contributing characters in determining
+ * which of the characters is chosen.
+ */
+ long getCharNumAtPosition(const SVGPoint &point);
+
+ /**
+ * Causes the specified substring to be selected just as if the user
+ * selected the substring interactively.
+ */
+ void selectSubString(unsigned long charnum, unsigned long nchars)
+ throw(DOMException);
+
+
+
+
+
+ //####################################################################
+ //# SVGTextPathElement
+ //####################################################################
+
+
+ /**
+ * textPath Method Types
+ */
+ typedef enum
+ {
+ TEXTPATH_METHODTYPE_UNKNOWN = 0,
+ TEXTPATH_METHODTYPE_ALIGN = 1,
+ TEXTPATH_METHODTYPE_STRETCH = 2
+ } TextPathMethodType;
+
+ /**
+ * textPath Spacing Types
+ */
+ typedef enum
+ {
+ TEXTPATH_SPACINGTYPE_UNKNOWN = 0,
+ TEXTPATH_SPACINGTYPE_AUTO = 1,
+ TEXTPATH_SPACINGTYPE_EXACT = 2
+ } TextPathSpacingType;
+
+
+ /**
+ * Corresponds to attribute startOffset on the given 'textPath' element.
+ */
+ SVGAnimatedValue getStartOffset();
+
+ /**
+ * Corresponds to attribute method on the given 'textPath' element. The value
+ * must be one of the method type constants specified above.
+ */
+ SVGAnimatedValue getMethod();
+
+ /**
+ * Corresponds to attribute spacing on the given 'textPath' element.
+ * The value must be one of the spacing type constants specified above.
+ */
+ SVGAnimatedValue getSpacing();
+
+
+ //####################################################################
+ //# SVGTextPositioningElement
+ //####################################################################
+
+
+ /**
+ * Corresponds to attribute x on the given element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute dx on the given element.
+ */
+ // SVGAnimatedValue getDx();
+
+ /**
+ * Corresponds to attribute dy on the given element.
+ */
+ // SVGAnimatedValue getDy();
+
+
+ /**
+ * Corresponds to attribute rotate on the given element.
+ */
+ SVGAnimatedValueList getRotate();
+
+
+ //####################################################################
+ //# SVGTitleElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGTRefElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGTSpanElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGSwitchElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGUseElement
+ //####################################################################
+
+ /**
+ * Corresponds to attribute x on the given 'use' element.
+ */
+ // SVGAnimatedValue getX();
+
+ /**
+ * Corresponds to attribute y on the given 'use' element.
+ */
+ // SVGAnimatedValue getY();
+
+ /**
+ * Corresponds to attribute width on the given 'use' element.
+ */
+ // SVGAnimatedValue getWidth();
+
+ /**
+ * Corresponds to attribute height on the given 'use' element.
+ */
+ // SVGAnimatedValue getHeight();
+
+ /**
+ * The root of the "instance tree". See description of SVGElementInstance for
+ * a discussion on the instance tree.
+ * */
+ SVGElementInstance getInstanceRoot();
+
+ /**
+ * If the 'href' attribute is being animated, contains the current animated root
+ * of the "instance tree". If the 'href' attribute is not currently being
+ * animated, contains the same value as 'instanceRoot'. The root of the "instance
+ * tree". See description of SVGElementInstance for a discussion on the instance
+ * tree.
+ */
+ SVGElementInstance getAnimatedInstanceRoot();
+
+ //####################################################################
+ //# SVGVKernElement
+ //####################################################################
+
+ //####################################################################
+ //# SVGViewElement
+ //####################################################################
+
+
+ /**
+ *
+ */
+ SVGValueList getViewTarget();
+
+
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+
+ /**
+ *
+ */
+ ~SVGElement() {}
+
+
+};
+
+
+
+/*#########################################################################
+## SVGDocument
+#########################################################################*/
+
+/**
+ * When an 'svg' element is embedded inline as a component of a document from
+ * another namespace, such as when an 'svg' element is embedded inline within an
+ * XHTML document [XHTML], then an SVGDocument object will not exist; instead,
+ * the root object in the document object hierarchy will be a Document object of
+ * a different type, such as an HTMLDocument object.
+ *
+ * However, an SVGDocument object will indeed exist when the root element of the
+ * XML document hierarchy is an 'svg' element, such as when viewing a stand-alone
+ * SVG file(i.e., a file with MIME type "image/svg+xml"). In this case, the
+ * SVGDocument object will be the root object of the document object model
+ * hierarchy.
+ *
+ * In the case where an SVG document is embedded by reference, such as when an
+ * XHTML document has an 'object' element whose href attribute references an SVG
+ * document(i.e., a document whose MIME type is "image/svg+xml" and whose root
+ * element is thus an 'svg' element), there will exist two distinct DOM
+ * hierarchies. The first DOM hierarchy will be for the referencing document
+ *(e.g., an XHTML document). The second DOM hierarchy will be for the referenced
+ * SVG document. In this second DOM hierarchy, the root object of the document
+ * object model hierarchy is an SVGDocument object.
+ */
+class SVGDocument : public Document,
+ public events::DocumentEvent
+{
+public:
+
+
+ /**
+ * The title of a document as specified by the title sub-element of the 'svg'
+ * root element(i.e., <svg><title>Here is the title</title>...</svg>)
+ */
+ DOMString getTitle();
+
+ /**
+ * Returns the URI of the page that linked to this page. The value is an empty
+ * string if the user navigated to the page directly(not through a link, but,
+ * for example, via a bookmark).
+ */
+ DOMString getReferrer();
+
+ /**
+ * The domain name of the server that served the document, or a null string if
+ * the server cannot be identified by a domain name.
+ */
+ DOMString getDomain();
+
+ /**
+ * The complete URI of the document.
+ */
+ DOMString getURL();
+
+ /**
+ * The root 'svg' element in the document hierarchy.
+ */
+ SVGElementPtr getRootElement();
+
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ ~SVGDocument() {}
+
+};
+
+
+
+/*#########################################################################
+## GetSVGDocument
+#########################################################################*/
+
+/**
+ * In the case where an SVG document is embedded by reference, such as when an
+ * XHTML document has an 'object' element whose href(or equivalent) attribute
+ * references an SVG document(i.e., a document whose MIME type is
+ * "image/svg+xml" and whose root element is thus an 'svg' element), the SVG user
+ * agent is required to implement the GetSVGDocument interface for the element
+ * which references the SVG document(e.g., the HTML 'object' or comparable
+ * referencing elements).
+ */
+class GetSVGDocument
+{
+public:
+
+ /**
+ * Returns the SVGDocument object for the referenced SVG document.
+ */
+ SVGDocumentPtr getSVGDocument()
+ throw(DOMException);
+
+ //##################
+ //# Non-API methods
+ //##################
+
+ /**
+ *
+ */
+ ~GetSVGDocument() {}
+
+};
+
+
+
+
+
+
+
+} //namespace svg
+} //namespace dom
+} //namespace w3c
+} //namespace org
+
+#endif // __SVG_H__
+/*#########################################################################
+## E N D O F F I L E
+#########################################################################*/
+
diff --git a/src/dom/work/svg2.cpp b/src/dom/work/svg2.cpp
index acbdf2a00..f0da61e09 100644
--- a/src/dom/work/svg2.cpp
+++ b/src/dom/work/svg2.cpp
@@ -1,7049 +1,7049 @@
-/**
- * Phoebe DOM Implementation.
- *
- * This is a C++ approximation of the W3C DOM model, which follows
- * fairly closely the specifications in the various .idl files, copies of
- * which are provided for reference. Most important is this one:
- *
- * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
- *
- * Authors:
- * Bob Jamison
- *
- * Copyright(C) 2005-2008 Bob Jamison
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or(at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * =======================================================================
- * NOTES
- *
- * This API follows:
- * http://www.w3.org/TR/SVG11/svgdom.html
- *
- * This file defines the main SVG-DOM Node types. Other non-Node types are
- * defined in svgtypes.h.
- *
- */
-
-#include "svg.h"
-
-#include <math.h>
-
-
-namespace org
-{
-namespace w3c
-{
-namespace dom
-{
-namespace svg
-{
-
-
-
-//########################################################################
-//########################################################################
-//########################################################################
-//# I N T E R F A C E S
-//########################################################################
-//########################################################################
-//########################################################################
-
-
-
-/*#########################################################################
-## SVGMatrix
-#########################################################################*/
-
-/**
- *
- */
-double SVGMatrix::getA()
-{
- return a;
-}
-
-/**
- *
- */
-void SVGMatrix::setA(double val) throw (DOMException)
-{
- a = val;
-}
-
-/**
- *
- */
-double SVGMatrix::getB()
-{
- return b;
-}
-
-/**
- *
- */
-void SVGMatrix::setB(double val) throw (DOMException)
-{
- b = val;
-}
-
-/**
- *
- */
-double SVGMatrix::getC()
-{
- return c;
-}
-
-/**
- *
- */
-void SVGMatrix::setC(double val) throw (DOMException)
-{
- c = val;
-}
-
-/**
- *
- */
-double SVGMatrix::getD()
-{
- return d;
-}
-
-/**
- *
- */
-void SVGMatrix::setD(double val) throw (DOMException)
-{
- d = val;
-}
-
-/**
- *
- */
-double SVGMatrix::getE()
-{
- return e;
-}
-
-/**
- *
- */
-void SVGMatrix::setE(double val) throw (DOMException)
-{
- e = val;
-}
-
-/**
- *
- */
-double SVGMatrix::getF()
-{
- return f;
-}
-
-/**
- *
- */
-void SVGMatrix::setF(double val) throw (DOMException)
-{
- f = val;
-}
-
-
-/**
- * Return the result of postmultiplying this matrix with another.
- */
-SVGMatrix SVGMatrix::multiply(const SVGMatrix &other)
-{
- SVGMatrix result;
- result.a = a * other.a + c * other.b;
- result.b = b * other.a + d * other.b;
- result.c = a * other.c + c * other.d;
- result.d = b * other.c + d * other.d;
- result.e = a * other.e + c * other.f + e;
- result.f = b * other.e + d * other.f + f;
- return result;
-}
-
-/**
- * Calculate the inverse of this matrix
- *
- */
-SVGMatrix SVGMatrix::inverse() throw (SVGException)
-{
- /*###########################################
- The determinant of a 3x3 matrix E
- (let's use our own notation for a bit)
-
- A B C
- D E F
- G H I
- is
- AEI - AFH - BDI + BFG + CDH - CEG
-
- Since in our affine transforms, G and H==0 and I==1,
- this reduces to:
- AE - BD
- In SVG's naming scheme, that is: a * d - c * b . SIMPLE!
-
- In a similar method of attack, SVG's adjunct matrix is:
-
- d -c cf-ed
- -b a eb-af
- 0 0 ad-cb
-
- To get the inverse matrix, we divide the adjunct matrix by
- the determinant. Notice that (ad-cb)/(ad-cb)==1. Very cool.
- So what we end up with is this:
-
- a = d/(ad-cb) c = -c/(ad-cb) e = (cf-ed)/(ad-cb)
- b = -b/(ad-cb) d = a/(ad-cb) f = (eb-af)/(ad-cb)
-
- (Since this would be in all SVG-DOM implementations,
- somebody needed to document this! ^^)
- #############################################*/
-
- SVGMatrix result;
- double determinant = a * d - c * b;
- if (determinant < 1.0e-18)//invertible?
- {
- result.identity();//cop out
- return result;
- }
-
- double idet = 1.0 / determinant;
- result.a = d * idet;
- result.b = -b * idet;
- result.c = -c * idet;
- result.d = a * idet;
- result.e = (c*f - e*d) * idet;
- result.f = (e*b - a*f) * idet;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | 1 0 x |
- * | 0 1 y |
- * | 0 0 1 |
- *
- */
-SVGMatrix SVGMatrix::translate(double x, double y)
-{
- SVGMatrix result;
- result.a = a;
- result.b = b;
- result.c = c;
- result.d = d;
- result.e = a * x + c * y + e;
- result.f = b * x + d * y + f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | scale 0 0 |
- * | 0 scale 0 |
- * | 0 0 1 |
- *
- */
-:SVGMatrix SVGMatrix:scale(double scale)
-{
- SVGMatrix result;
- result.a = a * scale;
- result.b = b * scale;
- result.c = c * scale;
- result.d = d * scale;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | scaleX 0 0 |
- * | 0 scaleY 0 |
- * | 0 0 1 |
- *
- */
-SVGMatrix SVGMatrix::scaleNonUniform(double scaleX,
- double scaleY)
-{
- SVGMatrix result;
- result.a = a * scaleX;
- result.b = b * scaleX;
- result.c = c * scaleY;
- result.d = d * scaleY;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | cos(a) -sin(a) 0 |
- * | sin(a) cos(a) 0 |
- * | 0 0 1 |
- *
- */
-SVGMatrix SVGMatrix::rotate (double angle)
-{
- double sina = sin(angle);
- double msina = -sina;
- double cosa = cos(angle);
- SVGMatrix result;
- result.a = a * cosa + c * sina;
- result.b = b * cosa + d + sina;
- result.c = a * msina + c * cosa;
- result.d = b * msina + d * cosa;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | cos(a) -sin(a) 0 |
- * | sin(a) cos(a) 0 |
- * | 0 0 1 |
- * In this case, angle 'a' is computed as the artangent
- * of the slope y/x . It is negative if the slope is negative.
- */
-SVGMatrix SVGMatrix::rotateFromVector(double x, double y)
- throw (SVGException)
-{
- double angle = atan(y / x);
- if (y < 0.0)
- angle = -angle;
- SVGMatrix result;
- double sina = sin(angle);
- double msina = -sina;
- double cosa = cos(angle);
- result.a = a * cosa + c * sina;
- result.b = b * cosa + d + sina;
- result.c = a * msina + c * cosa;
- result.d = b * msina + d * cosa;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | -1 0 0 |
- * | 0 1 0 |
- * | 0 0 1 |
- *
- */
-SVGMatrix SVGMatrix::flipX()
-{
- SVGMatrix result;
- result.a = -a;
- result.b = -b;
- result.c = c;
- result.d = d;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | 1 0 0 |
- * | 0 -1 0 |
- * | 0 0 1 |
- *
- */
-SVGMatrix SVGMatrix::flipY()
-{
- SVGMatrix result;
- result.a = a;
- result.b = b;
- result.c = -c;
- result.d = -d;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * | 1 tan(a) 0 |
- * | 0 1 0 |
- * | 0 0 1 |
- *
- */
-SVGMatrix SVGMatrix::skewX(double angle)
-{
- double tana = tan(angle);
- SVGMatrix result;
- result.a = a;
- result.b = b;
- result.c = a * tana + c;
- result.d = b * tana + d;
- result.e = e;
- result.f = f;
- return result;
-}
-
-/**
- * Equivalent to multiplying by:
- * | 1 0 0 |
- * | tan(a) 1 0 |
- * | 0 0 1 |
- *
- */
-SVGMatrix::SVGMatrix SVGMatrix::skewY(double angle)
-{
- double tana = tan(angle);
- SVGMatrix result;
- result.a = a + c * tana;
- result.b = b + d * tana;
- result.c = c;
- result.d = d;
- result.e = e;
- result.f = f;
- return result;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGMatrix::SVGMatrix()
-{
- identity();
-}
-
-/**
- *
- */
-SVGMatrix::SVGMatrix(double aArg, double bArg, double cArg,
- double dArg, double eArg, double fArg)
-{
- a = aArg; b = bArg; c = cArg;
- d = dArg; e = eArg; f = fArg;
-}
-
-/**
- * Copy constructor
- */
-SVGMatrix::SVGMatrix(const SVGMatrix &other)
-{
- a = other.a;
- b = other.b;
- c = other.c;
- d = other.d;
- e = other.e;
- f = other.f;
-}
-
-
-
-/**
- *
- */
-SVGMatrix::~SVGMatrix()
-{
-}
-
-/*
- * Set to the identity matrix
- */
-void SVGMatrix::identity()
-{
- a = 1.0;
- b = 0.0;
- c = 0.0;
- d = 1.0;
- e = 0.0;
- f = 0.0;
-}
-
-
-/*#########################################################################
-## SVGTransform
-#########################################################################*/
-
-/**
- *
- */
-unsigned short SVGTransform::getType()
-{
- return type;
-}
-
-
-/**
- *
- */
-SVGMatrix SVGTransform::getMatrix()
-{
- return matrix;
-}
-
-/**
- *
- */
-double SVGTransform::getAngle()
-{
- return angle;
-}
-
-
-/**
- *
- */
-void SVGTransform::setMatrix(const SVGMatrix &matrixArg)
-{
- type = SVG_TRANSFORM_MATRIX;
- matrix = matrixArg;
-}
-
-/**
- *
- */
-void SVGTransform::setTranslate(double tx, double ty)
-{
- type = SVG_TRANSFORM_TRANSLATE;
- matrix.setA(1.0);
- matrix.setB(0.0);
- matrix.setC(0.0);
- matrix.setD(1.0);
- matrix.setE(tx);
- matrix.setF(ty);
-}
-
-/**
- *
- */
-void SVGTransform::setScale(double sx, double sy)
-{
- type = SVG_TRANSFORM_SCALE;
- matrix.setA(sx);
- matrix.setB(0.0);
- matrix.setC(0.0);
- matrix.setD(sy);
- matrix.setE(0.0);
- matrix.setF(0.0);
-}
-
-/**
- *
- */
-void SVGTransform::setRotate(double angleArg, double cx, double cy)
-{
- angle = angleArg;
- setTranslate(cx, cy);
- type = SVG_TRANSFORM_ROTATE;
- matrix.rotate(angle);
-}
-
-/**
- *
- */
-void SVGTransform::setSkewX(double angleArg)
-{
- angle = angleArg;
- type = SVG_TRANSFORM_SKEWX;
- matrix.identity();
- matrix.skewX(angle);
-}
-
-/**
- *
- */
-void SVGTransform::setSkewY(double angleArg)
-{
- angle = angleArg;
- type = SVG_TRANSFORM_SKEWY;
- matrix.identity();
- matrix.skewY(angle);
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGTransform::SVGTransform()
-{
- type = SVG_TRANSFORM_UNKNOWN;
- angle = 0.0;
-}
-
-/**
- *
- */
-SVGTransform::SVGTransform(const SVGTransform &other)
-{
- type = other.type;
- angle = other.angle;
- matrix = other.matrix;
-}
-
-/**
- *
- */
-~SVGTransform::SVGTransform()
-{
-}
-
-
-
-/*#########################################################################
-## SVGNumber
-#########################################################################*/
-
-/**
- *
- */
-double SVGNumber::getValue()
-{
- return value;
-}
-
-/**
- *
- */
-void SVGNumber::setValue(double val) throw (DOMException)
-{
- value = val;
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGNumber::SVGNumber()
-{
- value = 0.0;
-}
-
-/**
- *
- */
-SVGNumber::SVGNumber(const SVGNumber &other)
-{
- value = other.value;
-}
-
-/**
- *
- */
-SVGNumber::~SVGNumber()
-{
-}
-
-
-
-/*#########################################################################
-## SVGLength
-#########################################################################*/
-
-
-/**
- *
- */
-unsigned short SVGLength::getUnitType()
-{
- return unitType;
-}
-
-/**
- *
- */
-double SVGLength::getValue()
-{
- return value;
-}
-
-/**
- *
- */
-void SVGLength::setValue(double val) throw (DOMException)
-{
- value = val;
-}
-
-/**
- *
- */
-double SVGLength::getValueInSpecifiedUnits()
-{
- double result = 0.0;
- //fill this in
- return result;
-}
-
-/**
- *
- */
-void SVGLength::setValueInSpecifiedUnits(double /*val*/)
- throw (DOMException)
-{
- //fill this in
-}
-
-/**
- *
- */
-DOMString SVGLength::getValueAsString()
-{
- DOMString ret;
- char buf[32];
- snprintf(buf, 31, "%f", value);
- ret.append(buf);
- return ret;
-}
-
-/**
- *
- */
-void SVGLength::setValueAsString(const DOMString& /*val*/)
- throw (DOMException)
-{
-}
-
-
-/**
- *
- */
-void SVGLength::newValueSpecifiedUnits (unsigned short /*unitType*/, double /*val*/)
-{
-}
-
-/**
- *
- */
-void SVGLength::convertToSpecifiedUnits (unsigned short /*unitType*/)
-{
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGLength::SVGLength()
-{
- unitType = SVG_LENGTHTYPE_UNKNOWN;
- value = 0.0;
-}
-
-
-/**
- *
- */
-SVGLength::SVGLength(const SVGLength &other)
-{
- unitType = other.unitType;
- value = other.value;
-}
-
-/**
- *
- */
-SVGLength::~SVGLength()
-{
-}
-
-
-
-
-/*#########################################################################
-## SVGAngle
-#########################################################################*/
-
-/**
- *
- */
-unsigned short SVGAngle::getUnitType()
-{
- return unitType;
-}
-
-/**
- *
- */
-double SVGAngle::getValue()
-{
- return value;
-}
-
-/**
- *
- */
-void SVGAngle::setValue(double val) throw (DOMException)
-{
- value = val;
-}
-
-/**
- *
- */
-double SVGAngle::getValueInSpecifiedUnits()
-{
- double result = 0.0;
- //convert here
- return result;
-}
-
-/**
- *
- */
-void SVGAngle::setValueInSpecifiedUnits(double /*val*/)
- throw (DOMException)
-{
- //do conversion
-}
-
-/**
- *
- */
-DOMString SVGAngle::getValueAsString()
-{
- DOMString result;
- char buf[32];
- snprintf(buf, 31, "%f", value);
- result.append(buf);
- return result;
-}
-
-/**
- *
- */
-void SVGAngle::setValueAsString(const DOMString &/*val*/)
- throw (DOMException)
-{
- //convert here
-}
-
-
-/**
- *
- */
-void SVGAngle::newValueSpecifiedUnits (unsigned short /*unitType*/,
- double /*valueInSpecifiedUnits*/)
-{
- //convert here
-}
-
-/**
- *
- */
-void SVGAngle::convertToSpecifiedUnits (unsigned short /*unitType*/)
-{
- //convert here
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGAngle::SVGAngle()
-{
- unitType = SVG_ANGLETYPE_UNKNOWN;
- value = 0.0;
-}
-
-/**
- *
- */
-SVGAngle::SVGAngle(const SVGAngle &other)
-{
- unitType = other.unitType;
- value = other.value;
-}
-
-/**
- *
- */
-SVGAngle::~SVGAngle()
-{
-}
-
-
-
-
-/*#########################################################################
-## SVGICCColor
-#########################################################################*/
-
-
-/**
- *
- */
-DOMString SVGICCColor::getColorProfile()
-{
- return colorProfile;
-}
-
-/**
- *
- */
-void SVGICCColor::setColorProfile(const DOMString &val) throw (DOMException)
-{
- colorProfile = val;
-}
-
-/**
- *
- */
-SVGNumberList &SVGICCColor::getColors()
-{
- return colors;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGICCColor::SVGICCColor()
-{
-}
-
-/**
- *
- */
-SVGICCColor::SVGICCColor(const SVGICCColor &other)
-{
- colorProfile = other.colorProfile;
- colors = other.colors;
-}
-
-/**
- *
- */
-SVGICCColor::~SVGICCColor()
-{
-}
-
-
-
-/*#########################################################################
-## SVGColor
-#########################################################################*/
-
-
-
-/**
- *
- */
-unsigned short SVGColor::getColorType()
-{
- return colorType;
-}
-
-/**
- *
- */
-css::RGBColor SVGColor::getRgbColor()
-{
- css::RGBColor col;
- return col;
-}
-
-/**
- *
- */
-SVGICCColor SVGColor::getIccColor()
-{
- SVGICCColor col;
- return col;
-}
-
-
-/**
- *
- */
-void SVGColor::setRGBColor(const DOMString& /*rgbColor*/)
- throw (SVGException)
-{
-}
-
-/**
- *
- */
-void SVGColor::setRGBColorICCColor(const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw (SVGException)
-{
-}
-
-/**
- *
- */
-void SVGColor::setColor (unsigned short /*colorType*/,
- const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw (SVGException)
-{
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGColor::SVGColor()
-{
- colorType = SVG_COLORTYPE_UNKNOWN;
-}
-
-/**
- *
- */
-SVGColor::SVGColor(const SVGColor &other) : css::CSSValue(other)
-{
- colorType = other.colorType;
-}
-
-/**
- *
- */
-SVGColor::~SVGColor()
-{
-}
-
-
-
-/*#########################################################################
-## SVGRect
-#########################################################################*/
-
-
-/**
- *
- */
-double SVGRect::getX()
-{
- return x;
-}
-
-/**
- *
- */
-void SVGRect::setX(double val) throw (DOMException)
-{
- x = val;
-}
-
-/**
- *
- */
-double SVGRect::getY()
-{
- return y;
-}
-
-/**
- *
- */
-void SVGRect::setY(double val) throw (DOMException)
-{
- y = val;
-}
-
-/**
- *
- */
-double SVGRect::getWidth()
-{
- return width;
-}
-
-/**
- *
- */
-void SVGRect::setWidth(double val) throw (DOMException)
-{
- width = val;
-}
-
-/**
- *
- */
-double SVGRect::getHeight()
-{
- return height;
-}
-
-/**
- *
- */
-void SVGRect::setHeight(double val) throw (DOMException)
-{
- height = val;
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGRect::SVGRect()
-{
- x = y = width = height = 0.0;
-}
-
-/**
- *
- */
-SVGRect::SVGRect(const SVGRect &other)
-{
- x = other.x;
- y = other.y;
- width = other.width;
- height = other.height;
-}
-
-/**
- *
- */
-SVGRect::~SVGRect()
-{
-}
-
-
-
-/*#########################################################################
-## SVGPoint
-#########################################################################*/
-
-
-/**
- *
- */
-double SVGPoint::getX()
-{
- return x;
-}
-
-/**
- *
- */
-void SVGPoint::setX(double val) throw (DOMException)
-{
- x = val;
-}
-
-/**
- *
- */
-double SVGPoint::getY()
-{
- return y;
-}
-
-/**
- *
- */
-void SVGPoint::setY(double val) throw (DOMException)
-{
- y = val;
-}
-
-/**
- *
- */
-SVGPoint SVGPoint::matrixTransform(const SVGMatrix &/*matrix*/)
-{
- SVGPoint point;
- return point;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGPoint::SVGPoint()
-{
- x = y = 0;
-}
-
-/**
- *
- */
-SVGPoint::SVGPoint(const SVGPoint &other)
-{
- x = other.x;
- y = other.y;
-}
-
-/**
- *
- */
-SVGPoint::~SVGPoint()
-{
-}
-
-
-/*#########################################################################
-## SVGUnitTypes
-#########################################################################*/
-
-/**
- *
- */
-SVGUnitTypes::SVGUnitTypes()
-{
-}
-
-
-
-/**
- *
- */
-SVGUnitTypes::~SVGUnitTypes()
-{
-}
-
-
-/*#########################################################################
-## SVGStylable
-#########################################################################*/
-
-
-/**
- *
- */
-SVGAnimatedString SVGStylable::getClassName()
-{
- return className;
-}
-
-/**
- *
- */
-css::CSSStyleDeclaration SVGStylable::getStyle()
-{
- return style;
-}
-
-
-/**
- *
- */
-css::CSSValue SVGStylable::getPresentationAttribute(const DOMString& /*name*/)
-{
- css::CSSValue val;
- //perform a lookup
- return val;
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGStylable::SVGStylable()
-{
-}
-
-/**
- *
- */
-SVGStylable::SVGStylable(const SVGStylable &other)
-{
- className = other.className;
- style = other.style;
-}
-
-/**
- *
- */
-SVGStylable::~SVGStylable()
-{
-}
-
-
-
-
-/*#########################################################################
-## SVGLocatable
-#########################################################################*/
-
-
-/**
- *
- */
-SVGElementPtr SVGLocatable::getNearestViewportElement()
-{
- SVGElementPtr result;
- return result;
-}
-
-/**
- *
- */
-SVGElementPtr SVGLocatable::getFarthestViewportElement()
-{
- SVGElementPtr result;
- return result;
-}
-
-/**
- *
- */
-SVGRect SVGLocatable::getBBox ()
-{
- return bbox;
-}
-
-/**
- *
- */
-SVGMatrix SVGLocatable::getCTM ()
-{
- return ctm;
-}
-
-/**
- *
- */
-SVGMatrix SVGLocatable::getScreenCTM ()
-{
- return screenCtm;
-}
-
-/**
- *
- */
-SVGMatrix SVGLocatable::getTransformToElement (const SVGElement &/*element*/)
- throw (SVGException)
-{
- SVGMatrix result;
- //do calculations
- return result;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGLocatable::SVGLocatable()
-{
-}
-
-/**
- *
- */
-SVGLocatable::SVGLocatable(const SVGLocatable &/*other*/)
-{
-}
-
-/**
- *
- */
-SVGLocatable::~SVGLocatable()
-{
-}
-
-
-/*#########################################################################
-## SVGTransformable
-#########################################################################*/
-
-
-/**
- *
- */
-SVGAnimatedTransformList &SVGTransformable::getTransform()
-{
- return transforms;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGTransformable::SVGTransformable() {}
-
-/**
- *
- */
-SVGTransformable::SVGTransformable(const SVGTransformable &other) : SVGLocatable(other)
-{
- transforms = other.transforms;
-}
-
-/**
- *
- */
-SVGTransformable::~SVGTransformable()
-{
-}
-
-
-
-
-
-
-
-/*#########################################################################
-## SVGTests
-#########################################################################*/
-
-
-/**
- *
- */
-SVGStringList &SVGTests::getRequiredFeatures()
-{
- return requiredFeatures;
-}
-
-/**
- *
- */
-SVGStringList &SVGTests::getRequiredExtensions()
-{
- return requiredExtensions;
-}
-
-/**
- *
- */
-SVGStringList &SVGTests::getSystemLanguage()
-{
- return systemLanguage;
-}
-
-
-/**
- *
- */
-bool SVGTests::hasExtension (const DOMString& /*extension*/)
-{
- return false;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGTests::SVGTests()
-{
-}
-
-/**
- *
- */
-SVGTests::SVGTests(const SVGTests &other)
-{
- requiredFeatures = other.requiredFeatures;
- requiredExtensions = other.requiredExtensions;
- systemLanguage = other.systemLanguage;
-}
-
-/**
- *
- */
-SVGTests::~SVGTests()
-{
-}
-
-
-
-/*#########################################################################
-## SVGLangSpace
-#########################################################################*/
-
-
-/**
- *
- */
-DOMString SVGLangSpace::getXmllang()
-{
- return xmlLang;
-}
-
-/**
- *
- */
-void SVGLangSpace::setXmllang(const DOMString &val) throw (DOMException)
-{
- xmlLang = val;
-}
-
-/**
- *
- */
-DOMString SVGLangSpace::getXmlspace()
-{
- return xmlSpace;
-}
-
-/**
- *
- */
-void SVGLangSpace::setXmlspace(const DOMString &val)
- throw (DOMException)
-{
- xmlSpace = val;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGLangSpace::SVGLangSpace()
-{
-}
-
-/**
- *
- */
-SVGLangSpace::SVGLangSpace(const SVGLangSpace &other)
-{
- xmlLang = other.xmlLang;
- xmlSpace = other.xmlSpace;
-}
-
-/**
- *
- */
-SVGLangSpace::~SVGLangSpace()
-{
-}
-
-
-
-/*#########################################################################
-## SVGExternalResourcesRequired
-#########################################################################*/
-
-/**
- *
- */
-SVGAnimatedBoolean SVGExternalResourcesRequired::getExternalResourcesRequired()
-{
- return required;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGExternalResourcesRequired::SVGExternalResourcesRequired()
-{
-}
-
-
-/**
- *
- */
-SVGExternalResourcesRequired::SVGExternalResourcesRequired(
- const SVGExternalResourcesRequired &other)
-{
- required = other.required;
-}
-
-/**
- *
- */
-SVGExternalResourcesRequired::~SVGExternalResourcesRequired() {}
-
-
-/*#########################################################################
-## SVGPreserveAspectRatio
-#########################################################################*/
-
-/**
- *
- */
-unsigned short SVGPreserveAspectRatio::getAlign()
-{
- return align;
-}
-
-/**
- *
- */
-void SVGPreserveAspectRatio::setAlign(unsigned short val) throw (DOMException)
-{
- align = val;
-}
-
-/**
- *
- */
-unsigned short SVGPreserveAspectRatio::getMeetOrSlice()
-{
- return meetOrSlice;
-}
-
-/**
- *
- */
-void SVGPreserveAspectRatio::setMeetOrSlice(unsigned short val) throw (DOMException)
-{
- meetOrSlice = val;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGPreserveAspectRatio::SVGPreserveAspectRatio()
-{
- align = SVG_PRESERVEASPECTRATIO_UNKNOWN;
- meetOrSlice = SVG_MEETORSLICE_UNKNOWN;
-}
-
-/**
- *
- */
-SVGPreserveAspectRatio::SVGPreserveAspectRatio(const SVGPreserveAspectRatio &other)
-{
- align = other.align;
- meetOrSlice = other.meetOrSlice;
-}
-
-/**
- *
- */
-SVGPreserveAspectRatio::~SVGPreserveAspectRatio()
-{
-}
-
-
-
-/*#########################################################################
-## SVGFitToViewBox
-#########################################################################*/
-
-
-/**
- *
- */
-SVGAnimatedRect SVGFitToViewBox::getViewBox()
-{
- return viewBox;
-}
-
-/**
- *
- */
-SVGAnimatedPreserveAspectRatio SVGFitToViewBox::getPreserveAspectRatio()
-{
- return preserveAspectRatio;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGFitToViewBox::SVGFitToViewBox()
-{
-}
-
-/**
- *
- */
-
-SVGFitToViewBox::SVGFitToViewBox(const SVGFitToViewBox &other)
-{
- viewBox = other.viewBox;
- preserveAspectRatio = other.preserveAspectRatio;
-}
-
-/**
- *
- */
-SVGFitToViewBox::~SVGFitToViewBox()
-{
-}
-
-/*#########################################################################
-## SVGZoomAndPan
-#########################################################################*/
-
-/**
- *
- */
-unsigned short SVGZoomAndPan::getZoomAndPan()
-{
- return zoomAndPan;
-}
-
-/**
- *
- */
-void SVGZoomAndPan::setZoomAndPan(unsigned short val) throw (DOMException)
-{
- zoomAndPan = val;
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGZoomAndPan::SVGZoomAndPan()
-{
- zoomAndPan = SVG_ZOOMANDPAN_UNKNOWN;
-}
-
-/**
- *
- */
-SVGZoomAndPan::SVGZoomAndPan(const SVGZoomAndPan &other)
-{
- zoomAndPan = other.zoomAndPan;
-}
-
-/**
- *
- */
-SVGZoomAndPan::~SVGZoomAndPan()
-{
-}
-
-
-/*#########################################################################
-## SVGViewSpec
-#########################################################################*/
-
-/**
- *
- */
-SVGTransformList SVGViewSpec::getTransform()
-{
- return transform;
-}
-
-/**
- *
- */
-SVGElementPtr SVGViewSpec::getViewTarget()
-{
- return viewTarget;
-}
-
-/**
- *
- */
-DOMString SVGViewSpec::getViewBoxString()
-{
- DOMString ret;
- return ret;
-}
-
-/**
- *
- */
-DOMString SVGViewSpec::getPreserveAspectRatioString()
-{
- DOMString ret;
- return ret;
-}
-
-/**
- *
- */
-DOMString SVGViewSpec::getTransformString()
-{
- DOMString ret;
- return ret;
-}
-
-/**
- *
- */
-DOMString SVGViewSpec::getViewTargetString()
-{
- DOMString ret;
- return ret;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGViewSpec::SVGViewSpec()
-{
- viewTarget = NULL;
-}
-
-/**
- *
- */
-SVGViewSpec::SVGViewSpec(const SVGViewSpec &other) : SVGZoomAndPan(other), SVGFitToViewBox(other)
-{
- viewTarget = other.viewTarget;
- transform = other.transform;
-}
-
-/**
- *
- */
-SVGViewSpec::~SVGViewSpec()
-{
-}
-
-
-
-/*#########################################################################
-## SVGURIReference
-#########################################################################*/
-
-
-/**
- *
- */
-SVGAnimatedString SVGURIReference::getHref()
-{
- return href;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGURIReference::SVGURIReference()
-{
-}
-
-/**
- *
- */
-SVGURIReference::SVGURIReference(const SVGURIReference &other)
-{
- href = other.href;
-}
-
-/**
- *
- */
-SVGURIReference::~SVGURIReference()
-{
-}
-
-
-
-/*#########################################################################
-## SVGCSSRule
-#########################################################################*/
-
-
-
-
-/*#########################################################################
-## SVGRenderingIntent
-#########################################################################*/
-
-
-
-
-
-/*#########################################################################
-## SVGPathSeg
-#########################################################################*/
-
-static const char *pathSegLetters[] =
-{
- '@', // PATHSEG_UNKNOWN,
- 'z', // PATHSEG_CLOSEPATH
- 'M', // PATHSEG_MOVETO_ABS
- 'm', // PATHSEG_MOVETO_REL,
- 'L', // PATHSEG_LINETO_ABS
- 'l', // PATHSEG_LINETO_REL
- 'C', // PATHSEG_CURVETO_CUBIC_ABS
- 'c', // PATHSEG_CURVETO_CUBIC_REL
- 'Q', // PATHSEG_CURVETO_QUADRATIC_ABS,
- 'q', // PATHSEG_CURVETO_QUADRATIC_REL
- 'A', // PATHSEG_ARC_ABS
- 'a', // PATHSEG_ARC_REL,
- 'H', // PATHSEG_LINETO_HORIZONTAL_ABS,
- 'h', // PATHSEG_LINETO_HORIZONTAL_REL
- 'V', // PATHSEG_LINETO_VERTICAL_ABS
- 'v', // PATHSEG_LINETO_VERTICAL_REL
- 'S', // PATHSEG_CURVETO_CUBIC_SMOOTH_ABS
- 's', // PATHSEG_CURVETO_CUBIC_SMOOTH_REL
- 'T', // PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS
- 't' // PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL
-};
-
-
-
-/**
- *
- */
-unsigned short getPathSegType()
-{
- return type;
-}
-
-/**
- *
- */
-DOMString getPathSegTypeAsLetter()
-{
- int typ = type;
- if (typ<0 || typ>PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL)
- typ = PATHSEG_UNKNOWN;
- char const ch = pathSegLetters[typ];
- DOMString letter = ch;
- return letter;
-}
-
-
-/**
- *
- */
-unsigned short getPathSegType()
-{
- return type;
-}
-
-/**
- *
- */
-DOMString getPathSegTypeAsLetter()
-{
- int typ = type;
- if (typ<0 || typ>PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL)
- typ = PATHSEG_UNKNOWN;
- char const *ch = pathSegLetters[typ];
- DOMString letter = ch;
- return letter;
-}
-
-/**
- * From the various subclasses
- */
-
-/**
- *
- */
-double SVGPathSeg::getX()
-{
- return x;
-}
-
-/**
- *
- */
-void SVGPathSeg::setX(double val) throw (DOMException)
-{
- x = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getX1()
-{
- return x;
-}
-
-/**
- *
- */
-void SVGPathSeg::setX1(double val) throw (DOMException)
-{
- x = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getX2()
-{
- return x;
-}
-
-/**
- *
- */
-void SVGPathSeg::setX2(double val) throw (DOMException)
-{
- x = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getY()
-{
- return y;
-}
-
-/**
- *
- */
-void SVGPathSeg::setY(double val) throw (DOMException)
-{
- y = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getY1()
-{
- return y;
-}
-
-/**
- *
- */
-void SVGPathSeg::setY1(double val) throw (DOMException)
-{
- y = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getY2()
-{
- return y;
-}
-
-/**
- *
- */
-void SVGPathSeg::setY2(double val) throw (DOMException)
-{
- y = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getR1()
-{
- return r1;
-}
-
-/**
- *
- */
-void SVGPathSeg::setR1(double val) throw (DOMException)
-{
- r1 = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getR2()
-{
- return r2;
-}
-
-/**
- *
- */
-void SVGPathSeg::setR2(double val) throw (DOMException)
-{
- r2 = val;
-}
-
-/**
- *
- */
-double SVGPathSeg::getAngle()
-{
- return angle;
-}
-
-/**
- *
- */
-void SVGPathSeg::setAngle(double val) throw (DOMException)
-{
- angle = val;
-}
-
-/**
- *
- */
-bool SVGPathSeg::getLargeArcFlag()
-{
- return largeArcFlag;
-}
-
-/**
- *
- */
-void SVGPathSeg::setLargeArcFlag(bool val) throw (DOMException)
-{
- largeArcFlag = val;
-}
-
-/**
- *
- */
-bool SVGPathSeg::getSweepFlag()
-{
- return sweepFlag;
-}
-
-/**
- *
- */
-void SVGPathSeg::setSweepFlag(bool val) throw (DOMException)
-{
- sweepFlag = val;
-}
-
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGPathSeg::SVGPathSeg()
-{
- init();
-}
-
-/**
- *
- */
-SVGPathSeg::SVGPathSeg(const SVGPathSeg &other)
-{
- assign(other);
-}
-
-/**
- *
- */
-SVGPathSeg &operator=(const SVGPathSeg &other)
-{
- assign(other);
- return *this;
-}
-
-/**
- *
- */
-void SVGPathSeg::init()
-{
- type = PATHSEG_UNKNOWN;
- x = y = x1 = y1 = x2 = y2 = 0.0;
- r1 = r2 = 0.0;
- angle = 0.0;
- largeArcFlag = false;
- sweepFlag = false;
-}
-
-/**
- *
- */
-void SVGPathSeg::assign(const SVGPathSeg &other)
-{
- type = other.type;
- x = other.x;
- y = other.y;
- x1 = other.x1;
- y1 = other.y1;
- x2 = other.x2;
- y2 = other.y2;
- r1 = other.r1;
- r2 = other.r2;
- angle = other.angle;
- largeArcFlag = other.largeArcFlag;
- sweepFlag = other.sweepFlag;
-}
-
-
-/**
- *
- */
-SVGPathSeg::~SVGPathSeg()
-{
-}
-
-
-
-
-/*#########################################################################
-## SVGPaint
-#########################################################################*/
-
-
-/**
- *
- */
-unsigned short SVGPaint::getPaintType()
-{ return paintType; }
-
-/**
- *
- */
-DOMString SVGPaint::getUri()
-{ return uri; }
-
-/**
- *
- */
-void SVGPaint::setUri(const DOMString& uriArg)
-{
- uri = uriArg;
-}
-
-/**
- *
- */
-void SVGPaint::setPaint (unsigned short paintTypeArg,
- const DOMString& uriArg,
- const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw (SVGException)
-{
- paintType = paintTypeArg;
- uri = uriArg;
- //do something with rgbColor
- //do something with iccColor;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGPaint::SVGPaint()
-{
- uri = "";
- paintType = SVG_PAINTTYPE_UNKNOWN;
-}
-
-/**
- *
- */
-SVGPaint::SVGPaint(const SVGPaint &other) : css::CSSValue(other), SVGColor(other)
-{
- uri = "";
- paintType = SVG_PAINTTYPE_UNKNOWN;
-}
-
-/**
- *
- */
-SVGPaint::~SVGPaint() {}
-
-
-/*#########################################################################
-## SVGColorProfileRule
-#########################################################################*/
-
-
-/**
- *
- */
-DOMString SVGColorProfileRule::getSrc()
-{ return src; }
-
-/**
- *
- */
-void SVGColorProfileRule::setSrc(const DOMString &val) throw (DOMException)
-{ src = val; }
-
-/**
- *
- */
-DOMString SVGColorProfileRule::getName()
-{ return name; }
-
-/**
- *
- */
-void SVGColorProfileRule::setName(const DOMString &val) throw (DOMException)
-{ name = val; }
-
-/**
- *
- */
-unsigned short SVGColorProfileRule::getRenderingIntent()
-{ return renderingIntent; }
-
-/**
- *
- */
-void SVGColorProfileRule::setRenderingIntent(unsigned short val) throw (DOMException)
-{ renderingIntent = val; }
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGColorProfileRule::SVGColorProfileRule()
-{
-}
-
-/**
- *
- */
-SVGColorProfileRule::SVGColorProfileRule(const SVGColorProfileRule &other)
- : SVGCSSRule(other), SVGRenderingIntent(other)
-{
- renderingIntent = other.renderingIntent;
- src = other.src;
- name = other.name;
-}
-
-/**
- *
- */
-SVGColorProfileRule::~SVGColorProfileRule()
-{
-}
-
-
-/*#########################################################################
-## SVGFilterPrimitiveStandardAttributes
-#########################################################################*/
-
-/**
- *
- */
-SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getX()
-{ return x; }
-
-/**
- *
- */
-SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getY()
-{ return y; }
-
-/**
- *
- */
-SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getWidth()
-{ return width; }
-
-/**
- *
- */
-SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getHeight()
-{ return height; }
-
-/**
- *
- */
-SVGAnimatedString SVGFilterPrimitiveStandardAttributes::getResult()
-{ return result; }
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-
-/**
- *
- */
-SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes()
-{
-}
-
-/**
- *
- */
-SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes(
- const SVGFilterPrimitiveStandardAttributes &other)
- : SVGStylable(other)
-{
- x = other.x;
- y = other.y;
- width = other.width;
- height = other.height;
- result = other.result;
-}
-
-/**
- *
- */
-SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes()
-{
-}
-
-
-/*#########################################################################
-## SVGEvent
-#########################################################################*/
-
-/**
- *
- */
-SVGEvent:SVGEvent()
-{
-}
-
-/**
- *
- */
-SVGEvent:SVGEvent(const SVGEvent &other) : events::Event(other)
-{
-}
-
-/**
- *
- */
-SVGEvent::~SVGEvent()
-{
-}
-
-
-/*#########################################################################
-## SVGZoomEvent
-#########################################################################*/
-
-/**
- *
- */
-SVGRect SVGZoomEvent::getZoomRectScreen()
-{
- return zoomRectScreen;
-}
-
-/**
- *
- */
-double SVGZoomEvent::getPreviousScale()
-{
- return previousScale;
-}
-
-/**
- *
- */
-SVGPoint SVGZoomEvent::getPreviousTranslate()
-{
- return previousTranslate;
-}
-
-/**
- *
- */
-double SVGZoomEvent::getNewScale()
-{
- return newScale;
-}
-
-/**
- *
- */
-SVGPoint SVGZoomEvent::getNewTranslate()
-{
- return newTranslate;
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGZoomEvent::SVGZoomEvent()
-{
-}
-
-/**
- *
- */
-SVGZoomEvent::SVGZoomEvent(const SVGZoomEvent &other) :
- events::Event(other), events::UIEvent(other)
-{
- zoomRectScreen = other.zoomRectScreen;
- previousScale = other.previousScale;
- previousTranslate = other.previousTranslate;
- newScale = other.newScale;
- newTranslate = other.newTranslate;
-}
-
-/**
- *
- */
-SVGZoomEvent::~SVGZoomEvent()
-{
-}
-
-
-/*#########################################################################
-## SVGElementInstance
-#########################################################################*/
-
-
-/**
- *
- */
-SVGElementPtr SVGElementInstance::getCorrespondingElement()
-{
- return correspondingElement;
-}
-
-/**
- *
- */
-SVGUseElementPtr SVGElementInstance::getCorrespondingUseElement()
-{
- return correspondingUseElement;
-}
-
-/**
- *
- */
-SVGElementInstance SVGElementInstance::getParentNode()
-{
- SVGElementInstance ret;
- return ret;
-}
-
-/**
- * Since we are using stack types and this is a circular definition,
- * we will instead implement this as a global function below:
- * SVGElementInstanceList getChildNodes(const SVGElementInstance instance);
- */
-//SVGElementInstanceList getChildNodes();
-
-/**
- *
- */
-SVGElementInstance SVGElementInstance::getFirstChild()
-{
- SVGElementInstance ret;
- return ret;
-}
-
-/**
- *
- */
-SVGElementInstance SVGElementInstance::getLastChild()
-{
- SVGElementInstance ret;
- return ret;
-}
-
-/**
- *
- */
-SVGElementInstance SVGElementInstance::getPreviousSibling()
-{
- SVGElementInstance ret;
- return ret;
-}
-
-/**
- *
- */
-SVGElementInstance SVGElementInstance::getNextSibling()
-{
- SVGElementInstance ret;
- return ret;
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGElementInstance::SVGElementInstance()
-{
-}
-
-/**
- *
- */
-SVGElementInstance::SVGElementInstance(const SVGElementInstance &other)
- : events::EventTarget(other)
-{
-}
-
-/**
- *
- */
-SVGElementInstance::~SVGElementInstance()
-{
-}
-
-
-/*#########################################################################
-## SVGElementInstanceList
-#########################################################################*/
-
-/**
- *
- */
-unsigned long SVGElementInstanceList::getLength()
-{ return items.size(); }
-
-/**
- *
- */
-SVGElementInstance SVGElementInstanceList::item(unsigned long index)
-{
- if (index >= items.size())
- {
- SVGElementInstance ret;
- return ret;
- }
- return items[index];
-}
-
-/**
- * This static method replaces the circular definition of:
- * SVGElementInstanceList SVGElementInstance::getChildNodes()
- *
- */
-static SVGElementInstanceList SVGElementInstanceList::getChildNodes(const SVGElementInstance &/*instance*/)
-{
- SVGElementInstanceList list;
- return list;
-}
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGElementInstanceList::SVGElementInstanceList()
-{
-}
-
-/**
- *
- */
-SVGElementInstanceList::SVGElementInstanceList(const SVGElementInstanceList &other)
-{
- items = other.items;
-}
-
-/**
- *
- */
-SVGElementInstanceList::~SVGElementInstanceList()
-{
-}
-
-
-
-
-/*#########################################################################
-## SVGValue
-#########################################################################*/
-
-/**
- * Constructor
- */
-SVGValue()
-{
- init();
-}
-
-/**
- * Copy constructor
- */
-SVGValue(const SVGValue &other)
-{
- assign(other);
-}
-
-/**
- * Assignment
- */
-SVGValue &operator=(const SVGValue &other)
-{
- assign(other);
- return *this;
-}
-
-/**
- *
- */
-~SVGValue()
-{
-}
-
-//###########################
-// TYPES
-//###########################
-
-/**
- * Angle
- */
-SVGValue::SVGValue(const SVGAngle &v)
-{
- type = SVG_ANGLE;
- angleval = v;
-}
-
-SVGAngle SVGValue::angleValue()
-{
- return algleval;
-}
-
-/**
- * Boolean
- */
-SVGValue::SVGValue(bool v)
-{
- type = SVG_BOOLEAN;
- bval = v;
-}
-
-bool SVGValue::booleanValue()
-{
- return bval;
-}
-
-
-/**
- * Enumeration
- */
-SVGValue::SVGValue(short v)
-{
- type = SVG_ENUMERATION;
- eval = v;
-}
-
-short SVGValue::enumerationValue()
-{
- return eval;
-}
-
-/**
- * Integer
- */
-SVGValue::SVGValue(long v)
-{
- type = SVG_INTEGER;
- ival = v;
-}
-
-long SVGValue::integerValue()
-{
- return ival;
-}
-
-/**
- * Length
- */
-SVGValue::SVGValue(const SVGLength &v)
-{
- type = SVG_LENGTH;
- lengthval = v;
-}
-
-SVGLength SVGValue::lengthValue()
-{
- return lengthval;
-}
-
-/**
- * Number
- */
-SVGValue::SVGValue(double v)
-{
- type = SVG_NUMBER;
- dval = v;
-}
-
-double SVGValue::numberValue()
-{
- return dval;
-}
-
-/**
- * Points
- */
-SVGValue::SVGValue(const SVGPointList &v)
-{
- type = SVG_POINTS;
- plistval = v;
-}
-
-SVGPointList SVGValue::pointListValue()
-{
- return plistval;
-}
-
-
-/**
- * PreserveAspectRatio
- */
-SVGValue::SVGValue(const SVGPreserveAspectRatio &v)
-{
- type = SVG_PRESERVE_ASPECT_RATIO;
- parval = v;
-}
-
-SVGPreserveAspectRatio SVGValue::preserveAspectRatioValue()
-{
- return parval;
-}
-
-/**
- * Rect
- */
-SVGValue::SVGValue(const SVGRect &v)
-{
- type = SVG_RECT;
- rectval = v;
-}
-
-SVGRect SVGValue::rectValue()
-{
- return rectval;
-}
-
-/**
- * String
- */
-SVGValue::SVGValue(const DOMString &v)
-{
- type = SVG_STRING;
- sval = v;
-}
-
-DOMString SVGValue::stringValue()
-{
- return sval;
-}
-
-
-void SVGValue::init()
-{
- type = SVG_NUMBER;
- bval = false;
- eval = 0;
- ival = 0;
- dval = 0.0;
-}
-
-void SVGValue::assign(const SVGValue &other)
-{
- type = other.type;
- angleval = other.angleval;
- bval = other.bval;
- eval = other.eval;
- ival = other.ival;
- lengthval = other.lengthval;
- dval = other.dval;
- parval = other.parval;
- rval = other.rval;
- sval = other.sval;
-}
-
-
-/*#########################################################################
-## SVGTransformList
-#########################################################################*/
-
-
-/*#########################################################################
-## SVGStringList
-#########################################################################*/
-
-
-/*#########################################################################
-## SVGNumberList
-#########################################################################*/
-
-
-/*#########################################################################
-## SVGLengthList
-#########################################################################*/
-
-
-/*#########################################################################
-## SVGPointList
-#########################################################################*/
-
-/*#########################################################################
-## SVGPathSegList
-#########################################################################*/
-
-/*#########################################################################
-## SVGValueList
-#########################################################################*/
-
-
-/**
- *
- */
-unsigned long SVGValueList::getNumberOfItems()
-{
- return items.size();
-}
-
-/**
- *
- */
-void SVGValueList::clear() throw (DOMException)
-{
- items.clear();
-}
-
-/**
- *
- */
-SVGValue SVGValueList::initialize(const SVGValue& newItem)
- throw (DOMException, SVGException)
-{
- items.clear();
- items.push_back(newItem);
- return newItem;
-}
-
-/**
- *
- */
-SVGValue SVGValueList::getItem(unsigned long index) throw (DOMException)
-{
- if (index >= items.size())
- return "";
- return items[index];
-}
-
-/**
- *
- */
-SVGValue SVGValueList::insertItemBefore(const SVGValue& newItem,
- unsigned long index)
- throw (DOMException, SVGException)
-{
- if (index>=items.size())
- {
- items.push_back(newItem);
- }
- else
- {
- std::vector<SVGValue>::iterator iter = items.begin() + index;
- items.insert(iter, newItem);
- }
- return newItem;
-}
-
-/**
- *
- */
-SVGValue SVGValueList::replaceItem (const SVGValue& newItem,
- unsigned long index)
- throw (DOMException, SVGException)
-{
- if (index>=items.size())
- return "";
- std::vector<SVGValue>::iterator iter = items.begin() + index;
- *iter = newItem;
- return newItem;
-}
-
-/**
- *
- */
-SVGValue SVGValueList::removeItem (unsigned long index)
- throw (DOMException)
-{
- if (index>=items.size())
- return "";
- std::vector<SVGValue>::iterator iter = items.begin() + index;
- SVGValue oldval = *iter;
- items.erase(iter);
- return oldval;
-}
-
-/**
- *
- */
-SVGValue SVGValueList::appendItem (const SVGValue& newItem)
- throw (DOMException, SVGException)
-{
- items.push_back(newItem);
- return newItem;
-}
-
-
-/**
- * Matrix
- */
-SVGValue SVGValueList::createSVGTransformFromMatrix(const SVGValue &matrix)
-{
-}
-
-/**
- * Matrix
- */
-SVGValue SVGValueList::consolidate()
-{
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGValueList::SVGValueList()
-{
-}
-
-/**
- *
- */
-SVGValueList::SVGValueList(const SVGValueList &other)
-{
- items = other.items;
-}
-
-/**
- *
- */
-SVGValueList::~SVGValueList()
-{
-}
-
-
-
-
-
-/*#########################################################################
-## SVGAnimatedValue
-#########################################################################*/
-
-
-
-
-/**
- *
- */
-SVGValue &SVGAnimatedValue::getBaseVal()
-{
- return baseVal;
-}
-
-/**
- *
- */
-void SVGAnimatedValue::setBaseVal(const SVGValue &val) throw (DOMException)
-{
- baseVal = val;
-}
-
-/**
- *
- */
-SVGValue &SVGAnimatedValue::getAnimVal()
-{
- return animVal;
-}
-
-
-/**
- *
- */
-SVGAnimatedValue::SVGAnimatedValue()
-{
- init();
-}
-
-
-/**
- *
- */
-SVGAnimatedValue::SVGAnimatedValue(const SVGValue &v)
-{
- init();
- baseVal = v;
-}
-
-
-/**
- *
- */
-SVGAnimatedValue::SVGAnimatedValue(const SVGValue &bv, const SVGValue &av)
-{
- init();
- baseVal = bv;
- animVal = av;
-}
-
-
-/**
- *
- */
-SVGAnimatedValue::SVGAnimatedValue(const SVGAnimatedValue &other)
-{
- assign(other);
-}
-
-
-/**
- *
- */
-SVGAnimatedValue &SVGAnimatedValue::operator=(const SVGAnimatedValue &other)
-{
- assign(other);
- return *this;
-}
-
-
-/**
- *
- */
-SVGAnimatedValue &SVGAnimatedValue::operator=(const SVGValue &bv)
-{
- init();
- baseVal = bv;
-}
-
-
-/**
- *
- */
-SVGAnimatedValue::~SVGAnimatedValue()
-{
-}
-
-
-
-void SVGAnimatedValue::init()
-{
-}
-
-
-void SVGAnimatedValue::assign(const SVGAnimatedValue &other)
-{
- baseVal = other.baseVal;
- animVal = other.animVal;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//########################################################################
-//########################################################################
-//########################################################################
-//# D O M
-//########################################################################
-//########################################################################
-//########################################################################
-
-
-
-
-
-
-
-/*#########################################################################
-## SVGElement
-#########################################################################*/
-
-
-//####################################################################
-//# BASE METHODS FOR SVGElement
-//####################################################################
-
-/**
- * Get the value of the id attribute on the given element.
- */
-DOMString getId()
-{
-}
-
-/**
- * Set the value of the id attribute on the given element.
- */
-void setId(const DOMString &val) throw (DOMException)
-{
-}
-
-
-/**
- * Corresponds to attribute xml:base on the given element.
- */
-DOMString getXmlBase()
-{
-}
-
-
-/**
- * Corresponds to attribute xml:base on the given element.
- */
-void setXmlBase(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * The nearest ancestor 'svg' element. Null if the given element is the
- * outermost 'svg' element.
- */
-SVGElementPtr getOwnerSVGElement()
-{
-}
-
-/**
- * The element which established the current viewport. Often, the nearest
- * ancestor 'svg' element. Null if the given element is the outermost 'svg'
- * element.
- */
-SVGElementPtr getViewportElement()
-{
-}
-
-
-//####################################################################
-//####################################################################
-//# I N T E R F A C E S
-//####################################################################
-//####################################################################
-
-//####################################################################
-//# SVGAngle
-//####################################################################
-
-/**
- *
- */
-unsigned short getUnitType()
-{
-}
-
-/**
- *
- */
-double getValue()
-{
-}
-
-/**
- *
- */
-void setValue(double val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-double getValueInSpecifiedUnits()
-{
-}
-
-/**
- *
- */
-void setValueInSpecifiedUnits(double /*val*/) throw (DOMException)
-{
-}
-
-/**
- *
- */
-DOMString getValueAsString()
-{
-}
-
-/**
- *
- */
-void setValueAsString(const DOMString &/*val*/) throw (DOMException)
-{
-}
-
-
-/**
- *
- */
-void newValueSpecifiedUnits(unsigned short /*unitType*/,
- double /*valueInSpecifiedUnits*/)
-{
-}
-
-/**
- *
- */
-void convertToSpecifiedUnits(unsigned short /*unitType*/)
-{
-}
-
-//####################################################################
-//## The following animated types are rolled up into a single
-//## SVGAnimatedValue interface
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedAngle
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedBoolean
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedEnumeration
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedInteger
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedLength
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedLengthList
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedNumber
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedNumberList
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedPathData
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedPoints
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedPreserveAspectRatio
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedRect
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedString
-//####################################################################
-
-//####################################################################
-//## SVGAnimatedTransformList
-//####################################################################
-
-//####################################################################
-//# SVGAnimatedValue
-//####################################################################
-
-/**
- *
- */
-SVGValue &getBaseVal()
-{
- return baseVal();
-}
-
-/**
- *
- */
-void setBaseVal(const SVGValue &val) throw (DOMException)
-{
- baseVal = val;
-}
-
-/**
- *
- */
-SVGValue &getAnimVal()
-{
- return animVal;
-}
-
-
-
-//####################################################################
-//# SVGColor
-//####################################################################
-
-/**
- * From CSSValue
- * A code defining the type of the value as defined above.
- */
-unsigned short getCssValueType()
-{
-}
-
-/**
- * From CSSValue
- * A string representation of the current value.
- */
-DOMString getCssText()
-{
-}
-
-/**
- * From CSSValue
- * A string representation of the current value.
- * Note that setting implies parsing.
- */
-void setCssText(const DOMString &val) throw (dom::DOMException)
-{
-}
-
-
-/**
- *
- */
-unsigned short getColorType()
-{
-}
-
-/**
- *
- */
-css::RGBColor getRgbColor()
-{
-}
-
-/**
- *
- */
-SVGICCColor getIccColor()
-{
-}
-
-
-/**
- *
- */
-void setRGBColor(const DOMString& /*rgbColor*/) throw (SVGException)
-{
-}
-
-/**
- *
- */
-void setRGBColorICCColor(const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw (SVGException)
-{
-}
-
-/**
- *
- */
-void setColor(unsigned short /*colorType*/,
- const DOMString& /*rgbColor*/,
- const DOMString& /*iccColor*/)
- throw (SVGException)
-{
-}
-
-//####################################################################
-//# SVGCSSRule
-//####################################################################
-
-/**
- * From CSSRule
- * The type of the rule, as defined above. The expectation is that
- * binding-specific casting methods can be used to cast down from an instance of
- * the CSSRule interface to the specific derived interface implied by the type.
- */
-unsigned short getType()
-{
-}
-
-/**
- * From CSSRule
- * The parsable textual representation of the rule. This reflects the current
- * state of the rule and not its initial value.
- */
-DOMString getCssText()
-{
-}
-
-/**
- * From CSSRule
- * The parsable textual representation of the rule. This reflects the current
- * state of the rule and not its initial value.
- * Note that setting involves reparsing.
- */
-void setCssText(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * From CSSRule
- * The style sheet that contains this rule.
- */
-css::CSSStyleSheet *getParentStyleSheet()
-{
-}
-
-/**
- * From CSSRule
- * If this rule is contained inside another rule(e.g. a style rule inside an
- * @media block), this is the containing rule. If this rule is not nested inside
- * any other rules, this returns null.
- */
-css::CSSRule *getParentRule()
-{
-}
-
-//####################################################################
-//# SVGExternalResourcesRequired
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedBoolean getExternalResourcesRequired()
-{
-}
-
-//####################################################################
-//# SVGFitToViewBox
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedRect getViewBox()
-{
-}
-
-/**
- *
- */
-SVGAnimatedPreserveAspectRatio getPreserveAspectRatio()
-{
-}
-
-//####################################################################
-//# SVGICCColor
-//####################################################################
-
-/**
- *
- */
-DOMString getColorProfile()
-{
-}
-
-/**
- *
- */
-void setColorProfile(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-SVGNumberList &getColors()
-{
-}
-
-//####################################################################
-//# SVGLangSpace
-//####################################################################
-
-/**
- *
- */
-DOMString getXmllang()
-{
-}
-
-/**
- *
- */
-void setXmllang(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-DOMString getXmlspace()
-{
-}
-
-/**
- *
- */
-void setXmlspace(const DOMString &val) throw (DOMException)
-{
-}
-
-//####################################################################
-//# SVGLength
-//####################################################################
-
-/**
- *
- */
-unsigned short getUnitType()
-{
-}
-
-/**
- *
- */
-double getValue()
-{
-}
-
-/**
- *
- */
-void setValue(double val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-double getValueInSpecifiedUnits()
-{
-}
-
-/**
- *
- */
-void setValueInSpecifiedUnits(double /*val*/) throw (DOMException)
-{
-}
-
-/**
- *
- */
-DOMString getValueAsString()
-{
-}
-
-/**
- *
- */
-void setValueAsString(const DOMString& /*val*/) throw (DOMException)
-{
-}
-
-
-/**
- *
- */
-void newValueSpecifiedUnits(unsigned short /*unitType*/, double /*val*/)
-{
-}
-
-/**
- *
- */
-void convertToSpecifiedUnits(unsigned short /*unitType*/)
-{
-}
-
-
-//####################################################################
-//## SVGLengthList - see SVGValueList
-//####################################################################
-
-
-
-//####################################################################
-//# SVGLocatable
-//####################################################################
-
-/**
- *
- */
-SVGElementPtr getNearestViewportElement()
-{
-}
-
-/**
- *
- */
-SVGElement *getFarthestViewportElement()
-{
-}
-
-/**
- *
- */
-SVGRect getBBox()
-{
-}
-
-/**
- *
- */
-SVGMatrix getCTM()
-{
-}
-
-/**
- *
- */
-SVGMatrix getScreenCTM()
-{
-}
-
-/**
- *
- */
-SVGMatrix getTransformToElement(const SVGElement &/*element*/)
- throw (SVGException)
-{
-}
-
-//####################################################################
-//# SVGNumber
-//####################################################################
-
-/**
- *
- */
-double getValue()
-{
-}
-
-/**
- *
- */
-void setValue(double val) throw (DOMException)
-{
-}
-
-//####################################################################
-//# SVGNumberList - see SVGValueList
-//####################################################################
-
-
-//####################################################################
-//# SVGRect
-//####################################################################
-
-/**
- *
- */
-double getX()
-{
-}
-
-/**
- *
- */
-void setX(double val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-double getY()
-{
-}
-
-/**
- *
- */
-void setY(double val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-double getWidth()
-{
-}
-
-/**
- *
- */
-void setWidth(double val) throw (DOMException)
-{
-}
-
-/**
- *
- */
-double getHeight()
-{
-}
-
-/**
- *
- */
-void setHeight(double val) throw (DOMException)
-{
-}
-
-//####################################################################
-//# SVGRenderingIntent
-//####################################################################
-
-//####################################################################
-//# SVGStringList - see SVGValueList
-//####################################################################
-
-//####################################################################
-//# SVGStylable
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedString getClassName()
-{
-}
-
-/**
- *
- */
-css::CSSStyleDeclaration getStyle()
-{
-}
-
-/**
- *
- */
-css::CSSValue getPresentationAttribute(const DOMString& /*name*/)
-{
-}
-
-//####################################################################
-//# SVGTests
-//####################################################################
-
-/**
- *
- */
-SVGValueList &getRequiredFeatures()
-{
-}
-
-/**
- *
- */
-SVGValueList &getRequiredExtensions()
-{
-}
-
-/**
- *
- */
-SVGValueList &getSystemLanguage()
-{
-}
-
-/**
- *
- */
-bool hasExtension(const DOMString& /*extension*/)
-{
-}
-
-//####################################################################
-//# SVGTransformable
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedList &getTransform()
-{
-}
-
-//####################################################################
-//# SVGUnitTypes
-//####################################################################
-
-//####################################################################
-//# SVGURIReference
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedValue getHref()
-{
-}
-
-//####################################################################
-//## SVGValueList - consolidation of other lists
-//####################################################################
-
-/**
- *
- */
-unsigned long SVGElement::getNumberOfItems()
-{
- return items.size();
-}
-
-/**
- *
- */
-void SVGElement::clear() throw (DOMException)
-{
- items.clear();
-}
-
-/**
- *
- */
-SVGValue SVGElement::initialize(const SVGValue& newItem)
- throw (DOMException, SVGException)
-{
- items.clear();
- items.push_back(newItem);
- return newItem;
-}
-
-/**
- *
- */
-SVGValue SVGElement::getItem(unsigned long index) throw (DOMException)
-{
- if (index >= items.size())
- return "";
- return items[index];
-}
-
-/**
- *
- */
-SVGValue SVGElement::insertItemBefore(const SVGValue& newItem,
- unsigned long index)
- throw (DOMException, SVGException)
-{
- if (index>=items.size())
- {
- items.push_back(newItem);
- }
- else
- {
- std::vector<SVGValue>::iterator iter = items.begin() + index;
- items.insert(iter, newItem);
- }
- return newItem;
-}
-
-/**
- *
- */
-SVGValue SVGElement::replaceItem (const SVGValue& newItem,
- unsigned long index)
- throw (DOMException, SVGException)
-{
- if (index>=items.size())
- return "";
- std::vector<SVGValue>::iterator iter = items.begin() + index;
- *iter = newItem;
- return newItem;
-}
-
-/**
- *
- */
-SVGValue SVGElement::removeItem (unsigned long index)
- throw (DOMException)
-{
- if (index>=items.size())
- return "";
- std::vector<SVGValue>::iterator iter = items.begin() + index;
- SVGValue oldval = *iter;
- items.erase(iter);
- return oldval;
-}
-
-/**
- *
- */
-SVGValue SVGElement::appendItem (const SVGValue& newItem)
- throw (DOMException, SVGException)
-{
- items.push_back(newItem);
- return newItem;
-}
-
-
-/**
- * Matrix
- */
-SVGValue SVGElement::createSVGTransformFromMatrix(const SVGValue &matrix)
-{
-}
-
-/**
- * Matrix
- */
-SVGValue SVGElement::consolidate()
-{
-}
-
-
-//####################################################################
-//# SVGViewSpec
-//####################################################################
-
-/**
- *
- */
-//SVGTransformList getTransform()
-//{
-//}
-
-/**
- *
- */
-SVGElementPtr getViewTarget()
-{
-}
-
-/**
- *
- */
-DOMString getViewBoxString()
-{
-}
-
-/**
- *
- */
-DOMString getPreserveAspectRatioString()
-{
-}
-
-/**
- *
- */
-DOMString getTransformString()
-{
-}
-
-/**
- *
- */
-DOMString getViewTargetString()
-{
-}
-
-//####################################################################
-//# SVGZoomAndPan
-//####################################################################
-
-/**
- *
- */
-unsigned short getZoomAndPan()
-{
-}
-
-/**
- *
- */
-void setZoomAndPan(unsigned short val) throw (DOMException)
-{
-}
-
-//####################################################################
-//####################################################################
-//# E L E M E N T S
-//####################################################################
-//####################################################################
-
-//####################################################################
-//# SVGAElement
-//####################################################################
-
-
-/**
- *
- */
-SVGAnimatedString getTarget()
-{
-}
-
-
-
-//####################################################################
-//# SVGAltGlyphElement
-//####################################################################
-
-
-/**
- * Get the attribute glyphRef on the given element.
- */
-DOMString getGlyphRef()
-{
-}
-
-/**
- * Set the attribute glyphRef on the given element.
- */
-void setGlyphRef(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute format on the given element.
- */
-DOMString getFormat()
-{
-}
-
-/**
- * Set the attribute format on the given element.
- */
-void setFormat(const DOMString &val) throw (DOMException)
-{
-}
-
-
-//####################################################################
-//# SVGAltGlyphDefElement
-//####################################################################
-
-//####################################################################
-//# SVGAltGlyphItemElement
-//####################################################################
-
-
-//####################################################################
-//# SVGAnimateElement
-//####################################################################
-
-
-//####################################################################
-//# SVGAnimateColorElement
-//####################################################################
-
-//####################################################################
-//# SVGAnimateMotionElement
-//####################################################################
-
-
-//####################################################################
-//# SVGAnimateTransformElement
-//####################################################################
-
-
-//####################################################################
-//# SVGAnimationElement
-//####################################################################
-
-
-/**
- *
- */
-SVGElementPtr getTargetElement()
-{
-}
-
-/**
- *
- */
-double getStartTime()
-{
-}
-
-/**
- *
- */
-double getCurrentTime()
-{
-}
-
-/**
- *
- */
-double getSimpleDuration() throw (DOMException)
-{
-}
-
-
-
-//####################################################################
-//# SVGCircleElement
-//####################################################################
-
-/**
- * Corresponds to attribute cx on the given 'circle' element.
- */
-SVGAnimatedLength getCx()
-{
-}
-
-/**
- * Corresponds to attribute cy on the given 'circle' element.
- */
-SVGAnimatedLength getCy()
-{
-}
-
-/**
- * Corresponds to attribute r on the given 'circle' element.
- */
-SVGAnimatedLength getR()
-{
-}
-
-//####################################################################
-//# SVGClipPathElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute clipPathUnits on the given 'clipPath' element.
- * Takes one of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getClipPathUnits()
-{
-}
-
-
-
-//####################################################################
-//# SVGColorProfileElement
-//####################################################################
-
-
-/**
- * Get the attribute local on the given element.
- */
-DOMString getLocal()
-{
-}
-
-/**
- * Set the attribute local on the given element.
- */
-void setLocal(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute name on the given element.
- */
-DOMString getName()
-{
-}
-
-/**
- * Set the attribute name on the given element.
- */
-void setName(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Set the attribute rendering-intent on the given element.
- * The type of rendering intent, identified by one of the
- * SVGRenderingIntent constants.
- */
-unsigned short getRenderingIntent()
-{
-}
-
-/**
- * Get the attribute rendering-intent on the given element.
- */
-void setRenderingIntent(unsigned short val) throw (DOMException)
-{
-}
-
-
-//####################################################################
-//# SVGComponentTransferFunctionElement
-//####################################################################
-
-/**
- * Corresponds to attribute type on the given element. Takes one
- * of the Component Transfer Types.
- */
-SVGAnimatedEnumeration getType()
-{
-}
-
-/**
- * Corresponds to attribute tableValues on the given element.
- */
-SVGAnimatedNumberList getTableValues()
-{
-}
-
-/**
- * Corresponds to attribute slope on the given element.
- */
-SVGAnimatedNumber getSlope()
-{
-}
-
-/**
- * Corresponds to attribute intercept on the given element.
- */
-SVGAnimatedNumber getIntercept()
-{
-}
-
-/**
- * Corresponds to attribute amplitude on the given element.
- */
-SVGAnimatedNumber getAmplitude()
-{
-}
-
-/**
- * Corresponds to attribute exponent on the given element.
- */
-SVGAnimatedNumber getExponent()
-{
-}
-
-/**
- * Corresponds to attribute offset on the given element.
- */
-SVGAnimatedNumber getOffset()
-{
-}
-
-//####################################################################
-//# SVGCursorElement
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getY()
-{
-}
-
-
-//####################################################################
-//# SVGDefinitionSrcElement
-//####################################################################
-
-//####################################################################
-//# SVGDefsElement
-//####################################################################
-
-//####################################################################
-//# SVGDescElement
-//####################################################################
-
-//####################################################################
-//# SVGEllipseElement
-//####################################################################
-
-/**
- * Corresponds to attribute cx on the given 'ellipse' element.
- */
-SVGAnimatedLength getCx()
-{
-}
-
-/**
- * Corresponds to attribute cy on the given 'ellipse' element.
- */
-SVGAnimatedLength getCy()
-{
-}
-
-/**
- * Corresponds to attribute rx on the given 'ellipse' element.
- */
-SVGAnimatedLength getRx()
-{
-}
-
-/**
- * Corresponds to attribute ry on the given 'ellipse' element.
- */
-SVGAnimatedLength getRy()
-{
-}
-
-
-//####################################################################
-//# SVGFEBlendElement
-//####################################################################
-
-/**
- * Corresponds to attribute in on the given 'feBlend' element.
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- * Corresponds to attribute in2 on the given 'feBlend' element.
- */
-SVGAnimatedString getIn2()
-{
-}
-
-/**
- * Corresponds to attribute mode on the given 'feBlend' element.
- * Takes one of the Blend Mode Types.
- */
-SVGAnimatedEnumeration getMode()
-{
-}
-
-
-//####################################################################
-//# SVGFEColorMatrixElement
-//####################################################################
-
-/**
- * Corresponds to attribute in on the given 'feColorMatrix' element.
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- * Corresponds to attribute type on the given 'feColorMatrix' element.
- * Takes one of the Color Matrix Types.
- */
-SVGAnimatedEnumeration getType()
-{
-}
-
-/**
- * Corresponds to attribute values on the given 'feColorMatrix' element.
- * Provides access to the contents of the values attribute.
- */
-SVGAnimatedNumberList getValues()
-{
-}
-
-
-//####################################################################
-//# SVGFEComponentTransferElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute in on the given 'feComponentTransfer' element.
- */
-SVGAnimatedString getIn1()
-{
-}
-
-//####################################################################
-//# SVGFECompositeElement
-//####################################################################
-
-/**
- * Corresponds to attribute in on the given 'feComposite' element.
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- * Corresponds to attribute in2 on the given 'feComposite' element.
- */
-SVGAnimatedString getIn2()
-{
-}
-
-/**
- * Corresponds to attribute operator on the given 'feComposite' element.
- * Takes one of the Composite Operators.
- */
-SVGAnimatedEnumeration getOperator()
-{
-}
-
-/**
- * Corresponds to attribute k1 on the given 'feComposite' element.
- */
-SVGAnimatedNumber getK1()
-{
-}
-
-/**
- * Corresponds to attribute k2 on the given 'feComposite' element.
- */
-SVGAnimatedNumber getK2()
-{
-}
-
-/**
- * Corresponds to attribute k3 on the given 'feComposite' element.
- */
-SVGAnimatedNumber getK3()
-{
-}
-
-/**
- * Corresponds to attribute k4 on the given 'feComposite' element.
- */
-SVGAnimatedNumber getK4()
-{
-}
-
-
-//####################################################################
-//# SVGFEConvolveMatrixElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute order on the given 'feConvolveMatrix' element.
- */
-SVGAnimatedInteger getOrderX()
-{
-}
-
-/**
- * Corresponds to attribute order on the given 'feConvolveMatrix' element.
- */
-SVGAnimatedInteger getOrderY()
-{
-}
-
-/**
- * Corresponds to attribute kernelMatrix on the given element.
- */
-SVGAnimatedNumberList getKernelMatrix()
-{
-}
-
-/**
- * Corresponds to attribute divisor on the given 'feConvolveMatrix' element.
- */
-SVGAnimatedNumber getDivisor()
-{
-}
-
-/**
- * Corresponds to attribute bias on the given 'feConvolveMatrix' element.
- */
-SVGAnimatedNumber getBias()
-{
-}
-
-/**
- * Corresponds to attribute targetX on the given 'feConvolveMatrix' element.
- */
-SVGAnimatedInteger getTargetX()
-{
-}
-
-/**
- * Corresponds to attribute targetY on the given 'feConvolveMatrix' element.
- */
-SVGAnimatedInteger getTargetY()
-{
-}
-
-/**
- * Corresponds to attribute edgeMode on the given 'feConvolveMatrix'
- * element. Takes one of the Edge Mode Types.
- */
-SVGAnimatedEnumeration getEdgeMode()
-{
-}
-
-/**
- * Corresponds to attribute kernelUnitLength on the
- * given 'feConvolveMatrix' element.
- */
-SVGAnimatedLength getKernelUnitLengthX()
-{
-}
-
-/**
- * Corresponds to attribute kernelUnitLength on the given
- * 'feConvolveMatrix' element.
- */
-SVGAnimatedLength getKernelUnitLengthY()
-{
-}
-
-/**
- * Corresponds to attribute preserveAlpha on the
- * given 'feConvolveMatrix' element.
- */
-SVGAnimatedBoolean getPreserveAlpha()
-{
-}
-
-
-
-//####################################################################
-//# SVGFEDiffuseLightingElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute in on the given 'feDiffuseLighting' element.
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- * Corresponds to attribute surfaceScale on the given
- * 'feDiffuseLighting' element.
- */
-SVGAnimatedNumber getSurfaceScale()
-{
-}
-
-/**
- * Corresponds to attribute diffuseConstant on the given
- * 'feDiffuseLighting' element.
- */
-SVGAnimatedNumber getDiffuseConstant()
-{
-}
-
-/**
- * Corresponds to attribute kernelUnitLength on the given
- * 'feDiffuseLighting' element.
- */
-SVGAnimatedNumber getKernelUnitLengthX()
-{
-}
-
-/**
- * Corresponds to attribute kernelUnitLength on the given
- * 'feDiffuseLighting' element.
- */
-SVGAnimatedNumber getKernelUnitLengthY()
-{
-}
-
-
-
-
-//####################################################################
-//# SVGFEDisplacementMapElement
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- *
- */
-SVGAnimatedString getIn2()
-{
-}
-
-
-/**
- *
- */
-SVGAnimatedNumber getScale()
-{
-}
-
-/**
- *
- */
-SVGAnimatedEnumeration getXChannelSelector()
-{
-}
-
-/**
- *
- */
-SVGAnimatedEnumeration getYChannelSelector()
-{
-}
-
-//####################################################################
-//# SVGFEDistantLightElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute azimuth on the given 'feDistantLight' element.
- */
-SVGAnimatedNumber getAzimuth()
-{
-}
-
-
-/**
- * Corresponds to attribute elevation on the given 'feDistantLight'
- * element
- */
-SVGAnimatedNumber getElevation()
-{
-}
-
-
-//####################################################################
-//# SVGFEFloodElement
-//####################################################################
-
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-
-//####################################################################
-//# SVGFEFuncAElement
-//####################################################################
-
-//####################################################################
-//# SVGFEFuncBElement
-//####################################################################
-
-//####################################################################
-//# SVGFEFuncGElement
-//####################################################################
-
-//####################################################################
-//# SVGFEFuncRElement
-//####################################################################
-
-
-//####################################################################
-//# SVGFEGaussianBlurElement
-//####################################################################
-
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-
-/**
- *
- */
-SVGAnimatedNumber getStdDeviationX()
-{
-}
-
-/**
- *
- */
-SVGAnimatedNumber getStdDeviationY()
-{
-}
-
-
-/**
- *
- */
-void setStdDeviation(double stdDeviationX, double stdDeviationY)
-{
-}
-
-
-//####################################################################
-//# SVGFEImageElement
-//####################################################################
-
-
-//####################################################################
-//# SVGFEMergeElement
-//####################################################################
-
-//####################################################################
-//# SVGFEMergeNodeElement
-//####################################################################
-
-//####################################################################
-//# SVGFEMorphologyElement
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-
-/**
- *
- */
-SVGAnimatedEnumeration getOperator()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getRadiusX()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getRadiusY()
-{
-}
-
-//####################################################################
-//# SVGFEOffsetElement
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getDx()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getDy()
-{
-}
-
-
-//####################################################################
-//# SVGFEPointLightElement
-//####################################################################
-
-/**
- * Corresponds to attribute x on the given 'fePointLight' element.
- */
-SVGAnimatedNumber getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'fePointLight' element.
- */
-SVGAnimatedNumber getY()
-{
-}
-
-/**
- * Corresponds to attribute z on the given 'fePointLight' element.
- */
-SVGAnimatedNumber getZ()
-{
-}
-
-//####################################################################
-//# SVGFESpecularLightingElement
-//####################################################################
-
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-/**
- *
- */
-SVGAnimatedNumber getSurfaceScale()
-{
-}
-
-/**
- *
- */
-SVGAnimatedNumber getSpecularConstant()
-{
-}
-
-/**
- *
- */
-SVGAnimatedNumber getSpecularExponent()
-{
-}
-
-
-//####################################################################
-//# SVGFESpotLightElement
-//####################################################################
-
-/**
- * Corresponds to attribute x on the given 'feSpotLight' element.
- */
-SVGAnimatedNumber getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'feSpotLight' element.
- */
-SVGAnimatedNumber getY()
-{
-}
-
-/**
- * Corresponds to attribute z on the given 'feSpotLight' element.
- */
-SVGAnimatedNumber getZ()
-{
-}
-
-/**
- * Corresponds to attribute pointsAtX on the given 'feSpotLight' element.
- */
-SVGAnimatedNumber getPointsAtX()
-{
-}
-
-/**
- * Corresponds to attribute pointsAtY on the given 'feSpotLight' element.
- */
-SVGAnimatedNumber getPointsAtY()
-{
-}
-
-/**
- * Corresponds to attribute pointsAtZ on the given 'feSpotLight' element.
- */
-SVGAnimatedNumber getPointsAtZ()
-{
-}
-
-/**
- * Corresponds to attribute specularExponent on the
- * given 'feSpotLight' element.
- */
-SVGAnimatedNumber getSpecularExponent()
-{
-}
-
-/**
- * Corresponds to attribute limitingConeAngle on the
- * given 'feSpotLight' element.
- */
-SVGAnimatedNumber getLimitingConeAngle()
-{
-}
-
-
-//####################################################################
-//# SVGFETileElement
-//####################################################################
-
-
-/**
- *
- */
-SVGAnimatedString getIn1()
-{
-}
-
-
-//####################################################################
-//# SVGFETurbulenceElement
-//####################################################################
-
-
-/**
- *
- */
-SVGAnimatedNumber getBaseFrequencyX()
-{
-}
-
-/**
- *
- */
-SVGAnimatedNumber getBaseFrequencyY()
-{
-}
-
-/**
- *
- */
-SVGAnimatedInteger getNumOctaves()
-{
-}
-
-/**
- *
- */
-SVGAnimatedNumber getSeed()
-{
-}
-
-/**
- *
- */
-SVGAnimatedEnumeration getStitchTiles()
-{
-}
-
-/**
- *
- */
-SVGAnimatedEnumeration getType()
-{
-}
-
-
-
-//####################################################################
-//# SVGFilterElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute filterUnits on the given 'filter' element. Takes one
- * of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getFilterUnits()
-{
-}
-
-/**
- * Corresponds to attribute primitiveUnits on the given 'filter' element. Takes
- * one of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getPrimitiveUnits()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute x on the given 'filter' element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'filter' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'filter' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-
-/**
- * Corresponds to attribute filterRes on the given 'filter' element.
- * Contains the X component of attribute filterRes.
- */
-SVGAnimatedInteger getFilterResX()
-{
-}
-
-/**
- * Corresponds to attribute filterRes on the given 'filter' element.
- * Contains the Y component(possibly computed automatically)
- * of attribute filterRes.
- */
-SVGAnimatedInteger getFilterResY()
-{
-}
-
-/**
- * Sets the values for attribute filterRes.
- */
-void setFilterRes(unsigned long filterResX, unsigned long filterResY)
-{
-}
-
-
-//####################################################################
-//# SVGFontElement
-//####################################################################
-
-//####################################################################
-//# SVGFontFaceElement
-//####################################################################
-
-//####################################################################
-//# SVGFontFaceFormatElement
-//####################################################################
-
-//####################################################################
-//# SVGFontFaceNameElement
-//####################################################################
-
-//####################################################################
-//# SVGFontFaceSrcElement
-//####################################################################
-
-//####################################################################
-//# SVGFontFaceUriElement
-//####################################################################
-
-//####################################################################
-//# SVGForeignObjectElement
-//####################################################################
-
-/**
- *
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-
-
-//####################################################################
-//# SVGGlyphRefElement
-//####################################################################
-
-
-/**
- * Get the attribute glyphRef on the given element.
- */
-DOMString getGlyphRef()
-{
-}
-
-/**
- * Set the attribute glyphRef on the given element.
- */
-void setGlyphRef(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute format on the given element.
- */
-DOMString getFormat()
-{
-}
-
-/**
- * Set the attribute format on the given element.
- */
-void setFormat(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute x on the given element.
- */
-double getX()
-{
-}
-
-/**
- * Set the attribute x on the given element.
- */
-void setX(double val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute y on the given element.
- */
-double getY()
-{
-}
-
-/**
- * Set the attribute y on the given element.
- */
-void setY(double val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute dx on the given element.
- */
-double getDx()
-{
-}
-
-/**
- * Set the attribute dx on the given element.
- */
-void setDx(double val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute dy on the given element.
- */
-double getDy()
-{
-}
-
-/**
- * Set the attribute dy on the given element.
- */
-void setDy(double val) throw (DOMException)
-{
-}
-
-
-//####################################################################
-//# SVGGradientElement
-//####################################################################
-
-/**
- * Corresponds to attribute gradientUnits on the given element.
- * Takes one of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getGradientUnits()
-{
-}
-
-/**
- * Corresponds to attribute gradientTransform on the given element.
- */
-SVGAnimatedTransformList getGradientTransform()
-{
-}
-
-/**
- * Corresponds to attribute spreadMethod on the given element.
- * One of the Spread Method Types.
- */
-SVGAnimatedEnumeration getSpreadMethod()
-{
-}
-
-
-
-//####################################################################
-//# SVGHKernElement
-//####################################################################
-
-//####################################################################
-//# SVGImageElement
-//####################################################################
-
-/**
- * Corresponds to attribute x on the given 'image' element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'image' element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute width on the given 'image' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'image' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-
-/**
- * Corresponds to attribute preserveAspectRatio on the given element.
- */
-SVGAnimatedPreserveAspectRatio getPreserveAspectRatio()
-{
-}
-
-//####################################################################
-//# SVGLinearGradientElement
-//####################################################################
-
-/**
- * Corresponds to attribute x1 on the given 'linearGradient' element.
- */
-SVGAnimatedLength getX1()
-{
-}
-
-/**
- * Corresponds to attribute y1 on the given 'linearGradient' element.
- */
-SVGAnimatedLength getY1()
-{
-}
-
-/**
- * Corresponds to attribute x2 on the given 'linearGradient' element.
- */
-SVGAnimatedLength getX2()
-{
-}
-
-/**
- * Corresponds to attribute y2 on the given 'linearGradient' element.
- */
-SVGAnimatedLength getY2()
-{
-}
-
-
-
-//####################################################################
-//# SVGLineElement
-//####################################################################
-
-/**
- * Corresponds to attribute x1 on the given 'line' element.
- */
-SVGAnimatedLength getX1()
-{
-}
-
-/**
- * Corresponds to attribute y1 on the given 'line' element.
- */
-SVGAnimatedLength getY1()
-{
-}
-
-/**
- * Corresponds to attribute x2 on the given 'line' element.
- */
-SVGAnimatedLength getX2()
-{
-}
-
-/**
- * Corresponds to attribute y2 on the given 'line' element.
- */
-SVGAnimatedLength getY2()
-{
-}
-
-
-//####################################################################
-//# SVGMarkerElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute refX on the given 'marker' element.
- */
-SVGAnimatedLength getRefX()
-{
-}
-
-/**
- * Corresponds to attribute refY on the given 'marker' element.
- */
-SVGAnimatedLength getRefY()
-{
-}
-
-/**
- * Corresponds to attribute markerUnits on the given 'marker' element.
- * One of the Marker Units Types defined above.
- */
-SVGAnimatedEnumeration getMarkerUnits()
-{
-}
-
-/**
- * Corresponds to attribute markerWidth on the given 'marker' element.
- */
-SVGAnimatedLength getMarkerWidth()
-{
-}
-
-/**
- * Corresponds to attribute markerHeight on the given 'marker' element.
- */
-SVGAnimatedLength getMarkerHeight()
-{
-}
-
-/**
- * Corresponds to attribute orient on the given 'marker' element.
- * One of the Marker Orientation Types defined above.
- */
-SVGAnimatedEnumeration getOrientType()
-{
-}
-
-/**
- * Corresponds to attribute orient on the given 'marker' element.
- * If markerUnits is SVG_MARKER_ORIENT_ANGLE, the angle value for
- * attribute orient ; otherwise, it will be set to zero.
- */
-SVGAnimatedAngle getOrientAngle()
-{
-}
-
-
-/**
- * Sets the value of attribute orient to 'auto'.
- */
-void setOrientToAuto()
-{
-}
-
-/**
- * Sets the value of attribute orient to the given angle.
- */
-void setOrientToAngle(const SVGAngle &angle)
-{
-}
-
-
-//####################################################################
-//# SVGMaskElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute maskUnits on the given 'mask' element. Takes one of
- * the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getMaskUnits()
-{
-}
-
-/**
- * Corresponds to attribute maskContentUnits on the given 'mask' element. Takes
- * one of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getMaskContentUnits()
-{
-}
-
-/**
- * Corresponds to attribute x on the given 'mask' element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'mask' element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute width on the given 'mask' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'mask' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-//####################################################################
-//# SVGMetadataElement
-//####################################################################
-
-//####################################################################
-//# SVGMissingGlyphElement
-//####################################################################
-
-//####################################################################
-//# SVGMPathElement
-//####################################################################
-
-//####################################################################
-//# SVGPathElement
-//####################################################################
-
-/**
- * Corresponds to attribute pathLength on the given 'path' element.
- */
-SVGAnimatedNumber getPathLength()
-{
-}
-
-/**
- * Returns the user agent's computed value for the total length of the path using
- * the user agent's distance-along-a-path algorithm, as a distance in the current
- * user coordinate system.
- */
-double getTotalLength()
-{
-}
-
-/**
- * Returns the(x,y) coordinate in user space which is distance units along the
- * path, utilizing the user agent's distance-along-a-path algorithm.
- */
-SVGPoint getPointAtLength(double distance)
-{
-}
-
-/**
- * Returns the index into pathSegList which is distance units along the path,
- * utilizing the user agent's distance-along-a-path algorithm.
- */
-unsigned long getPathSegAtLength(double distance)
-{
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegClosePath object.
- */
-SVGPathSeg createSVGPathSegClosePath()
-{
- SVGPathSeg seg(PATHSEG_CLOSEPATH);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegMovetoAbs object.
- */
-SVGPathSeg createSVGPathSegMovetoAbs(double x, double y)
-{
- SVGPathSeg seg(PATHSEG_MOVETO_ABS);
- seg.setX(x);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegMovetoRel object.
- */
-SVGPathSeg createSVGPathSegMovetoRel(double x, double y)
-{
- SVGPathSeg seg(PATHSEG_MOVETO_REL);
- seg.setX(x);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegLinetoAbs object.
- */
-SVGPathSeg createSVGPathSegLinetoAbs(double x, double y)
-{
- SVGPathSeg seg(PATHSEG_LINETO_ABS);
- seg.setX(x);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegLinetoRel object.
- */
-SVGPathSeg createSVGPathSegLinetoRel(double x, double y)
-{
- SVGPathSeg seg(PATHSEG_LINETO_REL);
- seg.setX(x);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicAbs object.
- */
-SVGPathSeg createSVGPathSegCurvetoCubicAbs(double x, double y,
- double x1, double y1, double x2, double y2)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_ABS);
- seg.setX(x);
- seg.setY(y);
- seg.setX1(x1);
- seg.setY1(y1);
- seg.setX2(x2);
- seg.setY2(y2);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicRel object.
- */
-SVGPathSeg createSVGPathSegCurvetoCubicRel(double x, double y,
- double x1, double y1, double x2, double y2)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_REL);
- seg.setX(x);
- seg.setY(y);
- seg.setX1(x1);
- seg.setY1(y1);
- seg.setX2(x2);
- seg.setY2(y2);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticAbs object.
- */
-SVGPathSeg createSVGPathSegCurvetoQuadraticAbs(double x, double y,
- double x1, double y1)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_ABS);
- seg.setX(x);
- seg.setY(y);
- seg.setX1(x1);
- seg.setY1(y1);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticRel object.
- */
-SVGPathSeg createSVGPathSegCurvetoQuadraticRel(double x, double y,
- double x1, double y1)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_REL);
- seg.setX(x);
- seg.setY(y);
- seg.setX1(x1);
- seg.setY1(y1);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegArcAbs object.
- */
-SVGPathSeg createSVGPathSegArcAbs(double x, double y,
- double r1, double r2, double angle,
- bool largeArcFlag, bool sweepFlag)
-{
- SVGPathSeg seg(PATHSEG_ARC_ABS);
- seg.setX(x);
- seg.setY(y);
- seg.setR1(r1);
- seg.setR2(r2);
- seg.setAngle(angle);
- seg.setLargeArcFlag(largeArcFlag);
- seg.setSweepFlag(sweepFlag);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegArcRel object.
- */
-SVGPathSeg createSVGPathSegArcRel(double x, double y, double r1,
- double r2, double angle, bool largeArcFlag,
- bool sweepFlag)
-{
- SVGPathSeg seg(PATHSEG_ARC_REL);
- seg.setX(x);
- seg.setY(y);
- seg.setR1(r1);
- seg.setR2(r2);
- seg.setAngle(angle);
- seg.setLargeArcFlag(largeArcFlag);
- seg.setSweepFlag(sweepFlag);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalAbs object.
- */
-SVGPathSeg createSVGPathSegLinetoHorizontalAbs(double x)
-{
- SVGPathSeg seg(PATHSEG_LINETO_HORIZONTAL_ABS);
- seg.setX(x);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalRel object.
- */
-SVGPathSeg createSVGPathSegLinetoHorizontalRel(double x)
-{
- SVGPathSeg seg(PATHSEG_LINETO_HORIZONTAL_REL);
- seg.setX(x);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegLinetoVerticalAbs object.
- */
-SVGPathSeg createSVGPathSegLinetoVerticalAbs(double y)
-{
- SVGPathSeg seg(PATHSEG_LINETO_VERTICAL_ABS);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegLinetoVerticalRel object.
- */
-SVGPathSeg createSVGPathSegLinetoVerticalRel(double y)
-{
- SVGPathSeg seg(PATHSEG_LINETO_VERTICAL_REL);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothAbs object.
- */
-SVGPathSeg createSVGPathSegCurvetoCubicSmoothAbs(double x, double y,
- double x2, double y2)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_SMOOTH_ABS);
- seg.setX(x);
- seg.setY(y);
- seg.setX2(x2);
- seg.setY2(y2);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothRel object.
- */
-SVGPathSeg createSVGPathSegCurvetoCubicSmoothRel(double x, double y,
- double x2, double y2)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_SMOOTH_REL);
- seg.setX(x);
- seg.setY(y);
- seg.setX2(x2);
- seg.setY2(y2);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothAbs
- * object.
- */
-SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothAbs(double x, double y)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS);
- seg.setX(x);
- seg.setY(y);
- return seg;
-}
-
-/**
- * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothRel
- * object.
- */
-SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothRel(double x, double y)
-{
- SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL);
- seg.setX(x);
- seg.setY(y);
- return seg;
-}
-
-
-//####################################################################
-//# SVGPatternElement
-//####################################################################
-
-/**
- * Corresponds to attribute patternUnits on the given 'pattern' element.
- * Takes one of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getPatternUnits()
-{
-}
-
-/**
- * Corresponds to attribute patternContentUnits on the given 'pattern'
- * element. Takes one of the constants defined in SVGUnitTypes.
- */
-SVGAnimatedEnumeration getPatternContentUnits()
-{
-}
-
-/**
- * Corresponds to attribute patternTransform on the given 'pattern' element.
- */
-SVGAnimatedTransformList getPatternTransform()
-{
-}
-
-/**
- * Corresponds to attribute x on the given 'pattern' element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- *
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute width on the given 'pattern' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'pattern' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-
-//####################################################################
-//# SVGPolyLineElement
-//####################################################################
-
-//####################################################################
-//# SVGPolygonElement
-//####################################################################
-
-
-//####################################################################
-//# SVGRadialGradientElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute cx on the given 'radialGradient' element.
- */
-SVGAnimatedLength getCx()
-{
-}
-
-
-/**
- * Corresponds to attribute cy on the given 'radialGradient' element.
- */
-SVGAnimatedLength getCy()
-{
-}
-
-
-/**
- * Corresponds to attribute r on the given 'radialGradient' element.
- */
-SVGAnimatedLength getR()
-{
-}
-
-
-/**
- * Corresponds to attribute fx on the given 'radialGradient' element.
- */
-SVGAnimatedLength getFx()
-{
-}
-
-
-/**
- * Corresponds to attribute fy on the given 'radialGradient' element.
- */
-SVGAnimatedLength getFy()
-{
-}
-
-
-//####################################################################
-//# SVGRectElement
-//####################################################################
-
-/**
- * Corresponds to attribute x on the given 'rect' element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'rect' element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute width on the given 'rect' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'rect' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-
-/**
- * Corresponds to attribute rx on the given 'rect' element.
- */
-SVGAnimatedLength getRx()
-{
-}
-
-/**
- * Corresponds to attribute ry on the given 'rect' element.
- */
-SVGAnimatedLength getRy()
-{
-}
-
-
-//####################################################################
-//# SVGScriptElement
-//####################################################################
-
-/**
- *
- */
-DOMString getType()
-{
-}
-
-/**
- *
- */
-void setType(const DOMString &val) throw (DOMException)
-{
-}
-
-//####################################################################
-//# SVGSetElement
-//####################################################################
-
-//####################################################################
-//# SVGStopElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute offset on the given 'stop' element.
- */
-SVGAnimatedNumber getOffset()
-{
-}
-
-
-//####################################################################
-//# SVGStyleElement
-//####################################################################
-
-/**
- * Get the attribute xml:space on the given element.
- */
-DOMString getXmlspace()
-{
-}
-
-/**
- * Set the attribute xml:space on the given element.
- */
-void setXmlspace(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute type on the given 'style' element.
- */
-DOMString getType()
-{
-}
-
-/**
- * Set the attribute type on the given 'style' element.
- */
-void setType(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute media on the given 'style' element.
- */
-DOMString getMedia()
-{
-}
-
-/**
- * Set the attribute media on the given 'style' element.
- */
-void setMedia(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * Get the attribute title on the given 'style' element.
- */
-DOMString getTitle()
-{
-}
-
-/**
- * Set the attribute title on the given 'style' element.
- */
-void setTitle(const DOMString &val) throw (DOMException)
-{
-}
-
-//####################################################################
-//# SVGSymbolElement
-//####################################################################
-
-//####################################################################
-//# SVGSVGElement
-//####################################################################
-
-/**
- * Corresponds to attribute x on the given 'svg' element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'svg' element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute width on the given 'svg' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'svg' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-/**
- * Get the attribute contentScriptType on the given 'svg' element.
- */
-DOMString getContentScriptType()
-{
-}
-
-/**
- * Set the attribute contentScriptType on the given 'svg' element.
- */
-void setContentScriptType(const DOMString &val) throw (DOMException)
-{
-}
-
-
-/**
- * Get the attribute contentStyleType on the given 'svg' element.
- */
-DOMString getContentStyleType()
-{
-}
-
-/**
- * Set the attribute contentStyleType on the given 'svg' element.
- */
-void setContentStyleType(const DOMString &val) throw (DOMException)
-{
-}
-
-/**
- * The position and size of the viewport(implicit or explicit) that corresponds
- * to this 'svg' element. When the user agent is actually rendering the content,
- * then the position and size values represent the actual values when rendering.
- * The position and size values are unitless values in the coordinate system of
- * the parent element. If no parent element exists(i.e., 'svg' element
- * represents the root of the document tree), if this SVG document is embedded as
- * part of another document(e.g., via the HTML 'object' element), then the
- * position and size are unitless values in the coordinate system of the parent
- * document.(If the parent uses CSS or XSL layout, then unitless values
- * represent pixel units for the current CSS or XSL viewport, as described in the
- * CSS2 specification.) If the parent element does not have a coordinate system,
- * then the user agent should provide reasonable default values for this attribute.
- */
-SVGRect getViewport()
-{
-}
-
-/**
- * Size of a pixel units(as defined by CSS2) along the x-axis of the viewport,
- * which represents a unit somewhere in the range of 70dpi to 120dpi, and, on
- * systems that support this, might actually match the characteristics of the
- * target medium. On systems where it is impossible to know the size of a pixel,
- * a suitable default pixel size is provided.
- */
-double getPixelUnitToMillimeterX()
-{
-}
-
-/**
- * Corresponding size of a pixel unit along the y-axis of the viewport.
- */
-double getPixelUnitToMillimeterY()
-{
-}
-
-/**
- * User interface(UI) events in DOM Level 2 indicate the screen positions at
- * which the given UI event occurred. When the user agent actually knows the
- * physical size of a "screen unit", this attribute will express that information
-{
-}
- * otherwise, user agents will provide a suitable default value such as .28mm.
- */
-double getScreenPixelToMillimeterX()
-{
-}
-
-/**
- * Corresponding size of a screen pixel along the y-axis of the viewport.
- */
-double getScreenPixelToMillimeterY()
-{
-}
-
-
-/**
- * The initial view(i.e., before magnification and panning) of the current
- * innermost SVG document fragment can be either the "standard" view(i.e., based
- * on attributes on the 'svg' element such as fitBoxToViewport) or to a "custom"
- * view(i.e., a hyperlink into a particular 'view' or other element - see
- * Linking into SVG content: URI fragments and SVG views). If the initial view is
- * the "standard" view, then this attribute is false. If the initial view is a
- * "custom" view, then this attribute is true.
- */
-bool getUseCurrentView()
-{
-}
-
-/**
- * Set the value above
- */
-void setUseCurrentView(bool val) throw (DOMException)
-{
-}
-
-/**
- * The definition of the initial view(i.e., before magnification and panning) of
- * the current innermost SVG document fragment. The meaning depends on the
- * situation:
- *
- * * If the initial view was a "standard" view, then:
- * o the values for viewBox, preserveAspectRatio and zoomAndPan within
- * currentView will match the values for the corresponding DOM attributes that
- * are on SVGSVGElement directly
- * o the values for transform and viewTarget within currentView will be null
- * * If the initial view was a link into a 'view' element, then:
- * o the values for viewBox, preserveAspectRatio and zoomAndPan within
- * currentView will correspond to the corresponding attributes for the given
- * 'view' element
- * o the values for transform and viewTarget within currentView will be null
- * * If the initial view was a link into another element(i.e., other than a
- * 'view'), then:
- * o the values for viewBox, preserveAspectRatio and zoomAndPan within
- * currentView will match the values for the corresponding DOM attributes that
- * are on SVGSVGElement directly for the closest ancestor 'svg' element
- * o the values for transform within currentView will be null
- * o the viewTarget within currentView will represent the target of the link
- * * If the initial view was a link into the SVG document fragment using an SVG
- * view specification fragment identifier(i.e., #svgView(...)), then:
- * o the values for viewBox, preserveAspectRatio, zoomAndPan, transform and
- * viewTarget within currentView will correspond to the values from the SVG view
- * specification fragment identifier
- *
- */
-SVGViewSpec getCurrentView()
-{
-}
-
-
-/**
- * This attribute indicates the current scale factor relative to the initial view
- * to take into account user magnification and panning operations, as described
- * under Magnification and panning. DOM attributes currentScale and
- * currentTranslate are equivalent to the 2x3 matrix [a b c d e f] =
- * [currentScale 0 0 currentScale currentTranslate.x currentTranslate.y]. If
- * "magnification" is enabled(i.e., zoomAndPan="magnify"), then the effect is as
- * if an extra transformation were placed at the outermost level on the SVG
- * document fragment(i.e., outside the outermost 'svg' element).
- */
-double getCurrentScale()
-{
-}
-
-/**
- * Set the value above.
- */
-void setCurrentScale(double val) throw (DOMException)
-{
-}
-
-/**
- * The corresponding translation factor that takes into account
- * user "magnification".
- */
-SVGPoint getCurrentTranslate()
-{
-}
-
-/**
- * Takes a time-out value which indicates that redraw shall not occur until:(a)
- * the corresponding unsuspendRedraw(suspend_handle_id) call has been made,(b)
- * an unsuspendRedrawAll() call has been made, or(c) its timer has timed out. In
- * environments that do not support interactivity(e.g., print media), then
- * redraw shall not be suspended. suspend_handle_id =
- * suspendRedraw(max_wait_milliseconds) and unsuspendRedraw(suspend_handle_id)
- * must be packaged as balanced pairs. When you want to suspend redraw actions as
- * a collection of SVG DOM changes occur, then precede the changes to the SVG DOM
- * with a method call similar to suspend_handle_id =
- * suspendRedraw(max_wait_milliseconds) and follow the changes with a method call
- * similar to unsuspendRedraw(suspend_handle_id). Note that multiple
- * suspendRedraw calls can be used at once and that each such method call is
- * treated independently of the other suspendRedraw method calls.
- */
-unsigned long suspendRedraw(unsigned long max_wait_milliseconds)
-{
-}
-
-/**
- * Cancels a specified suspendRedraw() by providing a unique suspend_handle_id.
- */
-void unsuspendRedraw(unsigned long suspend_handle_id) throw (DOMException)
-{
-}
-
-/**
- * Cancels all currently active suspendRedraw() method calls. This method is most
- * useful at the very end of a set of SVG DOM calls to ensure that all pending
- * suspendRedraw() method calls have been cancelled.
- */
-void unsuspendRedrawAll()
-{
-}
-
-/**
- * In rendering environments supporting interactivity, forces the user agent to
- * immediately redraw all regions of the viewport that require updating.
- */
-void forceRedraw()
-{
-}
-
-/**
- * Suspends(i.e., pauses) all currently running animations that are defined
- * within the SVG document fragment corresponding to this 'svg' element, causing
- * the animation clock corresponding to this document fragment to stand still
- * until it is unpaused.
- */
-void pauseAnimations()
-{
-}
-
-/**
- * Unsuspends(i.e., unpauses) currently running animations that are defined
- * within the SVG document fragment, causing the animation clock to continue from
- * the time at which it was suspended.
- */
-void unpauseAnimations()
-{
-}
-
-/**
- * Returns true if this SVG document fragment is in a paused state.
- */
-bool animationsPaused()
-{
-}
-
-/**
- * Returns the current time in seconds relative to the start time for
- * the current SVG document fragment.
- */
-double getCurrentTime()
-{
-}
-
-/**
- * Adjusts the clock for this SVG document fragment, establishing
- * a new current time.
- */
-void setCurrentTime(double seconds)
-{
-}
-
-/**
- * Returns the list of graphics elements whose rendered content intersects the
- * supplied rectangle, honoring the 'pointer-events' property value on each
- * candidate graphics element.
- */
-NodeList getIntersectionList(const SVGRect &rect,
- const SVGElementPtr referenceElement)
-{
-}
-
-/**
- * Returns the list of graphics elements whose rendered content is entirely
- * contained within the supplied rectangle, honoring the 'pointer-events'
- * property value on each candidate graphics element.
- */
-NodeList getEnclosureList(const SVGRect &rect,
- const SVGElementPtr referenceElement)
-{
-}
-
-/**
- * Returns true if the rendered content of the given element intersects the
- * supplied rectangle, honoring the 'pointer-events' property value on each
- * candidate graphics element.
- */
-bool checkIntersection(const SVGElementPtr element, const SVGRect &rect)
-{
-}
-
-/**
- * Returns true if the rendered content of the given element is entirely
- * contained within the supplied rectangle, honoring the 'pointer-events'
- * property value on each candidate graphics element.
- */
-bool checkEnclosure(const SVGElementPtr element, const SVGRect &rect)
-{
-}
-
-/**
- * Unselects any selected objects, including any selections of text
- * strings and type-in bars.
- */
-void deselectAll()
-{
-}
-
-/**
- * Creates an SVGNumber object outside of any document trees. The object
- * is initialized to a value of zero.
- */
-SVGNumber createSVGNumber()
-{
-}
-
-/**
- * Creates an SVGLength object outside of any document trees. The object
- * is initialized to the value of 0 user units.
- */
-SVGLength createSVGLength()
-{
-}
-
-/**
- * Creates an SVGAngle object outside of any document trees. The object
- * is initialized to the value 0 degrees(unitless).
- */
-SVGAngle createSVGAngle()
-{
-}
-
-/**
- * Creates an SVGPoint object outside of any document trees. The object
- * is initialized to the point(0,0) in the user coordinate system.
- */
-SVGPoint createSVGPoint()
-{
-}
-
-/**
- * Creates an SVGMatrix object outside of any document trees. The object
- * is initialized to the identity matrix.
- */
-SVGMatrix createSVGMatrix()
-{
-}
-
-/**
- * Creates an SVGRect object outside of any document trees. The object
- * is initialized such that all values are set to 0 user units.
- */
-SVGRect createSVGRect()
-{
-}
-
-/**
- * Creates an SVGTransform object outside of any document trees.
- * The object is initialized to an identity matrix transform
- * (SVG_TRANSFORM_MATRIX).
- */
-SVGTransform createSVGTransform()
-{
-}
-
-/**
- * Creates an SVGTransform object outside of any document trees.
- * The object is initialized to the given matrix transform
- * (i.e., SVG_TRANSFORM_MATRIX).
- */
-SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix)
-{
-}
-
-/**
- * Searches this SVG document fragment(i.e., the search is restricted to a
- * subset of the document tree) for an Element whose id is given by elementId. If
- * an Element is found, that Element is returned. If no such element exists,
- * returns null. Behavior is not defined if more than one element has this id.
- */
-ElementPtr getElementById(const DOMString& elementId)
-{
-}
-
-
-//####################################################################
-//# SVGTextElement
-//####################################################################
-
-
-//####################################################################
-//# SVGTextContentElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute textLength on the given element.
- */
-SVGAnimatedLength getTextLength()
-{
-}
-
-
-/**
- * Corresponds to attribute lengthAdjust on the given element. The value must be
- * one of the length adjust constants specified above.
- */
-SVGAnimatedEnumeration getLengthAdjust()
-{
-}
-
-
-/**
- * Returns the total number of characters to be rendered within the current
- * element. Includes characters which are included via a 'tref' reference.
- */
-long getNumberOfChars()
-{
-}
-
-/**
- * The total sum of all of the advance values from rendering all of the
- * characters within this element, including the advance value on the glyphs
- *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
- * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
- * elements. For non-rendering environments, the user agent shall make reasonable
- * assumptions about glyph metrics.
- */
-double getComputedTextLength()
-{
-}
-
-/**
- * The total sum of all of the advance values from rendering the specified
- * substring of the characters, including the advance value on the glyphs
- *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
- * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
- * elements. For non-rendering environments, the user agent shall make reasonable
- * assumptions about glyph metrics.
- */
-double getSubStringLength(unsigned long charnum, unsigned long nchars)
- throw (DOMException)
-{
-}
-
-/**
- * Returns the current text position before rendering the character in the user
- * coordinate system for rendering the glyph(s) that correspond to the specified
- * character. The current text position has already taken into account the
- * effects of any inter-character adjustments due to properties 'kerning',
- * 'letter-spacing' and 'word-spacing' and adjustments due to attributes x, y, dx
- * and dy. If multiple consecutive characters are rendered inseparably(e.g., as
- * a single glyph or a sequence of glyphs), then each of the inseparable
- * characters will return the start position for the first glyph.
- */
-SVGPoint getStartPositionOfChar(unsigned long charnum) throw (DOMException)
-{
-}
-
-/**
- * Returns the current text position after rendering the character in the user
- * coordinate system for rendering the glyph(s) that correspond to the specified
- * character. This current text position does not take into account the effects
- * of any inter-character adjustments to prepare for the next character, such as
- * properties 'kerning', 'letter-spacing' and 'word-spacing' and adjustments due
- * to attributes x, y, dx and dy. If multiple consecutive characters are rendered
- * inseparably(e.g., as a single glyph or a sequence of glyphs), then each of
- * the inseparable characters will return the end position for the last glyph.
- */
-SVGPoint getEndPositionOfChar(unsigned long charnum) throw (DOMException)
-{
-}
-
-/**
- * Returns a tightest rectangle which defines the minimum and maximum X and Y
- * values in the user coordinate system for rendering the glyph(s) that
- * correspond to the specified character. The calculations assume that all glyphs
- * occupy the full standard glyph cell for the font. If multiple consecutive
- * characters are rendered inseparably(e.g., as a single glyph or a sequence of
- * glyphs), then each of the inseparable characters will return the same extent.
- */
-SVGRect getExtentOfChar(unsigned long charnum) throw (DOMException)
-{
-}
-
-/**
- * Returns the rotation value relative to the current user coordinate system used
- * to render the glyph(s) corresponding to the specified character. If multiple
- * glyph(s) are used to render the given character and the glyphs each have
- * different rotations(e.g., due to text-on-a-path), the user agent shall return
- * an average value(e.g., the rotation angle at the midpoint along the path for
- * all glyphs used to render this character). The rotation value represents the
- * rotation that is supplemental to any rotation due to properties
- * 'glyph-orientation-horizontal' and 'glyph-orientation-vertical'; thus, any
- * glyph rotations due to these properties are not included into the returned
- * rotation value. If multiple consecutive characters are rendered inseparably
- *(e.g., as a single glyph or a sequence of glyphs), then each of the
- * inseparable characters will return the same rotation value.
- */
-double getRotationOfChar(unsigned long charnum) throw (DOMException)
-{
-}
-
-/**
- * Returns the index of the character whose corresponding glyph cell bounding box
- * contains the specified point. The calculations assume that all glyphs occupy
- * the full standard glyph cell for the font. If no such character exists, a
- * value of -1 is returned. If multiple such characters exist, the character
- * within the element whose glyphs were rendered last(i.e., take into account
- * any reordering such as for bidirectional text) is used. If multiple
- * consecutive characters are rendered inseparably(e.g., as a single glyph or a
- * sequence of glyphs), then the user agent shall allocate an equal percentage of
- * the text advance amount to each of the contributing characters in determining
- * which of the characters is chosen.
- */
-long getCharNumAtPosition(const SVGPoint &point)
-{
-}
-
-/**
- * Causes the specified substring to be selected just as if the user
- * selected the substring interactively.
- */
-void selectSubString(unsigned long charnum, unsigned long nchars)
- throw (DOMException)
-{
-}
-
-
-
-
-
-//####################################################################
-//# SVGTextPathElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute startOffset on the given 'textPath' element.
- */
-SVGAnimatedLength getStartOffset()
-{
-}
-
-/**
- * Corresponds to attribute method on the given 'textPath' element. The value
- * must be one of the method type constants specified above.
- */
-SVGAnimatedEnumeration getMethod()
-{
-}
-
-/**
- * Corresponds to attribute spacing on the given 'textPath' element.
- * The value must be one of the spacing type constants specified above.
- */
-SVGAnimatedEnumeration getSpacing()
-{
-}
-
-
-//####################################################################
-//# SVGTextPositioningElement
-//####################################################################
-
-
-/**
- * Corresponds to attribute x on the given element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute dx on the given element.
- */
-SVGAnimatedLength getDx()
-{
-}
-
-/**
- * Corresponds to attribute dy on the given element.
- */
-SVGAnimatedLength getDy()
-{
-}
-
-
-/**
- * Corresponds to attribute rotate on the given element.
- */
-SVGAnimatedNumberList getRotate()
-{
-}
-
-
-//####################################################################
-//# SVGTitleElement
-//####################################################################
-
-//####################################################################
-//# SVGTRefElement
-//####################################################################
-
-//####################################################################
-//# SVGTSpanElement
-//####################################################################
-
-//####################################################################
-//# SVGSwitchElement
-//####################################################################
-
-//####################################################################
-//# SVGUseElement
-//####################################################################
-
-/**
- * Corresponds to attribute x on the given 'use' element.
- */
-SVGAnimatedLength getX()
-{
-}
-
-/**
- * Corresponds to attribute y on the given 'use' element.
- */
-SVGAnimatedLength getY()
-{
-}
-
-/**
- * Corresponds to attribute width on the given 'use' element.
- */
-SVGAnimatedLength getWidth()
-{
-}
-
-/**
- * Corresponds to attribute height on the given 'use' element.
- */
-SVGAnimatedLength getHeight()
-{
-}
-
-/**
- * The root of the "instance tree". See description of SVGElementInstance for
- * a discussion on the instance tree.
- * */
-SVGElementInstance getInstanceRoot()
-{
-}
-
-/**
- * If the 'href' attribute is being animated, contains the current animated root
- * of the "instance tree". If the 'href' attribute is not currently being
- * animated, contains the same value as 'instanceRoot'. The root of the "instance
- * tree". See description of SVGElementInstance for a discussion on the instance
- * tree.
- */
-SVGElementInstance getAnimatedInstanceRoot()
-{
-}
-
-
-//####################################################################
-//# SVGVKernElement
-//####################################################################
-
-//####################################################################
-//# SVGViewElement
-//####################################################################
-
-
-/**
- *
- */
-SVGStringList getViewTarget();
-
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-
-/**
- *
- */
-SVGElement::~SVGElement()
-{
-}
-
-
-
-
-/*#########################################################################
-## SVGDocument
-#########################################################################*/
-
-
-/**
- * The title of a document as specified by the title sub-element of the 'svg'
- * root element(i.e., <svg><title>Here is the title</title>...</svg>)
- */
-DOMString SVGDocument::getTitle()
-{
-}
-
-/**
- * Returns the URI of the page that linked to this page. The value is an empty
- * string if the user navigated to the page directly(not through a link, but,
- * for example, via a bookmark).
- */
-DOMString SVGDocument::getReferrer()
-{
-}
-
-
-/**
- * The domain name of the server that served the document, or a null string if
- * the server cannot be identified by a domain name.
- */
-DOMString SVGDocument::getDomain()
-{
-}
-
-
-/**
- * The complete URI of the document.
- */
-DOMString SVGDocument::getURL()
-{
-}
-
-
-/**
- * The root 'svg' element in the document hierarchy.
- */
-SVGElementPtr SVGDocument::getRootElement()
-{
-}
-
-
-/**
- * Overloaded from Document
- *
- */
-ElementPtr SVGDocument::createElement(const DOMString &tagName)
-{
- ElementPtr ptr;
- return ptr;
-}
-
-
-/**
- * Overloaded from Document
- *
- */
-ElementPtr SVGDocument::createElementNS(const DOMString &tagName,
- const DOMString &namespaceURI)
-{
- ElementPtr ptr;
- return ptr;
-}
-
-
-/**
- * The root 'svg' element in the document hierarchy.
- */
-SVGElementPtr SVGDocument::getRootElement()
-{
-}
-
-
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-SVGDocument::~SVGDocument()
-{
-}
-
-
-
-/*#########################################################################
-## GetSVGDocument
-#########################################################################*/
-
-
-/**
- * Returns the SVGDocument object for the referenced SVG document.
- */
-SVGDocumentPtr GetSVGDocument::getSVGDocument()
- throw (DOMException)
-{
- SVGDocumentPtr ptr;
- return ptr;
-}
-
-//##################
-//# Non-API methods
-//##################
-
-/**
- *
- */
-GetSVGDocument::~GetSVGDocument()
-{
-}
-
-
-
-
-
-
-
-} //namespace svg
-} //namespace dom
-} //namespace w3c
-} //namespace org
-
-#endif // __SVG_H__
-/*#########################################################################
-## E N D O F F I L E
-#########################################################################*/
-
+/**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright(C) 2005-2008 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or(at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * =======================================================================
+ * NOTES
+ *
+ * This API follows:
+ * http://www.w3.org/TR/SVG11/svgdom.html
+ *
+ * This file defines the main SVG-DOM Node types. Other non-Node types are
+ * defined in svgtypes.h.
+ *
+ */
+
+#include "svg.h"
+
+#include <math.h>
+
+
+namespace org
+{
+namespace w3c
+{
+namespace dom
+{
+namespace svg
+{
+
+
+
+//########################################################################
+//########################################################################
+//########################################################################
+//# I N T E R F A C E S
+//########################################################################
+//########################################################################
+//########################################################################
+
+
+
+/*#########################################################################
+## SVGMatrix
+#########################################################################*/
+
+/**
+ *
+ */
+double SVGMatrix::getA()
+{
+ return a;
+}
+
+/**
+ *
+ */
+void SVGMatrix::setA(double val) throw (DOMException)
+{
+ a = val;
+}
+
+/**
+ *
+ */
+double SVGMatrix::getB()
+{
+ return b;
+}
+
+/**
+ *
+ */
+void SVGMatrix::setB(double val) throw (DOMException)
+{
+ b = val;
+}
+
+/**
+ *
+ */
+double SVGMatrix::getC()
+{
+ return c;
+}
+
+/**
+ *
+ */
+void SVGMatrix::setC(double val) throw (DOMException)
+{
+ c = val;
+}
+
+/**
+ *
+ */
+double SVGMatrix::getD()
+{
+ return d;
+}
+
+/**
+ *
+ */
+void SVGMatrix::setD(double val) throw (DOMException)
+{
+ d = val;
+}
+
+/**
+ *
+ */
+double SVGMatrix::getE()
+{
+ return e;
+}
+
+/**
+ *
+ */
+void SVGMatrix::setE(double val) throw (DOMException)
+{
+ e = val;
+}
+
+/**
+ *
+ */
+double SVGMatrix::getF()
+{
+ return f;
+}
+
+/**
+ *
+ */
+void SVGMatrix::setF(double val) throw (DOMException)
+{
+ f = val;
+}
+
+
+/**
+ * Return the result of postmultiplying this matrix with another.
+ */
+SVGMatrix SVGMatrix::multiply(const SVGMatrix &other)
+{
+ SVGMatrix result;
+ result.a = a * other.a + c * other.b;
+ result.b = b * other.a + d * other.b;
+ result.c = a * other.c + c * other.d;
+ result.d = b * other.c + d * other.d;
+ result.e = a * other.e + c * other.f + e;
+ result.f = b * other.e + d * other.f + f;
+ return result;
+}
+
+/**
+ * Calculate the inverse of this matrix
+ *
+ */
+SVGMatrix SVGMatrix::inverse() throw (SVGException)
+{
+ /*###########################################
+ The determinant of a 3x3 matrix E
+ (let's use our own notation for a bit)
+
+ A B C
+ D E F
+ G H I
+ is
+ AEI - AFH - BDI + BFG + CDH - CEG
+
+ Since in our affine transforms, G and H==0 and I==1,
+ this reduces to:
+ AE - BD
+ In SVG's naming scheme, that is: a * d - c * b . SIMPLE!
+
+ In a similar method of attack, SVG's adjunct matrix is:
+
+ d -c cf-ed
+ -b a eb-af
+ 0 0 ad-cb
+
+ To get the inverse matrix, we divide the adjunct matrix by
+ the determinant. Notice that (ad-cb)/(ad-cb)==1. Very cool.
+ So what we end up with is this:
+
+ a = d/(ad-cb) c = -c/(ad-cb) e = (cf-ed)/(ad-cb)
+ b = -b/(ad-cb) d = a/(ad-cb) f = (eb-af)/(ad-cb)
+
+ (Since this would be in all SVG-DOM implementations,
+ somebody needed to document this! ^^)
+ #############################################*/
+
+ SVGMatrix result;
+ double determinant = a * d - c * b;
+ if (determinant < 1.0e-18)//invertible?
+ {
+ result.identity();//cop out
+ return result;
+ }
+
+ double idet = 1.0 / determinant;
+ result.a = d * idet;
+ result.b = -b * idet;
+ result.c = -c * idet;
+ result.d = a * idet;
+ result.e = (c*f - e*d) * idet;
+ result.f = (e*b - a*f) * idet;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | 1 0 x |
+ * | 0 1 y |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix SVGMatrix::translate(double x, double y)
+{
+ SVGMatrix result;
+ result.a = a;
+ result.b = b;
+ result.c = c;
+ result.d = d;
+ result.e = a * x + c * y + e;
+ result.f = b * x + d * y + f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | scale 0 0 |
+ * | 0 scale 0 |
+ * | 0 0 1 |
+ *
+ */
+:SVGMatrix SVGMatrix:scale(double scale)
+{
+ SVGMatrix result;
+ result.a = a * scale;
+ result.b = b * scale;
+ result.c = c * scale;
+ result.d = d * scale;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | scaleX 0 0 |
+ * | 0 scaleY 0 |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix SVGMatrix::scaleNonUniform(double scaleX,
+ double scaleY)
+{
+ SVGMatrix result;
+ result.a = a * scaleX;
+ result.b = b * scaleX;
+ result.c = c * scaleY;
+ result.d = d * scaleY;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | cos(a) -sin(a) 0 |
+ * | sin(a) cos(a) 0 |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix SVGMatrix::rotate (double angle)
+{
+ double sina = sin(angle);
+ double msina = -sina;
+ double cosa = cos(angle);
+ SVGMatrix result;
+ result.a = a * cosa + c * sina;
+ result.b = b * cosa + d + sina;
+ result.c = a * msina + c * cosa;
+ result.d = b * msina + d * cosa;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | cos(a) -sin(a) 0 |
+ * | sin(a) cos(a) 0 |
+ * | 0 0 1 |
+ * In this case, angle 'a' is computed as the artangent
+ * of the slope y/x . It is negative if the slope is negative.
+ */
+SVGMatrix SVGMatrix::rotateFromVector(double x, double y)
+ throw (SVGException)
+{
+ double angle = atan(y / x);
+ if (y < 0.0)
+ angle = -angle;
+ SVGMatrix result;
+ double sina = sin(angle);
+ double msina = -sina;
+ double cosa = cos(angle);
+ result.a = a * cosa + c * sina;
+ result.b = b * cosa + d + sina;
+ result.c = a * msina + c * cosa;
+ result.d = b * msina + d * cosa;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | -1 0 0 |
+ * | 0 1 0 |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix SVGMatrix::flipX()
+{
+ SVGMatrix result;
+ result.a = -a;
+ result.b = -b;
+ result.c = c;
+ result.d = d;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | 1 0 0 |
+ * | 0 -1 0 |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix SVGMatrix::flipY()
+{
+ SVGMatrix result;
+ result.a = a;
+ result.b = b;
+ result.c = -c;
+ result.d = -d;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * | 1 tan(a) 0 |
+ * | 0 1 0 |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix SVGMatrix::skewX(double angle)
+{
+ double tana = tan(angle);
+ SVGMatrix result;
+ result.a = a;
+ result.b = b;
+ result.c = a * tana + c;
+ result.d = b * tana + d;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+/**
+ * Equivalent to multiplying by:
+ * | 1 0 0 |
+ * | tan(a) 1 0 |
+ * | 0 0 1 |
+ *
+ */
+SVGMatrix::SVGMatrix SVGMatrix::skewY(double angle)
+{
+ double tana = tan(angle);
+ SVGMatrix result;
+ result.a = a + c * tana;
+ result.b = b + d * tana;
+ result.c = c;
+ result.d = d;
+ result.e = e;
+ result.f = f;
+ return result;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGMatrix::SVGMatrix()
+{
+ identity();
+}
+
+/**
+ *
+ */
+SVGMatrix::SVGMatrix(double aArg, double bArg, double cArg,
+ double dArg, double eArg, double fArg)
+{
+ a = aArg; b = bArg; c = cArg;
+ d = dArg; e = eArg; f = fArg;
+}
+
+/**
+ * Copy constructor
+ */
+SVGMatrix::SVGMatrix(const SVGMatrix &other)
+{
+ a = other.a;
+ b = other.b;
+ c = other.c;
+ d = other.d;
+ e = other.e;
+ f = other.f;
+}
+
+
+
+/**
+ *
+ */
+SVGMatrix::~SVGMatrix()
+{
+}
+
+/*
+ * Set to the identity matrix
+ */
+void SVGMatrix::identity()
+{
+ a = 1.0;
+ b = 0.0;
+ c = 0.0;
+ d = 1.0;
+ e = 0.0;
+ f = 0.0;
+}
+
+
+/*#########################################################################
+## SVGTransform
+#########################################################################*/
+
+/**
+ *
+ */
+unsigned short SVGTransform::getType()
+{
+ return type;
+}
+
+
+/**
+ *
+ */
+SVGMatrix SVGTransform::getMatrix()
+{
+ return matrix;
+}
+
+/**
+ *
+ */
+double SVGTransform::getAngle()
+{
+ return angle;
+}
+
+
+/**
+ *
+ */
+void SVGTransform::setMatrix(const SVGMatrix &matrixArg)
+{
+ type = SVG_TRANSFORM_MATRIX;
+ matrix = matrixArg;
+}
+
+/**
+ *
+ */
+void SVGTransform::setTranslate(double tx, double ty)
+{
+ type = SVG_TRANSFORM_TRANSLATE;
+ matrix.setA(1.0);
+ matrix.setB(0.0);
+ matrix.setC(0.0);
+ matrix.setD(1.0);
+ matrix.setE(tx);
+ matrix.setF(ty);
+}
+
+/**
+ *
+ */
+void SVGTransform::setScale(double sx, double sy)
+{
+ type = SVG_TRANSFORM_SCALE;
+ matrix.setA(sx);
+ matrix.setB(0.0);
+ matrix.setC(0.0);
+ matrix.setD(sy);
+ matrix.setE(0.0);
+ matrix.setF(0.0);
+}
+
+/**
+ *
+ */
+void SVGTransform::setRotate(double angleArg, double cx, double cy)
+{
+ angle = angleArg;
+ setTranslate(cx, cy);
+ type = SVG_TRANSFORM_ROTATE;
+ matrix.rotate(angle);
+}
+
+/**
+ *
+ */
+void SVGTransform::setSkewX(double angleArg)
+{
+ angle = angleArg;
+ type = SVG_TRANSFORM_SKEWX;
+ matrix.identity();
+ matrix.skewX(angle);
+}
+
+/**
+ *
+ */
+void SVGTransform::setSkewY(double angleArg)
+{
+ angle = angleArg;
+ type = SVG_TRANSFORM_SKEWY;
+ matrix.identity();
+ matrix.skewY(angle);
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGTransform::SVGTransform()
+{
+ type = SVG_TRANSFORM_UNKNOWN;
+ angle = 0.0;
+}
+
+/**
+ *
+ */
+SVGTransform::SVGTransform(const SVGTransform &other)
+{
+ type = other.type;
+ angle = other.angle;
+ matrix = other.matrix;
+}
+
+/**
+ *
+ */
+~SVGTransform::SVGTransform()
+{
+}
+
+
+
+/*#########################################################################
+## SVGNumber
+#########################################################################*/
+
+/**
+ *
+ */
+double SVGNumber::getValue()
+{
+ return value;
+}
+
+/**
+ *
+ */
+void SVGNumber::setValue(double val) throw (DOMException)
+{
+ value = val;
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGNumber::SVGNumber()
+{
+ value = 0.0;
+}
+
+/**
+ *
+ */
+SVGNumber::SVGNumber(const SVGNumber &other)
+{
+ value = other.value;
+}
+
+/**
+ *
+ */
+SVGNumber::~SVGNumber()
+{
+}
+
+
+
+/*#########################################################################
+## SVGLength
+#########################################################################*/
+
+
+/**
+ *
+ */
+unsigned short SVGLength::getUnitType()
+{
+ return unitType;
+}
+
+/**
+ *
+ */
+double SVGLength::getValue()
+{
+ return value;
+}
+
+/**
+ *
+ */
+void SVGLength::setValue(double val) throw (DOMException)
+{
+ value = val;
+}
+
+/**
+ *
+ */
+double SVGLength::getValueInSpecifiedUnits()
+{
+ double result = 0.0;
+ //fill this in
+ return result;
+}
+
+/**
+ *
+ */
+void SVGLength::setValueInSpecifiedUnits(double /*val*/)
+ throw (DOMException)
+{
+ //fill this in
+}
+
+/**
+ *
+ */
+DOMString SVGLength::getValueAsString()
+{
+ DOMString ret;
+ char buf[32];
+ snprintf(buf, 31, "%f", value);
+ ret.append(buf);
+ return ret;
+}
+
+/**
+ *
+ */
+void SVGLength::setValueAsString(const DOMString& /*val*/)
+ throw (DOMException)
+{
+}
+
+
+/**
+ *
+ */
+void SVGLength::newValueSpecifiedUnits (unsigned short /*unitType*/, double /*val*/)
+{
+}
+
+/**
+ *
+ */
+void SVGLength::convertToSpecifiedUnits (unsigned short /*unitType*/)
+{
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGLength::SVGLength()
+{
+ unitType = SVG_LENGTHTYPE_UNKNOWN;
+ value = 0.0;
+}
+
+
+/**
+ *
+ */
+SVGLength::SVGLength(const SVGLength &other)
+{
+ unitType = other.unitType;
+ value = other.value;
+}
+
+/**
+ *
+ */
+SVGLength::~SVGLength()
+{
+}
+
+
+
+
+/*#########################################################################
+## SVGAngle
+#########################################################################*/
+
+/**
+ *
+ */
+unsigned short SVGAngle::getUnitType()
+{
+ return unitType;
+}
+
+/**
+ *
+ */
+double SVGAngle::getValue()
+{
+ return value;
+}
+
+/**
+ *
+ */
+void SVGAngle::setValue(double val) throw (DOMException)
+{
+ value = val;
+}
+
+/**
+ *
+ */
+double SVGAngle::getValueInSpecifiedUnits()
+{
+ double result = 0.0;
+ //convert here
+ return result;
+}
+
+/**
+ *
+ */
+void SVGAngle::setValueInSpecifiedUnits(double /*val*/)
+ throw (DOMException)
+{
+ //do conversion
+}
+
+/**
+ *
+ */
+DOMString SVGAngle::getValueAsString()
+{
+ DOMString result;
+ char buf[32];
+ snprintf(buf, 31, "%f", value);
+ result.append(buf);
+ return result;
+}
+
+/**
+ *
+ */
+void SVGAngle::setValueAsString(const DOMString &/*val*/)
+ throw (DOMException)
+{
+ //convert here
+}
+
+
+/**
+ *
+ */
+void SVGAngle::newValueSpecifiedUnits (unsigned short /*unitType*/,
+ double /*valueInSpecifiedUnits*/)
+{
+ //convert here
+}
+
+/**
+ *
+ */
+void SVGAngle::convertToSpecifiedUnits (unsigned short /*unitType*/)
+{
+ //convert here
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGAngle::SVGAngle()
+{
+ unitType = SVG_ANGLETYPE_UNKNOWN;
+ value = 0.0;
+}
+
+/**
+ *
+ */
+SVGAngle::SVGAngle(const SVGAngle &other)
+{
+ unitType = other.unitType;
+ value = other.value;
+}
+
+/**
+ *
+ */
+SVGAngle::~SVGAngle()
+{
+}
+
+
+
+
+/*#########################################################################
+## SVGICCColor
+#########################################################################*/
+
+
+/**
+ *
+ */
+DOMString SVGICCColor::getColorProfile()
+{
+ return colorProfile;
+}
+
+/**
+ *
+ */
+void SVGICCColor::setColorProfile(const DOMString &val) throw (DOMException)
+{
+ colorProfile = val;
+}
+
+/**
+ *
+ */
+SVGNumberList &SVGICCColor::getColors()
+{
+ return colors;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGICCColor::SVGICCColor()
+{
+}
+
+/**
+ *
+ */
+SVGICCColor::SVGICCColor(const SVGICCColor &other)
+{
+ colorProfile = other.colorProfile;
+ colors = other.colors;
+}
+
+/**
+ *
+ */
+SVGICCColor::~SVGICCColor()
+{
+}
+
+
+
+/*#########################################################################
+## SVGColor
+#########################################################################*/
+
+
+
+/**
+ *
+ */
+unsigned short SVGColor::getColorType()
+{
+ return colorType;
+}
+
+/**
+ *
+ */
+css::RGBColor SVGColor::getRgbColor()
+{
+ css::RGBColor col;
+ return col;
+}
+
+/**
+ *
+ */
+SVGICCColor SVGColor::getIccColor()
+{
+ SVGICCColor col;
+ return col;
+}
+
+
+/**
+ *
+ */
+void SVGColor::setRGBColor(const DOMString& /*rgbColor*/)
+ throw (SVGException)
+{
+}
+
+/**
+ *
+ */
+void SVGColor::setRGBColorICCColor(const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw (SVGException)
+{
+}
+
+/**
+ *
+ */
+void SVGColor::setColor (unsigned short /*colorType*/,
+ const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw (SVGException)
+{
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGColor::SVGColor()
+{
+ colorType = SVG_COLORTYPE_UNKNOWN;
+}
+
+/**
+ *
+ */
+SVGColor::SVGColor(const SVGColor &other) : css::CSSValue(other)
+{
+ colorType = other.colorType;
+}
+
+/**
+ *
+ */
+SVGColor::~SVGColor()
+{
+}
+
+
+
+/*#########################################################################
+## SVGRect
+#########################################################################*/
+
+
+/**
+ *
+ */
+double SVGRect::getX()
+{
+ return x;
+}
+
+/**
+ *
+ */
+void SVGRect::setX(double val) throw (DOMException)
+{
+ x = val;
+}
+
+/**
+ *
+ */
+double SVGRect::getY()
+{
+ return y;
+}
+
+/**
+ *
+ */
+void SVGRect::setY(double val) throw (DOMException)
+{
+ y = val;
+}
+
+/**
+ *
+ */
+double SVGRect::getWidth()
+{
+ return width;
+}
+
+/**
+ *
+ */
+void SVGRect::setWidth(double val) throw (DOMException)
+{
+ width = val;
+}
+
+/**
+ *
+ */
+double SVGRect::getHeight()
+{
+ return height;
+}
+
+/**
+ *
+ */
+void SVGRect::setHeight(double val) throw (DOMException)
+{
+ height = val;
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGRect::SVGRect()
+{
+ x = y = width = height = 0.0;
+}
+
+/**
+ *
+ */
+SVGRect::SVGRect(const SVGRect &other)
+{
+ x = other.x;
+ y = other.y;
+ width = other.width;
+ height = other.height;
+}
+
+/**
+ *
+ */
+SVGRect::~SVGRect()
+{
+}
+
+
+
+/*#########################################################################
+## SVGPoint
+#########################################################################*/
+
+
+/**
+ *
+ */
+double SVGPoint::getX()
+{
+ return x;
+}
+
+/**
+ *
+ */
+void SVGPoint::setX(double val) throw (DOMException)
+{
+ x = val;
+}
+
+/**
+ *
+ */
+double SVGPoint::getY()
+{
+ return y;
+}
+
+/**
+ *
+ */
+void SVGPoint::setY(double val) throw (DOMException)
+{
+ y = val;
+}
+
+/**
+ *
+ */
+SVGPoint SVGPoint::matrixTransform(const SVGMatrix &/*matrix*/)
+{
+ SVGPoint point;
+ return point;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGPoint::SVGPoint()
+{
+ x = y = 0;
+}
+
+/**
+ *
+ */
+SVGPoint::SVGPoint(const SVGPoint &other)
+{
+ x = other.x;
+ y = other.y;
+}
+
+/**
+ *
+ */
+SVGPoint::~SVGPoint()
+{
+}
+
+
+/*#########################################################################
+## SVGUnitTypes
+#########################################################################*/
+
+/**
+ *
+ */
+SVGUnitTypes::SVGUnitTypes()
+{
+}
+
+
+
+/**
+ *
+ */
+SVGUnitTypes::~SVGUnitTypes()
+{
+}
+
+
+/*#########################################################################
+## SVGStylable
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGAnimatedString SVGStylable::getClassName()
+{
+ return className;
+}
+
+/**
+ *
+ */
+css::CSSStyleDeclaration SVGStylable::getStyle()
+{
+ return style;
+}
+
+
+/**
+ *
+ */
+css::CSSValue SVGStylable::getPresentationAttribute(const DOMString& /*name*/)
+{
+ css::CSSValue val;
+ //perform a lookup
+ return val;
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGStylable::SVGStylable()
+{
+}
+
+/**
+ *
+ */
+SVGStylable::SVGStylable(const SVGStylable &other)
+{
+ className = other.className;
+ style = other.style;
+}
+
+/**
+ *
+ */
+SVGStylable::~SVGStylable()
+{
+}
+
+
+
+
+/*#########################################################################
+## SVGLocatable
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGElementPtr SVGLocatable::getNearestViewportElement()
+{
+ SVGElementPtr result;
+ return result;
+}
+
+/**
+ *
+ */
+SVGElementPtr SVGLocatable::getFarthestViewportElement()
+{
+ SVGElementPtr result;
+ return result;
+}
+
+/**
+ *
+ */
+SVGRect SVGLocatable::getBBox ()
+{
+ return bbox;
+}
+
+/**
+ *
+ */
+SVGMatrix SVGLocatable::getCTM ()
+{
+ return ctm;
+}
+
+/**
+ *
+ */
+SVGMatrix SVGLocatable::getScreenCTM ()
+{
+ return screenCtm;
+}
+
+/**
+ *
+ */
+SVGMatrix SVGLocatable::getTransformToElement (const SVGElement &/*element*/)
+ throw (SVGException)
+{
+ SVGMatrix result;
+ //do calculations
+ return result;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGLocatable::SVGLocatable()
+{
+}
+
+/**
+ *
+ */
+SVGLocatable::SVGLocatable(const SVGLocatable &/*other*/)
+{
+}
+
+/**
+ *
+ */
+SVGLocatable::~SVGLocatable()
+{
+}
+
+
+/*#########################################################################
+## SVGTransformable
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGAnimatedTransformList &SVGTransformable::getTransform()
+{
+ return transforms;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGTransformable::SVGTransformable() {}
+
+/**
+ *
+ */
+SVGTransformable::SVGTransformable(const SVGTransformable &other) : SVGLocatable(other)
+{
+ transforms = other.transforms;
+}
+
+/**
+ *
+ */
+SVGTransformable::~SVGTransformable()
+{
+}
+
+
+
+
+
+
+
+/*#########################################################################
+## SVGTests
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGStringList &SVGTests::getRequiredFeatures()
+{
+ return requiredFeatures;
+}
+
+/**
+ *
+ */
+SVGStringList &SVGTests::getRequiredExtensions()
+{
+ return requiredExtensions;
+}
+
+/**
+ *
+ */
+SVGStringList &SVGTests::getSystemLanguage()
+{
+ return systemLanguage;
+}
+
+
+/**
+ *
+ */
+bool SVGTests::hasExtension (const DOMString& /*extension*/)
+{
+ return false;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGTests::SVGTests()
+{
+}
+
+/**
+ *
+ */
+SVGTests::SVGTests(const SVGTests &other)
+{
+ requiredFeatures = other.requiredFeatures;
+ requiredExtensions = other.requiredExtensions;
+ systemLanguage = other.systemLanguage;
+}
+
+/**
+ *
+ */
+SVGTests::~SVGTests()
+{
+}
+
+
+
+/*#########################################################################
+## SVGLangSpace
+#########################################################################*/
+
+
+/**
+ *
+ */
+DOMString SVGLangSpace::getXmllang()
+{
+ return xmlLang;
+}
+
+/**
+ *
+ */
+void SVGLangSpace::setXmllang(const DOMString &val) throw (DOMException)
+{
+ xmlLang = val;
+}
+
+/**
+ *
+ */
+DOMString SVGLangSpace::getXmlspace()
+{
+ return xmlSpace;
+}
+
+/**
+ *
+ */
+void SVGLangSpace::setXmlspace(const DOMString &val)
+ throw (DOMException)
+{
+ xmlSpace = val;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGLangSpace::SVGLangSpace()
+{
+}
+
+/**
+ *
+ */
+SVGLangSpace::SVGLangSpace(const SVGLangSpace &other)
+{
+ xmlLang = other.xmlLang;
+ xmlSpace = other.xmlSpace;
+}
+
+/**
+ *
+ */
+SVGLangSpace::~SVGLangSpace()
+{
+}
+
+
+
+/*#########################################################################
+## SVGExternalResourcesRequired
+#########################################################################*/
+
+/**
+ *
+ */
+SVGAnimatedBoolean SVGExternalResourcesRequired::getExternalResourcesRequired()
+{
+ return required;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGExternalResourcesRequired::SVGExternalResourcesRequired()
+{
+}
+
+
+/**
+ *
+ */
+SVGExternalResourcesRequired::SVGExternalResourcesRequired(
+ const SVGExternalResourcesRequired &other)
+{
+ required = other.required;
+}
+
+/**
+ *
+ */
+SVGExternalResourcesRequired::~SVGExternalResourcesRequired() {}
+
+
+/*#########################################################################
+## SVGPreserveAspectRatio
+#########################################################################*/
+
+/**
+ *
+ */
+unsigned short SVGPreserveAspectRatio::getAlign()
+{
+ return align;
+}
+
+/**
+ *
+ */
+void SVGPreserveAspectRatio::setAlign(unsigned short val) throw (DOMException)
+{
+ align = val;
+}
+
+/**
+ *
+ */
+unsigned short SVGPreserveAspectRatio::getMeetOrSlice()
+{
+ return meetOrSlice;
+}
+
+/**
+ *
+ */
+void SVGPreserveAspectRatio::setMeetOrSlice(unsigned short val) throw (DOMException)
+{
+ meetOrSlice = val;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGPreserveAspectRatio::SVGPreserveAspectRatio()
+{
+ align = SVG_PRESERVEASPECTRATIO_UNKNOWN;
+ meetOrSlice = SVG_MEETORSLICE_UNKNOWN;
+}
+
+/**
+ *
+ */
+SVGPreserveAspectRatio::SVGPreserveAspectRatio(const SVGPreserveAspectRatio &other)
+{
+ align = other.align;
+ meetOrSlice = other.meetOrSlice;
+}
+
+/**
+ *
+ */
+SVGPreserveAspectRatio::~SVGPreserveAspectRatio()
+{
+}
+
+
+
+/*#########################################################################
+## SVGFitToViewBox
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGAnimatedRect SVGFitToViewBox::getViewBox()
+{
+ return viewBox;
+}
+
+/**
+ *
+ */
+SVGAnimatedPreserveAspectRatio SVGFitToViewBox::getPreserveAspectRatio()
+{
+ return preserveAspectRatio;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGFitToViewBox::SVGFitToViewBox()
+{
+}
+
+/**
+ *
+ */
+
+SVGFitToViewBox::SVGFitToViewBox(const SVGFitToViewBox &other)
+{
+ viewBox = other.viewBox;
+ preserveAspectRatio = other.preserveAspectRatio;
+}
+
+/**
+ *
+ */
+SVGFitToViewBox::~SVGFitToViewBox()
+{
+}
+
+/*#########################################################################
+## SVGZoomAndPan
+#########################################################################*/
+
+/**
+ *
+ */
+unsigned short SVGZoomAndPan::getZoomAndPan()
+{
+ return zoomAndPan;
+}
+
+/**
+ *
+ */
+void SVGZoomAndPan::setZoomAndPan(unsigned short val) throw (DOMException)
+{
+ zoomAndPan = val;
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGZoomAndPan::SVGZoomAndPan()
+{
+ zoomAndPan = SVG_ZOOMANDPAN_UNKNOWN;
+}
+
+/**
+ *
+ */
+SVGZoomAndPan::SVGZoomAndPan(const SVGZoomAndPan &other)
+{
+ zoomAndPan = other.zoomAndPan;
+}
+
+/**
+ *
+ */
+SVGZoomAndPan::~SVGZoomAndPan()
+{
+}
+
+
+/*#########################################################################
+## SVGViewSpec
+#########################################################################*/
+
+/**
+ *
+ */
+SVGTransformList SVGViewSpec::getTransform()
+{
+ return transform;
+}
+
+/**
+ *
+ */
+SVGElementPtr SVGViewSpec::getViewTarget()
+{
+ return viewTarget;
+}
+
+/**
+ *
+ */
+DOMString SVGViewSpec::getViewBoxString()
+{
+ DOMString ret;
+ return ret;
+}
+
+/**
+ *
+ */
+DOMString SVGViewSpec::getPreserveAspectRatioString()
+{
+ DOMString ret;
+ return ret;
+}
+
+/**
+ *
+ */
+DOMString SVGViewSpec::getTransformString()
+{
+ DOMString ret;
+ return ret;
+}
+
+/**
+ *
+ */
+DOMString SVGViewSpec::getViewTargetString()
+{
+ DOMString ret;
+ return ret;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGViewSpec::SVGViewSpec()
+{
+ viewTarget = NULL;
+}
+
+/**
+ *
+ */
+SVGViewSpec::SVGViewSpec(const SVGViewSpec &other) : SVGZoomAndPan(other), SVGFitToViewBox(other)
+{
+ viewTarget = other.viewTarget;
+ transform = other.transform;
+}
+
+/**
+ *
+ */
+SVGViewSpec::~SVGViewSpec()
+{
+}
+
+
+
+/*#########################################################################
+## SVGURIReference
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGAnimatedString SVGURIReference::getHref()
+{
+ return href;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGURIReference::SVGURIReference()
+{
+}
+
+/**
+ *
+ */
+SVGURIReference::SVGURIReference(const SVGURIReference &other)
+{
+ href = other.href;
+}
+
+/**
+ *
+ */
+SVGURIReference::~SVGURIReference()
+{
+}
+
+
+
+/*#########################################################################
+## SVGCSSRule
+#########################################################################*/
+
+
+
+
+/*#########################################################################
+## SVGRenderingIntent
+#########################################################################*/
+
+
+
+
+
+/*#########################################################################
+## SVGPathSeg
+#########################################################################*/
+
+static const char *pathSegLetters[] =
+{
+ '@', // PATHSEG_UNKNOWN,
+ 'z', // PATHSEG_CLOSEPATH
+ 'M', // PATHSEG_MOVETO_ABS
+ 'm', // PATHSEG_MOVETO_REL,
+ 'L', // PATHSEG_LINETO_ABS
+ 'l', // PATHSEG_LINETO_REL
+ 'C', // PATHSEG_CURVETO_CUBIC_ABS
+ 'c', // PATHSEG_CURVETO_CUBIC_REL
+ 'Q', // PATHSEG_CURVETO_QUADRATIC_ABS,
+ 'q', // PATHSEG_CURVETO_QUADRATIC_REL
+ 'A', // PATHSEG_ARC_ABS
+ 'a', // PATHSEG_ARC_REL,
+ 'H', // PATHSEG_LINETO_HORIZONTAL_ABS,
+ 'h', // PATHSEG_LINETO_HORIZONTAL_REL
+ 'V', // PATHSEG_LINETO_VERTICAL_ABS
+ 'v', // PATHSEG_LINETO_VERTICAL_REL
+ 'S', // PATHSEG_CURVETO_CUBIC_SMOOTH_ABS
+ 's', // PATHSEG_CURVETO_CUBIC_SMOOTH_REL
+ 'T', // PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS
+ 't' // PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL
+};
+
+
+
+/**
+ *
+ */
+unsigned short getPathSegType()
+{
+ return type;
+}
+
+/**
+ *
+ */
+DOMString getPathSegTypeAsLetter()
+{
+ int typ = type;
+ if (typ<0 || typ>PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL)
+ typ = PATHSEG_UNKNOWN;
+ char const ch = pathSegLetters[typ];
+ DOMString letter = ch;
+ return letter;
+}
+
+
+/**
+ *
+ */
+unsigned short getPathSegType()
+{
+ return type;
+}
+
+/**
+ *
+ */
+DOMString getPathSegTypeAsLetter()
+{
+ int typ = type;
+ if (typ<0 || typ>PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL)
+ typ = PATHSEG_UNKNOWN;
+ char const *ch = pathSegLetters[typ];
+ DOMString letter = ch;
+ return letter;
+}
+
+/**
+ * From the various subclasses
+ */
+
+/**
+ *
+ */
+double SVGPathSeg::getX()
+{
+ return x;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setX(double val) throw (DOMException)
+{
+ x = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getX1()
+{
+ return x;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setX1(double val) throw (DOMException)
+{
+ x = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getX2()
+{
+ return x;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setX2(double val) throw (DOMException)
+{
+ x = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getY()
+{
+ return y;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setY(double val) throw (DOMException)
+{
+ y = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getY1()
+{
+ return y;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setY1(double val) throw (DOMException)
+{
+ y = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getY2()
+{
+ return y;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setY2(double val) throw (DOMException)
+{
+ y = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getR1()
+{
+ return r1;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setR1(double val) throw (DOMException)
+{
+ r1 = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getR2()
+{
+ return r2;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setR2(double val) throw (DOMException)
+{
+ r2 = val;
+}
+
+/**
+ *
+ */
+double SVGPathSeg::getAngle()
+{
+ return angle;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setAngle(double val) throw (DOMException)
+{
+ angle = val;
+}
+
+/**
+ *
+ */
+bool SVGPathSeg::getLargeArcFlag()
+{
+ return largeArcFlag;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setLargeArcFlag(bool val) throw (DOMException)
+{
+ largeArcFlag = val;
+}
+
+/**
+ *
+ */
+bool SVGPathSeg::getSweepFlag()
+{
+ return sweepFlag;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::setSweepFlag(bool val) throw (DOMException)
+{
+ sweepFlag = val;
+}
+
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGPathSeg::SVGPathSeg()
+{
+ init();
+}
+
+/**
+ *
+ */
+SVGPathSeg::SVGPathSeg(const SVGPathSeg &other)
+{
+ assign(other);
+}
+
+/**
+ *
+ */
+SVGPathSeg &operator=(const SVGPathSeg &other)
+{
+ assign(other);
+ return *this;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::init()
+{
+ type = PATHSEG_UNKNOWN;
+ x = y = x1 = y1 = x2 = y2 = 0.0;
+ r1 = r2 = 0.0;
+ angle = 0.0;
+ largeArcFlag = false;
+ sweepFlag = false;
+}
+
+/**
+ *
+ */
+void SVGPathSeg::assign(const SVGPathSeg &other)
+{
+ type = other.type;
+ x = other.x;
+ y = other.y;
+ x1 = other.x1;
+ y1 = other.y1;
+ x2 = other.x2;
+ y2 = other.y2;
+ r1 = other.r1;
+ r2 = other.r2;
+ angle = other.angle;
+ largeArcFlag = other.largeArcFlag;
+ sweepFlag = other.sweepFlag;
+}
+
+
+/**
+ *
+ */
+SVGPathSeg::~SVGPathSeg()
+{
+}
+
+
+
+
+/*#########################################################################
+## SVGPaint
+#########################################################################*/
+
+
+/**
+ *
+ */
+unsigned short SVGPaint::getPaintType()
+{ return paintType; }
+
+/**
+ *
+ */
+DOMString SVGPaint::getUri()
+{ return uri; }
+
+/**
+ *
+ */
+void SVGPaint::setUri(const DOMString& uriArg)
+{
+ uri = uriArg;
+}
+
+/**
+ *
+ */
+void SVGPaint::setPaint (unsigned short paintTypeArg,
+ const DOMString& uriArg,
+ const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw (SVGException)
+{
+ paintType = paintTypeArg;
+ uri = uriArg;
+ //do something with rgbColor
+ //do something with iccColor;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGPaint::SVGPaint()
+{
+ uri = "";
+ paintType = SVG_PAINTTYPE_UNKNOWN;
+}
+
+/**
+ *
+ */
+SVGPaint::SVGPaint(const SVGPaint &other) : css::CSSValue(other), SVGColor(other)
+{
+ uri = "";
+ paintType = SVG_PAINTTYPE_UNKNOWN;
+}
+
+/**
+ *
+ */
+SVGPaint::~SVGPaint() {}
+
+
+/*#########################################################################
+## SVGColorProfileRule
+#########################################################################*/
+
+
+/**
+ *
+ */
+DOMString SVGColorProfileRule::getSrc()
+{ return src; }
+
+/**
+ *
+ */
+void SVGColorProfileRule::setSrc(const DOMString &val) throw (DOMException)
+{ src = val; }
+
+/**
+ *
+ */
+DOMString SVGColorProfileRule::getName()
+{ return name; }
+
+/**
+ *
+ */
+void SVGColorProfileRule::setName(const DOMString &val) throw (DOMException)
+{ name = val; }
+
+/**
+ *
+ */
+unsigned short SVGColorProfileRule::getRenderingIntent()
+{ return renderingIntent; }
+
+/**
+ *
+ */
+void SVGColorProfileRule::setRenderingIntent(unsigned short val) throw (DOMException)
+{ renderingIntent = val; }
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGColorProfileRule::SVGColorProfileRule()
+{
+}
+
+/**
+ *
+ */
+SVGColorProfileRule::SVGColorProfileRule(const SVGColorProfileRule &other)
+ : SVGCSSRule(other), SVGRenderingIntent(other)
+{
+ renderingIntent = other.renderingIntent;
+ src = other.src;
+ name = other.name;
+}
+
+/**
+ *
+ */
+SVGColorProfileRule::~SVGColorProfileRule()
+{
+}
+
+
+/*#########################################################################
+## SVGFilterPrimitiveStandardAttributes
+#########################################################################*/
+
+/**
+ *
+ */
+SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getX()
+{ return x; }
+
+/**
+ *
+ */
+SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getY()
+{ return y; }
+
+/**
+ *
+ */
+SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getWidth()
+{ return width; }
+
+/**
+ *
+ */
+SVGAnimatedLength SVGFilterPrimitiveStandardAttributes::getHeight()
+{ return height; }
+
+/**
+ *
+ */
+SVGAnimatedString SVGFilterPrimitiveStandardAttributes::getResult()
+{ return result; }
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+
+/**
+ *
+ */
+SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes()
+{
+}
+
+/**
+ *
+ */
+SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes(
+ const SVGFilterPrimitiveStandardAttributes &other)
+ : SVGStylable(other)
+{
+ x = other.x;
+ y = other.y;
+ width = other.width;
+ height = other.height;
+ result = other.result;
+}
+
+/**
+ *
+ */
+SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes()
+{
+}
+
+
+/*#########################################################################
+## SVGEvent
+#########################################################################*/
+
+/**
+ *
+ */
+SVGEvent:SVGEvent()
+{
+}
+
+/**
+ *
+ */
+SVGEvent:SVGEvent(const SVGEvent &other) : events::Event(other)
+{
+}
+
+/**
+ *
+ */
+SVGEvent::~SVGEvent()
+{
+}
+
+
+/*#########################################################################
+## SVGZoomEvent
+#########################################################################*/
+
+/**
+ *
+ */
+SVGRect SVGZoomEvent::getZoomRectScreen()
+{
+ return zoomRectScreen;
+}
+
+/**
+ *
+ */
+double SVGZoomEvent::getPreviousScale()
+{
+ return previousScale;
+}
+
+/**
+ *
+ */
+SVGPoint SVGZoomEvent::getPreviousTranslate()
+{
+ return previousTranslate;
+}
+
+/**
+ *
+ */
+double SVGZoomEvent::getNewScale()
+{
+ return newScale;
+}
+
+/**
+ *
+ */
+SVGPoint SVGZoomEvent::getNewTranslate()
+{
+ return newTranslate;
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGZoomEvent::SVGZoomEvent()
+{
+}
+
+/**
+ *
+ */
+SVGZoomEvent::SVGZoomEvent(const SVGZoomEvent &other) :
+ events::Event(other), events::UIEvent(other)
+{
+ zoomRectScreen = other.zoomRectScreen;
+ previousScale = other.previousScale;
+ previousTranslate = other.previousTranslate;
+ newScale = other.newScale;
+ newTranslate = other.newTranslate;
+}
+
+/**
+ *
+ */
+SVGZoomEvent::~SVGZoomEvent()
+{
+}
+
+
+/*#########################################################################
+## SVGElementInstance
+#########################################################################*/
+
+
+/**
+ *
+ */
+SVGElementPtr SVGElementInstance::getCorrespondingElement()
+{
+ return correspondingElement;
+}
+
+/**
+ *
+ */
+SVGUseElementPtr SVGElementInstance::getCorrespondingUseElement()
+{
+ return correspondingUseElement;
+}
+
+/**
+ *
+ */
+SVGElementInstance SVGElementInstance::getParentNode()
+{
+ SVGElementInstance ret;
+ return ret;
+}
+
+/**
+ * Since we are using stack types and this is a circular definition,
+ * we will instead implement this as a global function below:
+ * SVGElementInstanceList getChildNodes(const SVGElementInstance instance);
+ */
+//SVGElementInstanceList getChildNodes();
+
+/**
+ *
+ */
+SVGElementInstance SVGElementInstance::getFirstChild()
+{
+ SVGElementInstance ret;
+ return ret;
+}
+
+/**
+ *
+ */
+SVGElementInstance SVGElementInstance::getLastChild()
+{
+ SVGElementInstance ret;
+ return ret;
+}
+
+/**
+ *
+ */
+SVGElementInstance SVGElementInstance::getPreviousSibling()
+{
+ SVGElementInstance ret;
+ return ret;
+}
+
+/**
+ *
+ */
+SVGElementInstance SVGElementInstance::getNextSibling()
+{
+ SVGElementInstance ret;
+ return ret;
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGElementInstance::SVGElementInstance()
+{
+}
+
+/**
+ *
+ */
+SVGElementInstance::SVGElementInstance(const SVGElementInstance &other)
+ : events::EventTarget(other)
+{
+}
+
+/**
+ *
+ */
+SVGElementInstance::~SVGElementInstance()
+{
+}
+
+
+/*#########################################################################
+## SVGElementInstanceList
+#########################################################################*/
+
+/**
+ *
+ */
+unsigned long SVGElementInstanceList::getLength()
+{ return items.size(); }
+
+/**
+ *
+ */
+SVGElementInstance SVGElementInstanceList::item(unsigned long index)
+{
+ if (index >= items.size())
+ {
+ SVGElementInstance ret;
+ return ret;
+ }
+ return items[index];
+}
+
+/**
+ * This static method replaces the circular definition of:
+ * SVGElementInstanceList SVGElementInstance::getChildNodes()
+ *
+ */
+static SVGElementInstanceList SVGElementInstanceList::getChildNodes(const SVGElementInstance &/*instance*/)
+{
+ SVGElementInstanceList list;
+ return list;
+}
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGElementInstanceList::SVGElementInstanceList()
+{
+}
+
+/**
+ *
+ */
+SVGElementInstanceList::SVGElementInstanceList(const SVGElementInstanceList &other)
+{
+ items = other.items;
+}
+
+/**
+ *
+ */
+SVGElementInstanceList::~SVGElementInstanceList()
+{
+}
+
+
+
+
+/*#########################################################################
+## SVGValue
+#########################################################################*/
+
+/**
+ * Constructor
+ */
+SVGValue()
+{
+ init();
+}
+
+/**
+ * Copy constructor
+ */
+SVGValue(const SVGValue &other)
+{
+ assign(other);
+}
+
+/**
+ * Assignment
+ */
+SVGValue &operator=(const SVGValue &other)
+{
+ assign(other);
+ return *this;
+}
+
+/**
+ *
+ */
+~SVGValue()
+{
+}
+
+//###########################
+// TYPES
+//###########################
+
+/**
+ * Angle
+ */
+SVGValue::SVGValue(const SVGAngle &v)
+{
+ type = SVG_ANGLE;
+ angleval = v;
+}
+
+SVGAngle SVGValue::angleValue()
+{
+ return algleval;
+}
+
+/**
+ * Boolean
+ */
+SVGValue::SVGValue(bool v)
+{
+ type = SVG_BOOLEAN;
+ bval = v;
+}
+
+bool SVGValue::booleanValue()
+{
+ return bval;
+}
+
+
+/**
+ * Enumeration
+ */
+SVGValue::SVGValue(short v)
+{
+ type = SVG_ENUMERATION;
+ eval = v;
+}
+
+short SVGValue::enumerationValue()
+{
+ return eval;
+}
+
+/**
+ * Integer
+ */
+SVGValue::SVGValue(long v)
+{
+ type = SVG_INTEGER;
+ ival = v;
+}
+
+long SVGValue::integerValue()
+{
+ return ival;
+}
+
+/**
+ * Length
+ */
+SVGValue::SVGValue(const SVGLength &v)
+{
+ type = SVG_LENGTH;
+ lengthval = v;
+}
+
+SVGLength SVGValue::lengthValue()
+{
+ return lengthval;
+}
+
+/**
+ * Number
+ */
+SVGValue::SVGValue(double v)
+{
+ type = SVG_NUMBER;
+ dval = v;
+}
+
+double SVGValue::numberValue()
+{
+ return dval;
+}
+
+/**
+ * Points
+ */
+SVGValue::SVGValue(const SVGPointList &v)
+{
+ type = SVG_POINTS;
+ plistval = v;
+}
+
+SVGPointList SVGValue::pointListValue()
+{
+ return plistval;
+}
+
+
+/**
+ * PreserveAspectRatio
+ */
+SVGValue::SVGValue(const SVGPreserveAspectRatio &v)
+{
+ type = SVG_PRESERVE_ASPECT_RATIO;
+ parval = v;
+}
+
+SVGPreserveAspectRatio SVGValue::preserveAspectRatioValue()
+{
+ return parval;
+}
+
+/**
+ * Rect
+ */
+SVGValue::SVGValue(const SVGRect &v)
+{
+ type = SVG_RECT;
+ rectval = v;
+}
+
+SVGRect SVGValue::rectValue()
+{
+ return rectval;
+}
+
+/**
+ * String
+ */
+SVGValue::SVGValue(const DOMString &v)
+{
+ type = SVG_STRING;
+ sval = v;
+}
+
+DOMString SVGValue::stringValue()
+{
+ return sval;
+}
+
+
+void SVGValue::init()
+{
+ type = SVG_NUMBER;
+ bval = false;
+ eval = 0;
+ ival = 0;
+ dval = 0.0;
+}
+
+void SVGValue::assign(const SVGValue &other)
+{
+ type = other.type;
+ angleval = other.angleval;
+ bval = other.bval;
+ eval = other.eval;
+ ival = other.ival;
+ lengthval = other.lengthval;
+ dval = other.dval;
+ parval = other.parval;
+ rval = other.rval;
+ sval = other.sval;
+}
+
+
+/*#########################################################################
+## SVGTransformList
+#########################################################################*/
+
+
+/*#########################################################################
+## SVGStringList
+#########################################################################*/
+
+
+/*#########################################################################
+## SVGNumberList
+#########################################################################*/
+
+
+/*#########################################################################
+## SVGLengthList
+#########################################################################*/
+
+
+/*#########################################################################
+## SVGPointList
+#########################################################################*/
+
+/*#########################################################################
+## SVGPathSegList
+#########################################################################*/
+
+/*#########################################################################
+## SVGValueList
+#########################################################################*/
+
+
+/**
+ *
+ */
+unsigned long SVGValueList::getNumberOfItems()
+{
+ return items.size();
+}
+
+/**
+ *
+ */
+void SVGValueList::clear() throw (DOMException)
+{
+ items.clear();
+}
+
+/**
+ *
+ */
+SVGValue SVGValueList::initialize(const SVGValue& newItem)
+ throw (DOMException, SVGException)
+{
+ items.clear();
+ items.push_back(newItem);
+ return newItem;
+}
+
+/**
+ *
+ */
+SVGValue SVGValueList::getItem(unsigned long index) throw (DOMException)
+{
+ if (index >= items.size())
+ return "";
+ return items[index];
+}
+
+/**
+ *
+ */
+SVGValue SVGValueList::insertItemBefore(const SVGValue& newItem,
+ unsigned long index)
+ throw (DOMException, SVGException)
+{
+ if (index>=items.size())
+ {
+ items.push_back(newItem);
+ }
+ else
+ {
+ std::vector<SVGValue>::iterator iter = items.begin() + index;
+ items.insert(iter, newItem);
+ }
+ return newItem;
+}
+
+/**
+ *
+ */
+SVGValue SVGValueList::replaceItem (const SVGValue& newItem,
+ unsigned long index)
+ throw (DOMException, SVGException)
+{
+ if (index>=items.size())
+ return "";
+ std::vector<SVGValue>::iterator iter = items.begin() + index;
+ *iter = newItem;
+ return newItem;
+}
+
+/**
+ *
+ */
+SVGValue SVGValueList::removeItem (unsigned long index)
+ throw (DOMException)
+{
+ if (index>=items.size())
+ return "";
+ std::vector<SVGValue>::iterator iter = items.begin() + index;
+ SVGValue oldval = *iter;
+ items.erase(iter);
+ return oldval;
+}
+
+/**
+ *
+ */
+SVGValue SVGValueList::appendItem (const SVGValue& newItem)
+ throw (DOMException, SVGException)
+{
+ items.push_back(newItem);
+ return newItem;
+}
+
+
+/**
+ * Matrix
+ */
+SVGValue SVGValueList::createSVGTransformFromMatrix(const SVGValue &matrix)
+{
+}
+
+/**
+ * Matrix
+ */
+SVGValue SVGValueList::consolidate()
+{
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGValueList::SVGValueList()
+{
+}
+
+/**
+ *
+ */
+SVGValueList::SVGValueList(const SVGValueList &other)
+{
+ items = other.items;
+}
+
+/**
+ *
+ */
+SVGValueList::~SVGValueList()
+{
+}
+
+
+
+
+
+/*#########################################################################
+## SVGAnimatedValue
+#########################################################################*/
+
+
+
+
+/**
+ *
+ */
+SVGValue &SVGAnimatedValue::getBaseVal()
+{
+ return baseVal;
+}
+
+/**
+ *
+ */
+void SVGAnimatedValue::setBaseVal(const SVGValue &val) throw (DOMException)
+{
+ baseVal = val;
+}
+
+/**
+ *
+ */
+SVGValue &SVGAnimatedValue::getAnimVal()
+{
+ return animVal;
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue::SVGAnimatedValue()
+{
+ init();
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue::SVGAnimatedValue(const SVGValue &v)
+{
+ init();
+ baseVal = v;
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue::SVGAnimatedValue(const SVGValue &bv, const SVGValue &av)
+{
+ init();
+ baseVal = bv;
+ animVal = av;
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue::SVGAnimatedValue(const SVGAnimatedValue &other)
+{
+ assign(other);
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue &SVGAnimatedValue::operator=(const SVGAnimatedValue &other)
+{
+ assign(other);
+ return *this;
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue &SVGAnimatedValue::operator=(const SVGValue &bv)
+{
+ init();
+ baseVal = bv;
+}
+
+
+/**
+ *
+ */
+SVGAnimatedValue::~SVGAnimatedValue()
+{
+}
+
+
+
+void SVGAnimatedValue::init()
+{
+}
+
+
+void SVGAnimatedValue::assign(const SVGAnimatedValue &other)
+{
+ baseVal = other.baseVal;
+ animVal = other.animVal;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//########################################################################
+//########################################################################
+//########################################################################
+//# D O M
+//########################################################################
+//########################################################################
+//########################################################################
+
+
+
+
+
+
+
+/*#########################################################################
+## SVGElement
+#########################################################################*/
+
+
+//####################################################################
+//# BASE METHODS FOR SVGElement
+//####################################################################
+
+/**
+ * Get the value of the id attribute on the given element.
+ */
+DOMString getId()
+{
+}
+
+/**
+ * Set the value of the id attribute on the given element.
+ */
+void setId(const DOMString &val) throw (DOMException)
+{
+}
+
+
+/**
+ * Corresponds to attribute xml:base on the given element.
+ */
+DOMString getXmlBase()
+{
+}
+
+
+/**
+ * Corresponds to attribute xml:base on the given element.
+ */
+void setXmlBase(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * The nearest ancestor 'svg' element. Null if the given element is the
+ * outermost 'svg' element.
+ */
+SVGElementPtr getOwnerSVGElement()
+{
+}
+
+/**
+ * The element which established the current viewport. Often, the nearest
+ * ancestor 'svg' element. Null if the given element is the outermost 'svg'
+ * element.
+ */
+SVGElementPtr getViewportElement()
+{
+}
+
+
+//####################################################################
+//####################################################################
+//# I N T E R F A C E S
+//####################################################################
+//####################################################################
+
+//####################################################################
+//# SVGAngle
+//####################################################################
+
+/**
+ *
+ */
+unsigned short getUnitType()
+{
+}
+
+/**
+ *
+ */
+double getValue()
+{
+}
+
+/**
+ *
+ */
+void setValue(double val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+double getValueInSpecifiedUnits()
+{
+}
+
+/**
+ *
+ */
+void setValueInSpecifiedUnits(double /*val*/) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+DOMString getValueAsString()
+{
+}
+
+/**
+ *
+ */
+void setValueAsString(const DOMString &/*val*/) throw (DOMException)
+{
+}
+
+
+/**
+ *
+ */
+void newValueSpecifiedUnits(unsigned short /*unitType*/,
+ double /*valueInSpecifiedUnits*/)
+{
+}
+
+/**
+ *
+ */
+void convertToSpecifiedUnits(unsigned short /*unitType*/)
+{
+}
+
+//####################################################################
+//## The following animated types are rolled up into a single
+//## SVGAnimatedValue interface
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedAngle
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedBoolean
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedEnumeration
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedInteger
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedLength
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedLengthList
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedNumber
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedNumberList
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedPathData
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedPoints
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedPreserveAspectRatio
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedRect
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedString
+//####################################################################
+
+//####################################################################
+//## SVGAnimatedTransformList
+//####################################################################
+
+//####################################################################
+//# SVGAnimatedValue
+//####################################################################
+
+/**
+ *
+ */
+SVGValue &getBaseVal()
+{
+ return baseVal();
+}
+
+/**
+ *
+ */
+void setBaseVal(const SVGValue &val) throw (DOMException)
+{
+ baseVal = val;
+}
+
+/**
+ *
+ */
+SVGValue &getAnimVal()
+{
+ return animVal;
+}
+
+
+
+//####################################################################
+//# SVGColor
+//####################################################################
+
+/**
+ * From CSSValue
+ * A code defining the type of the value as defined above.
+ */
+unsigned short getCssValueType()
+{
+}
+
+/**
+ * From CSSValue
+ * A string representation of the current value.
+ */
+DOMString getCssText()
+{
+}
+
+/**
+ * From CSSValue
+ * A string representation of the current value.
+ * Note that setting implies parsing.
+ */
+void setCssText(const DOMString &val) throw (dom::DOMException)
+{
+}
+
+
+/**
+ *
+ */
+unsigned short getColorType()
+{
+}
+
+/**
+ *
+ */
+css::RGBColor getRgbColor()
+{
+}
+
+/**
+ *
+ */
+SVGICCColor getIccColor()
+{
+}
+
+
+/**
+ *
+ */
+void setRGBColor(const DOMString& /*rgbColor*/) throw (SVGException)
+{
+}
+
+/**
+ *
+ */
+void setRGBColorICCColor(const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw (SVGException)
+{
+}
+
+/**
+ *
+ */
+void setColor(unsigned short /*colorType*/,
+ const DOMString& /*rgbColor*/,
+ const DOMString& /*iccColor*/)
+ throw (SVGException)
+{
+}
+
+//####################################################################
+//# SVGCSSRule
+//####################################################################
+
+/**
+ * From CSSRule
+ * The type of the rule, as defined above. The expectation is that
+ * binding-specific casting methods can be used to cast down from an instance of
+ * the CSSRule interface to the specific derived interface implied by the type.
+ */
+unsigned short getType()
+{
+}
+
+/**
+ * From CSSRule
+ * The parsable textual representation of the rule. This reflects the current
+ * state of the rule and not its initial value.
+ */
+DOMString getCssText()
+{
+}
+
+/**
+ * From CSSRule
+ * The parsable textual representation of the rule. This reflects the current
+ * state of the rule and not its initial value.
+ * Note that setting involves reparsing.
+ */
+void setCssText(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * From CSSRule
+ * The style sheet that contains this rule.
+ */
+css::CSSStyleSheet *getParentStyleSheet()
+{
+}
+
+/**
+ * From CSSRule
+ * If this rule is contained inside another rule(e.g. a style rule inside an
+ * @media block), this is the containing rule. If this rule is not nested inside
+ * any other rules, this returns null.
+ */
+css::CSSRule *getParentRule()
+{
+}
+
+//####################################################################
+//# SVGExternalResourcesRequired
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedBoolean getExternalResourcesRequired()
+{
+}
+
+//####################################################################
+//# SVGFitToViewBox
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedRect getViewBox()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedPreserveAspectRatio getPreserveAspectRatio()
+{
+}
+
+//####################################################################
+//# SVGICCColor
+//####################################################################
+
+/**
+ *
+ */
+DOMString getColorProfile()
+{
+}
+
+/**
+ *
+ */
+void setColorProfile(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+SVGNumberList &getColors()
+{
+}
+
+//####################################################################
+//# SVGLangSpace
+//####################################################################
+
+/**
+ *
+ */
+DOMString getXmllang()
+{
+}
+
+/**
+ *
+ */
+void setXmllang(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+DOMString getXmlspace()
+{
+}
+
+/**
+ *
+ */
+void setXmlspace(const DOMString &val) throw (DOMException)
+{
+}
+
+//####################################################################
+//# SVGLength
+//####################################################################
+
+/**
+ *
+ */
+unsigned short getUnitType()
+{
+}
+
+/**
+ *
+ */
+double getValue()
+{
+}
+
+/**
+ *
+ */
+void setValue(double val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+double getValueInSpecifiedUnits()
+{
+}
+
+/**
+ *
+ */
+void setValueInSpecifiedUnits(double /*val*/) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+DOMString getValueAsString()
+{
+}
+
+/**
+ *
+ */
+void setValueAsString(const DOMString& /*val*/) throw (DOMException)
+{
+}
+
+
+/**
+ *
+ */
+void newValueSpecifiedUnits(unsigned short /*unitType*/, double /*val*/)
+{
+}
+
+/**
+ *
+ */
+void convertToSpecifiedUnits(unsigned short /*unitType*/)
+{
+}
+
+
+//####################################################################
+//## SVGLengthList - see SVGValueList
+//####################################################################
+
+
+
+//####################################################################
+//# SVGLocatable
+//####################################################################
+
+/**
+ *
+ */
+SVGElementPtr getNearestViewportElement()
+{
+}
+
+/**
+ *
+ */
+SVGElement *getFarthestViewportElement()
+{
+}
+
+/**
+ *
+ */
+SVGRect getBBox()
+{
+}
+
+/**
+ *
+ */
+SVGMatrix getCTM()
+{
+}
+
+/**
+ *
+ */
+SVGMatrix getScreenCTM()
+{
+}
+
+/**
+ *
+ */
+SVGMatrix getTransformToElement(const SVGElement &/*element*/)
+ throw (SVGException)
+{
+}
+
+//####################################################################
+//# SVGNumber
+//####################################################################
+
+/**
+ *
+ */
+double getValue()
+{
+}
+
+/**
+ *
+ */
+void setValue(double val) throw (DOMException)
+{
+}
+
+//####################################################################
+//# SVGNumberList - see SVGValueList
+//####################################################################
+
+
+//####################################################################
+//# SVGRect
+//####################################################################
+
+/**
+ *
+ */
+double getX()
+{
+}
+
+/**
+ *
+ */
+void setX(double val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+double getY()
+{
+}
+
+/**
+ *
+ */
+void setY(double val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+double getWidth()
+{
+}
+
+/**
+ *
+ */
+void setWidth(double val) throw (DOMException)
+{
+}
+
+/**
+ *
+ */
+double getHeight()
+{
+}
+
+/**
+ *
+ */
+void setHeight(double val) throw (DOMException)
+{
+}
+
+//####################################################################
+//# SVGRenderingIntent
+//####################################################################
+
+//####################################################################
+//# SVGStringList - see SVGValueList
+//####################################################################
+
+//####################################################################
+//# SVGStylable
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedString getClassName()
+{
+}
+
+/**
+ *
+ */
+css::CSSStyleDeclaration getStyle()
+{
+}
+
+/**
+ *
+ */
+css::CSSValue getPresentationAttribute(const DOMString& /*name*/)
+{
+}
+
+//####################################################################
+//# SVGTests
+//####################################################################
+
+/**
+ *
+ */
+SVGValueList &getRequiredFeatures()
+{
+}
+
+/**
+ *
+ */
+SVGValueList &getRequiredExtensions()
+{
+}
+
+/**
+ *
+ */
+SVGValueList &getSystemLanguage()
+{
+}
+
+/**
+ *
+ */
+bool hasExtension(const DOMString& /*extension*/)
+{
+}
+
+//####################################################################
+//# SVGTransformable
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedList &getTransform()
+{
+}
+
+//####################################################################
+//# SVGUnitTypes
+//####################################################################
+
+//####################################################################
+//# SVGURIReference
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedValue getHref()
+{
+}
+
+//####################################################################
+//## SVGValueList - consolidation of other lists
+//####################################################################
+
+/**
+ *
+ */
+unsigned long SVGElement::getNumberOfItems()
+{
+ return items.size();
+}
+
+/**
+ *
+ */
+void SVGElement::clear() throw (DOMException)
+{
+ items.clear();
+}
+
+/**
+ *
+ */
+SVGValue SVGElement::initialize(const SVGValue& newItem)
+ throw (DOMException, SVGException)
+{
+ items.clear();
+ items.push_back(newItem);
+ return newItem;
+}
+
+/**
+ *
+ */
+SVGValue SVGElement::getItem(unsigned long index) throw (DOMException)
+{
+ if (index >= items.size())
+ return "";
+ return items[index];
+}
+
+/**
+ *
+ */
+SVGValue SVGElement::insertItemBefore(const SVGValue& newItem,
+ unsigned long index)
+ throw (DOMException, SVGException)
+{
+ if (index>=items.size())
+ {
+ items.push_back(newItem);
+ }
+ else
+ {
+ std::vector<SVGValue>::iterator iter = items.begin() + index;
+ items.insert(iter, newItem);
+ }
+ return newItem;
+}
+
+/**
+ *
+ */
+SVGValue SVGElement::replaceItem (const SVGValue& newItem,
+ unsigned long index)
+ throw (DOMException, SVGException)
+{
+ if (index>=items.size())
+ return "";
+ std::vector<SVGValue>::iterator iter = items.begin() + index;
+ *iter = newItem;
+ return newItem;
+}
+
+/**
+ *
+ */
+SVGValue SVGElement::removeItem (unsigned long index)
+ throw (DOMException)
+{
+ if (index>=items.size())
+ return "";
+ std::vector<SVGValue>::iterator iter = items.begin() + index;
+ SVGValue oldval = *iter;
+ items.erase(iter);
+ return oldval;
+}
+
+/**
+ *
+ */
+SVGValue SVGElement::appendItem (const SVGValue& newItem)
+ throw (DOMException, SVGException)
+{
+ items.push_back(newItem);
+ return newItem;
+}
+
+
+/**
+ * Matrix
+ */
+SVGValue SVGElement::createSVGTransformFromMatrix(const SVGValue &matrix)
+{
+}
+
+/**
+ * Matrix
+ */
+SVGValue SVGElement::consolidate()
+{
+}
+
+
+//####################################################################
+//# SVGViewSpec
+//####################################################################
+
+/**
+ *
+ */
+//SVGTransformList getTransform()
+//{
+//}
+
+/**
+ *
+ */
+SVGElementPtr getViewTarget()
+{
+}
+
+/**
+ *
+ */
+DOMString getViewBoxString()
+{
+}
+
+/**
+ *
+ */
+DOMString getPreserveAspectRatioString()
+{
+}
+
+/**
+ *
+ */
+DOMString getTransformString()
+{
+}
+
+/**
+ *
+ */
+DOMString getViewTargetString()
+{
+}
+
+//####################################################################
+//# SVGZoomAndPan
+//####################################################################
+
+/**
+ *
+ */
+unsigned short getZoomAndPan()
+{
+}
+
+/**
+ *
+ */
+void setZoomAndPan(unsigned short val) throw (DOMException)
+{
+}
+
+//####################################################################
+//####################################################################
+//# E L E M E N T S
+//####################################################################
+//####################################################################
+
+//####################################################################
+//# SVGAElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGAnimatedString getTarget()
+{
+}
+
+
+
+//####################################################################
+//# SVGAltGlyphElement
+//####################################################################
+
+
+/**
+ * Get the attribute glyphRef on the given element.
+ */
+DOMString getGlyphRef()
+{
+}
+
+/**
+ * Set the attribute glyphRef on the given element.
+ */
+void setGlyphRef(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute format on the given element.
+ */
+DOMString getFormat()
+{
+}
+
+/**
+ * Set the attribute format on the given element.
+ */
+void setFormat(const DOMString &val) throw (DOMException)
+{
+}
+
+
+//####################################################################
+//# SVGAltGlyphDefElement
+//####################################################################
+
+//####################################################################
+//# SVGAltGlyphItemElement
+//####################################################################
+
+
+//####################################################################
+//# SVGAnimateElement
+//####################################################################
+
+
+//####################################################################
+//# SVGAnimateColorElement
+//####################################################################
+
+//####################################################################
+//# SVGAnimateMotionElement
+//####################################################################
+
+
+//####################################################################
+//# SVGAnimateTransformElement
+//####################################################################
+
+
+//####################################################################
+//# SVGAnimationElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGElementPtr getTargetElement()
+{
+}
+
+/**
+ *
+ */
+double getStartTime()
+{
+}
+
+/**
+ *
+ */
+double getCurrentTime()
+{
+}
+
+/**
+ *
+ */
+double getSimpleDuration() throw (DOMException)
+{
+}
+
+
+
+//####################################################################
+//# SVGCircleElement
+//####################################################################
+
+/**
+ * Corresponds to attribute cx on the given 'circle' element.
+ */
+SVGAnimatedLength getCx()
+{
+}
+
+/**
+ * Corresponds to attribute cy on the given 'circle' element.
+ */
+SVGAnimatedLength getCy()
+{
+}
+
+/**
+ * Corresponds to attribute r on the given 'circle' element.
+ */
+SVGAnimatedLength getR()
+{
+}
+
+//####################################################################
+//# SVGClipPathElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute clipPathUnits on the given 'clipPath' element.
+ * Takes one of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getClipPathUnits()
+{
+}
+
+
+
+//####################################################################
+//# SVGColorProfileElement
+//####################################################################
+
+
+/**
+ * Get the attribute local on the given element.
+ */
+DOMString getLocal()
+{
+}
+
+/**
+ * Set the attribute local on the given element.
+ */
+void setLocal(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute name on the given element.
+ */
+DOMString getName()
+{
+}
+
+/**
+ * Set the attribute name on the given element.
+ */
+void setName(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Set the attribute rendering-intent on the given element.
+ * The type of rendering intent, identified by one of the
+ * SVGRenderingIntent constants.
+ */
+unsigned short getRenderingIntent()
+{
+}
+
+/**
+ * Get the attribute rendering-intent on the given element.
+ */
+void setRenderingIntent(unsigned short val) throw (DOMException)
+{
+}
+
+
+//####################################################################
+//# SVGComponentTransferFunctionElement
+//####################################################################
+
+/**
+ * Corresponds to attribute type on the given element. Takes one
+ * of the Component Transfer Types.
+ */
+SVGAnimatedEnumeration getType()
+{
+}
+
+/**
+ * Corresponds to attribute tableValues on the given element.
+ */
+SVGAnimatedNumberList getTableValues()
+{
+}
+
+/**
+ * Corresponds to attribute slope on the given element.
+ */
+SVGAnimatedNumber getSlope()
+{
+}
+
+/**
+ * Corresponds to attribute intercept on the given element.
+ */
+SVGAnimatedNumber getIntercept()
+{
+}
+
+/**
+ * Corresponds to attribute amplitude on the given element.
+ */
+SVGAnimatedNumber getAmplitude()
+{
+}
+
+/**
+ * Corresponds to attribute exponent on the given element.
+ */
+SVGAnimatedNumber getExponent()
+{
+}
+
+/**
+ * Corresponds to attribute offset on the given element.
+ */
+SVGAnimatedNumber getOffset()
+{
+}
+
+//####################################################################
+//# SVGCursorElement
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getY()
+{
+}
+
+
+//####################################################################
+//# SVGDefinitionSrcElement
+//####################################################################
+
+//####################################################################
+//# SVGDefsElement
+//####################################################################
+
+//####################################################################
+//# SVGDescElement
+//####################################################################
+
+//####################################################################
+//# SVGEllipseElement
+//####################################################################
+
+/**
+ * Corresponds to attribute cx on the given 'ellipse' element.
+ */
+SVGAnimatedLength getCx()
+{
+}
+
+/**
+ * Corresponds to attribute cy on the given 'ellipse' element.
+ */
+SVGAnimatedLength getCy()
+{
+}
+
+/**
+ * Corresponds to attribute rx on the given 'ellipse' element.
+ */
+SVGAnimatedLength getRx()
+{
+}
+
+/**
+ * Corresponds to attribute ry on the given 'ellipse' element.
+ */
+SVGAnimatedLength getRy()
+{
+}
+
+
+//####################################################################
+//# SVGFEBlendElement
+//####################################################################
+
+/**
+ * Corresponds to attribute in on the given 'feBlend' element.
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ * Corresponds to attribute in2 on the given 'feBlend' element.
+ */
+SVGAnimatedString getIn2()
+{
+}
+
+/**
+ * Corresponds to attribute mode on the given 'feBlend' element.
+ * Takes one of the Blend Mode Types.
+ */
+SVGAnimatedEnumeration getMode()
+{
+}
+
+
+//####################################################################
+//# SVGFEColorMatrixElement
+//####################################################################
+
+/**
+ * Corresponds to attribute in on the given 'feColorMatrix' element.
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ * Corresponds to attribute type on the given 'feColorMatrix' element.
+ * Takes one of the Color Matrix Types.
+ */
+SVGAnimatedEnumeration getType()
+{
+}
+
+/**
+ * Corresponds to attribute values on the given 'feColorMatrix' element.
+ * Provides access to the contents of the values attribute.
+ */
+SVGAnimatedNumberList getValues()
+{
+}
+
+
+//####################################################################
+//# SVGFEComponentTransferElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute in on the given 'feComponentTransfer' element.
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+//####################################################################
+//# SVGFECompositeElement
+//####################################################################
+
+/**
+ * Corresponds to attribute in on the given 'feComposite' element.
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ * Corresponds to attribute in2 on the given 'feComposite' element.
+ */
+SVGAnimatedString getIn2()
+{
+}
+
+/**
+ * Corresponds to attribute operator on the given 'feComposite' element.
+ * Takes one of the Composite Operators.
+ */
+SVGAnimatedEnumeration getOperator()
+{
+}
+
+/**
+ * Corresponds to attribute k1 on the given 'feComposite' element.
+ */
+SVGAnimatedNumber getK1()
+{
+}
+
+/**
+ * Corresponds to attribute k2 on the given 'feComposite' element.
+ */
+SVGAnimatedNumber getK2()
+{
+}
+
+/**
+ * Corresponds to attribute k3 on the given 'feComposite' element.
+ */
+SVGAnimatedNumber getK3()
+{
+}
+
+/**
+ * Corresponds to attribute k4 on the given 'feComposite' element.
+ */
+SVGAnimatedNumber getK4()
+{
+}
+
+
+//####################################################################
+//# SVGFEConvolveMatrixElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute order on the given 'feConvolveMatrix' element.
+ */
+SVGAnimatedInteger getOrderX()
+{
+}
+
+/**
+ * Corresponds to attribute order on the given 'feConvolveMatrix' element.
+ */
+SVGAnimatedInteger getOrderY()
+{
+}
+
+/**
+ * Corresponds to attribute kernelMatrix on the given element.
+ */
+SVGAnimatedNumberList getKernelMatrix()
+{
+}
+
+/**
+ * Corresponds to attribute divisor on the given 'feConvolveMatrix' element.
+ */
+SVGAnimatedNumber getDivisor()
+{
+}
+
+/**
+ * Corresponds to attribute bias on the given 'feConvolveMatrix' element.
+ */
+SVGAnimatedNumber getBias()
+{
+}
+
+/**
+ * Corresponds to attribute targetX on the given 'feConvolveMatrix' element.
+ */
+SVGAnimatedInteger getTargetX()
+{
+}
+
+/**
+ * Corresponds to attribute targetY on the given 'feConvolveMatrix' element.
+ */
+SVGAnimatedInteger getTargetY()
+{
+}
+
+/**
+ * Corresponds to attribute edgeMode on the given 'feConvolveMatrix'
+ * element. Takes one of the Edge Mode Types.
+ */
+SVGAnimatedEnumeration getEdgeMode()
+{
+}
+
+/**
+ * Corresponds to attribute kernelUnitLength on the
+ * given 'feConvolveMatrix' element.
+ */
+SVGAnimatedLength getKernelUnitLengthX()
+{
+}
+
+/**
+ * Corresponds to attribute kernelUnitLength on the given
+ * 'feConvolveMatrix' element.
+ */
+SVGAnimatedLength getKernelUnitLengthY()
+{
+}
+
+/**
+ * Corresponds to attribute preserveAlpha on the
+ * given 'feConvolveMatrix' element.
+ */
+SVGAnimatedBoolean getPreserveAlpha()
+{
+}
+
+
+
+//####################################################################
+//# SVGFEDiffuseLightingElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute in on the given 'feDiffuseLighting' element.
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ * Corresponds to attribute surfaceScale on the given
+ * 'feDiffuseLighting' element.
+ */
+SVGAnimatedNumber getSurfaceScale()
+{
+}
+
+/**
+ * Corresponds to attribute diffuseConstant on the given
+ * 'feDiffuseLighting' element.
+ */
+SVGAnimatedNumber getDiffuseConstant()
+{
+}
+
+/**
+ * Corresponds to attribute kernelUnitLength on the given
+ * 'feDiffuseLighting' element.
+ */
+SVGAnimatedNumber getKernelUnitLengthX()
+{
+}
+
+/**
+ * Corresponds to attribute kernelUnitLength on the given
+ * 'feDiffuseLighting' element.
+ */
+SVGAnimatedNumber getKernelUnitLengthY()
+{
+}
+
+
+
+
+//####################################################################
+//# SVGFEDisplacementMapElement
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedString getIn2()
+{
+}
+
+
+/**
+ *
+ */
+SVGAnimatedNumber getScale()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedEnumeration getXChannelSelector()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedEnumeration getYChannelSelector()
+{
+}
+
+//####################################################################
+//# SVGFEDistantLightElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute azimuth on the given 'feDistantLight' element.
+ */
+SVGAnimatedNumber getAzimuth()
+{
+}
+
+
+/**
+ * Corresponds to attribute elevation on the given 'feDistantLight'
+ * element
+ */
+SVGAnimatedNumber getElevation()
+{
+}
+
+
+//####################################################################
+//# SVGFEFloodElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+
+//####################################################################
+//# SVGFEFuncAElement
+//####################################################################
+
+//####################################################################
+//# SVGFEFuncBElement
+//####################################################################
+
+//####################################################################
+//# SVGFEFuncGElement
+//####################################################################
+
+//####################################################################
+//# SVGFEFuncRElement
+//####################################################################
+
+
+//####################################################################
+//# SVGFEGaussianBlurElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+
+/**
+ *
+ */
+SVGAnimatedNumber getStdDeviationX()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedNumber getStdDeviationY()
+{
+}
+
+
+/**
+ *
+ */
+void setStdDeviation(double stdDeviationX, double stdDeviationY)
+{
+}
+
+
+//####################################################################
+//# SVGFEImageElement
+//####################################################################
+
+
+//####################################################################
+//# SVGFEMergeElement
+//####################################################################
+
+//####################################################################
+//# SVGFEMergeNodeElement
+//####################################################################
+
+//####################################################################
+//# SVGFEMorphologyElement
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+
+/**
+ *
+ */
+SVGAnimatedEnumeration getOperator()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getRadiusX()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getRadiusY()
+{
+}
+
+//####################################################################
+//# SVGFEOffsetElement
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getDx()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getDy()
+{
+}
+
+
+//####################################################################
+//# SVGFEPointLightElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x on the given 'fePointLight' element.
+ */
+SVGAnimatedNumber getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'fePointLight' element.
+ */
+SVGAnimatedNumber getY()
+{
+}
+
+/**
+ * Corresponds to attribute z on the given 'fePointLight' element.
+ */
+SVGAnimatedNumber getZ()
+{
+}
+
+//####################################################################
+//# SVGFESpecularLightingElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedNumber getSurfaceScale()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedNumber getSpecularConstant()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedNumber getSpecularExponent()
+{
+}
+
+
+//####################################################################
+//# SVGFESpotLightElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x on the given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getY()
+{
+}
+
+/**
+ * Corresponds to attribute z on the given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getZ()
+{
+}
+
+/**
+ * Corresponds to attribute pointsAtX on the given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getPointsAtX()
+{
+}
+
+/**
+ * Corresponds to attribute pointsAtY on the given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getPointsAtY()
+{
+}
+
+/**
+ * Corresponds to attribute pointsAtZ on the given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getPointsAtZ()
+{
+}
+
+/**
+ * Corresponds to attribute specularExponent on the
+ * given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getSpecularExponent()
+{
+}
+
+/**
+ * Corresponds to attribute limitingConeAngle on the
+ * given 'feSpotLight' element.
+ */
+SVGAnimatedNumber getLimitingConeAngle()
+{
+}
+
+
+//####################################################################
+//# SVGFETileElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGAnimatedString getIn1()
+{
+}
+
+
+//####################################################################
+//# SVGFETurbulenceElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGAnimatedNumber getBaseFrequencyX()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedNumber getBaseFrequencyY()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedInteger getNumOctaves()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedNumber getSeed()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedEnumeration getStitchTiles()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedEnumeration getType()
+{
+}
+
+
+
+//####################################################################
+//# SVGFilterElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute filterUnits on the given 'filter' element. Takes one
+ * of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getFilterUnits()
+{
+}
+
+/**
+ * Corresponds to attribute primitiveUnits on the given 'filter' element. Takes
+ * one of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getPrimitiveUnits()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute x on the given 'filter' element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'filter' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'filter' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+
+/**
+ * Corresponds to attribute filterRes on the given 'filter' element.
+ * Contains the X component of attribute filterRes.
+ */
+SVGAnimatedInteger getFilterResX()
+{
+}
+
+/**
+ * Corresponds to attribute filterRes on the given 'filter' element.
+ * Contains the Y component(possibly computed automatically)
+ * of attribute filterRes.
+ */
+SVGAnimatedInteger getFilterResY()
+{
+}
+
+/**
+ * Sets the values for attribute filterRes.
+ */
+void setFilterRes(unsigned long filterResX, unsigned long filterResY)
+{
+}
+
+
+//####################################################################
+//# SVGFontElement
+//####################################################################
+
+//####################################################################
+//# SVGFontFaceElement
+//####################################################################
+
+//####################################################################
+//# SVGFontFaceFormatElement
+//####################################################################
+
+//####################################################################
+//# SVGFontFaceNameElement
+//####################################################################
+
+//####################################################################
+//# SVGFontFaceSrcElement
+//####################################################################
+
+//####################################################################
+//# SVGFontFaceUriElement
+//####################################################################
+
+//####################################################################
+//# SVGForeignObjectElement
+//####################################################################
+
+/**
+ *
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+
+
+//####################################################################
+//# SVGGlyphRefElement
+//####################################################################
+
+
+/**
+ * Get the attribute glyphRef on the given element.
+ */
+DOMString getGlyphRef()
+{
+}
+
+/**
+ * Set the attribute glyphRef on the given element.
+ */
+void setGlyphRef(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute format on the given element.
+ */
+DOMString getFormat()
+{
+}
+
+/**
+ * Set the attribute format on the given element.
+ */
+void setFormat(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute x on the given element.
+ */
+double getX()
+{
+}
+
+/**
+ * Set the attribute x on the given element.
+ */
+void setX(double val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute y on the given element.
+ */
+double getY()
+{
+}
+
+/**
+ * Set the attribute y on the given element.
+ */
+void setY(double val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute dx on the given element.
+ */
+double getDx()
+{
+}
+
+/**
+ * Set the attribute dx on the given element.
+ */
+void setDx(double val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute dy on the given element.
+ */
+double getDy()
+{
+}
+
+/**
+ * Set the attribute dy on the given element.
+ */
+void setDy(double val) throw (DOMException)
+{
+}
+
+
+//####################################################################
+//# SVGGradientElement
+//####################################################################
+
+/**
+ * Corresponds to attribute gradientUnits on the given element.
+ * Takes one of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getGradientUnits()
+{
+}
+
+/**
+ * Corresponds to attribute gradientTransform on the given element.
+ */
+SVGAnimatedTransformList getGradientTransform()
+{
+}
+
+/**
+ * Corresponds to attribute spreadMethod on the given element.
+ * One of the Spread Method Types.
+ */
+SVGAnimatedEnumeration getSpreadMethod()
+{
+}
+
+
+
+//####################################################################
+//# SVGHKernElement
+//####################################################################
+
+//####################################################################
+//# SVGImageElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x on the given 'image' element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'image' element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute width on the given 'image' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'image' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+
+/**
+ * Corresponds to attribute preserveAspectRatio on the given element.
+ */
+SVGAnimatedPreserveAspectRatio getPreserveAspectRatio()
+{
+}
+
+//####################################################################
+//# SVGLinearGradientElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x1 on the given 'linearGradient' element.
+ */
+SVGAnimatedLength getX1()
+{
+}
+
+/**
+ * Corresponds to attribute y1 on the given 'linearGradient' element.
+ */
+SVGAnimatedLength getY1()
+{
+}
+
+/**
+ * Corresponds to attribute x2 on the given 'linearGradient' element.
+ */
+SVGAnimatedLength getX2()
+{
+}
+
+/**
+ * Corresponds to attribute y2 on the given 'linearGradient' element.
+ */
+SVGAnimatedLength getY2()
+{
+}
+
+
+
+//####################################################################
+//# SVGLineElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x1 on the given 'line' element.
+ */
+SVGAnimatedLength getX1()
+{
+}
+
+/**
+ * Corresponds to attribute y1 on the given 'line' element.
+ */
+SVGAnimatedLength getY1()
+{
+}
+
+/**
+ * Corresponds to attribute x2 on the given 'line' element.
+ */
+SVGAnimatedLength getX2()
+{
+}
+
+/**
+ * Corresponds to attribute y2 on the given 'line' element.
+ */
+SVGAnimatedLength getY2()
+{
+}
+
+
+//####################################################################
+//# SVGMarkerElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute refX on the given 'marker' element.
+ */
+SVGAnimatedLength getRefX()
+{
+}
+
+/**
+ * Corresponds to attribute refY on the given 'marker' element.
+ */
+SVGAnimatedLength getRefY()
+{
+}
+
+/**
+ * Corresponds to attribute markerUnits on the given 'marker' element.
+ * One of the Marker Units Types defined above.
+ */
+SVGAnimatedEnumeration getMarkerUnits()
+{
+}
+
+/**
+ * Corresponds to attribute markerWidth on the given 'marker' element.
+ */
+SVGAnimatedLength getMarkerWidth()
+{
+}
+
+/**
+ * Corresponds to attribute markerHeight on the given 'marker' element.
+ */
+SVGAnimatedLength getMarkerHeight()
+{
+}
+
+/**
+ * Corresponds to attribute orient on the given 'marker' element.
+ * One of the Marker Orientation Types defined above.
+ */
+SVGAnimatedEnumeration getOrientType()
+{
+}
+
+/**
+ * Corresponds to attribute orient on the given 'marker' element.
+ * If markerUnits is SVG_MARKER_ORIENT_ANGLE, the angle value for
+ * attribute orient ; otherwise, it will be set to zero.
+ */
+SVGAnimatedAngle getOrientAngle()
+{
+}
+
+
+/**
+ * Sets the value of attribute orient to 'auto'.
+ */
+void setOrientToAuto()
+{
+}
+
+/**
+ * Sets the value of attribute orient to the given angle.
+ */
+void setOrientToAngle(const SVGAngle &angle)
+{
+}
+
+
+//####################################################################
+//# SVGMaskElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute maskUnits on the given 'mask' element. Takes one of
+ * the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getMaskUnits()
+{
+}
+
+/**
+ * Corresponds to attribute maskContentUnits on the given 'mask' element. Takes
+ * one of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getMaskContentUnits()
+{
+}
+
+/**
+ * Corresponds to attribute x on the given 'mask' element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'mask' element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute width on the given 'mask' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'mask' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+//####################################################################
+//# SVGMetadataElement
+//####################################################################
+
+//####################################################################
+//# SVGMissingGlyphElement
+//####################################################################
+
+//####################################################################
+//# SVGMPathElement
+//####################################################################
+
+//####################################################################
+//# SVGPathElement
+//####################################################################
+
+/**
+ * Corresponds to attribute pathLength on the given 'path' element.
+ */
+SVGAnimatedNumber getPathLength()
+{
+}
+
+/**
+ * Returns the user agent's computed value for the total length of the path using
+ * the user agent's distance-along-a-path algorithm, as a distance in the current
+ * user coordinate system.
+ */
+double getTotalLength()
+{
+}
+
+/**
+ * Returns the(x,y) coordinate in user space which is distance units along the
+ * path, utilizing the user agent's distance-along-a-path algorithm.
+ */
+SVGPoint getPointAtLength(double distance)
+{
+}
+
+/**
+ * Returns the index into pathSegList which is distance units along the path,
+ * utilizing the user agent's distance-along-a-path algorithm.
+ */
+unsigned long getPathSegAtLength(double distance)
+{
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegClosePath object.
+ */
+SVGPathSeg createSVGPathSegClosePath()
+{
+ SVGPathSeg seg(PATHSEG_CLOSEPATH);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegMovetoAbs object.
+ */
+SVGPathSeg createSVGPathSegMovetoAbs(double x, double y)
+{
+ SVGPathSeg seg(PATHSEG_MOVETO_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegMovetoRel object.
+ */
+SVGPathSeg createSVGPathSegMovetoRel(double x, double y)
+{
+ SVGPathSeg seg(PATHSEG_MOVETO_REL);
+ seg.setX(x);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegLinetoAbs object.
+ */
+SVGPathSeg createSVGPathSegLinetoAbs(double x, double y)
+{
+ SVGPathSeg seg(PATHSEG_LINETO_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegLinetoRel object.
+ */
+SVGPathSeg createSVGPathSegLinetoRel(double x, double y)
+{
+ SVGPathSeg seg(PATHSEG_LINETO_REL);
+ seg.setX(x);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicAbs object.
+ */
+SVGPathSeg createSVGPathSegCurvetoCubicAbs(double x, double y,
+ double x1, double y1, double x2, double y2)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setX1(x1);
+ seg.setY1(y1);
+ seg.setX2(x2);
+ seg.setY2(y2);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicRel object.
+ */
+SVGPathSeg createSVGPathSegCurvetoCubicRel(double x, double y,
+ double x1, double y1, double x2, double y2)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_REL);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setX1(x1);
+ seg.setY1(y1);
+ seg.setX2(x2);
+ seg.setY2(y2);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticAbs object.
+ */
+SVGPathSeg createSVGPathSegCurvetoQuadraticAbs(double x, double y,
+ double x1, double y1)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setX1(x1);
+ seg.setY1(y1);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticRel object.
+ */
+SVGPathSeg createSVGPathSegCurvetoQuadraticRel(double x, double y,
+ double x1, double y1)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_REL);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setX1(x1);
+ seg.setY1(y1);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegArcAbs object.
+ */
+SVGPathSeg createSVGPathSegArcAbs(double x, double y,
+ double r1, double r2, double angle,
+ bool largeArcFlag, bool sweepFlag)
+{
+ SVGPathSeg seg(PATHSEG_ARC_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setR1(r1);
+ seg.setR2(r2);
+ seg.setAngle(angle);
+ seg.setLargeArcFlag(largeArcFlag);
+ seg.setSweepFlag(sweepFlag);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegArcRel object.
+ */
+SVGPathSeg createSVGPathSegArcRel(double x, double y, double r1,
+ double r2, double angle, bool largeArcFlag,
+ bool sweepFlag)
+{
+ SVGPathSeg seg(PATHSEG_ARC_REL);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setR1(r1);
+ seg.setR2(r2);
+ seg.setAngle(angle);
+ seg.setLargeArcFlag(largeArcFlag);
+ seg.setSweepFlag(sweepFlag);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalAbs object.
+ */
+SVGPathSeg createSVGPathSegLinetoHorizontalAbs(double x)
+{
+ SVGPathSeg seg(PATHSEG_LINETO_HORIZONTAL_ABS);
+ seg.setX(x);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegLinetoHorizontalRel object.
+ */
+SVGPathSeg createSVGPathSegLinetoHorizontalRel(double x)
+{
+ SVGPathSeg seg(PATHSEG_LINETO_HORIZONTAL_REL);
+ seg.setX(x);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegLinetoVerticalAbs object.
+ */
+SVGPathSeg createSVGPathSegLinetoVerticalAbs(double y)
+{
+ SVGPathSeg seg(PATHSEG_LINETO_VERTICAL_ABS);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegLinetoVerticalRel object.
+ */
+SVGPathSeg createSVGPathSegLinetoVerticalRel(double y)
+{
+ SVGPathSeg seg(PATHSEG_LINETO_VERTICAL_REL);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothAbs object.
+ */
+SVGPathSeg createSVGPathSegCurvetoCubicSmoothAbs(double x, double y,
+ double x2, double y2)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_SMOOTH_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setX2(x2);
+ seg.setY2(y2);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoCubicSmoothRel object.
+ */
+SVGPathSeg createSVGPathSegCurvetoCubicSmoothRel(double x, double y,
+ double x2, double y2)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_CUBIC_SMOOTH_REL);
+ seg.setX(x);
+ seg.setY(y);
+ seg.setX2(x2);
+ seg.setY2(y2);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothAbs
+ * object.
+ */
+SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothAbs(double x, double y)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS);
+ seg.setX(x);
+ seg.setY(y);
+ return seg;
+}
+
+/**
+ * Returns a stand-alone, parentless SVGPathSegCurvetoQuadraticSmoothRel
+ * object.
+ */
+SVGPathSeg createSVGPathSegCurvetoQuadraticSmoothRel(double x, double y)
+{
+ SVGPathSeg seg(PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL);
+ seg.setX(x);
+ seg.setY(y);
+ return seg;
+}
+
+
+//####################################################################
+//# SVGPatternElement
+//####################################################################
+
+/**
+ * Corresponds to attribute patternUnits on the given 'pattern' element.
+ * Takes one of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getPatternUnits()
+{
+}
+
+/**
+ * Corresponds to attribute patternContentUnits on the given 'pattern'
+ * element. Takes one of the constants defined in SVGUnitTypes.
+ */
+SVGAnimatedEnumeration getPatternContentUnits()
+{
+}
+
+/**
+ * Corresponds to attribute patternTransform on the given 'pattern' element.
+ */
+SVGAnimatedTransformList getPatternTransform()
+{
+}
+
+/**
+ * Corresponds to attribute x on the given 'pattern' element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ *
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute width on the given 'pattern' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'pattern' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+
+//####################################################################
+//# SVGPolyLineElement
+//####################################################################
+
+//####################################################################
+//# SVGPolygonElement
+//####################################################################
+
+
+//####################################################################
+//# SVGRadialGradientElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute cx on the given 'radialGradient' element.
+ */
+SVGAnimatedLength getCx()
+{
+}
+
+
+/**
+ * Corresponds to attribute cy on the given 'radialGradient' element.
+ */
+SVGAnimatedLength getCy()
+{
+}
+
+
+/**
+ * Corresponds to attribute r on the given 'radialGradient' element.
+ */
+SVGAnimatedLength getR()
+{
+}
+
+
+/**
+ * Corresponds to attribute fx on the given 'radialGradient' element.
+ */
+SVGAnimatedLength getFx()
+{
+}
+
+
+/**
+ * Corresponds to attribute fy on the given 'radialGradient' element.
+ */
+SVGAnimatedLength getFy()
+{
+}
+
+
+//####################################################################
+//# SVGRectElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x on the given 'rect' element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'rect' element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute width on the given 'rect' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'rect' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+
+/**
+ * Corresponds to attribute rx on the given 'rect' element.
+ */
+SVGAnimatedLength getRx()
+{
+}
+
+/**
+ * Corresponds to attribute ry on the given 'rect' element.
+ */
+SVGAnimatedLength getRy()
+{
+}
+
+
+//####################################################################
+//# SVGScriptElement
+//####################################################################
+
+/**
+ *
+ */
+DOMString getType()
+{
+}
+
+/**
+ *
+ */
+void setType(const DOMString &val) throw (DOMException)
+{
+}
+
+//####################################################################
+//# SVGSetElement
+//####################################################################
+
+//####################################################################
+//# SVGStopElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute offset on the given 'stop' element.
+ */
+SVGAnimatedNumber getOffset()
+{
+}
+
+
+//####################################################################
+//# SVGStyleElement
+//####################################################################
+
+/**
+ * Get the attribute xml:space on the given element.
+ */
+DOMString getXmlspace()
+{
+}
+
+/**
+ * Set the attribute xml:space on the given element.
+ */
+void setXmlspace(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute type on the given 'style' element.
+ */
+DOMString getType()
+{
+}
+
+/**
+ * Set the attribute type on the given 'style' element.
+ */
+void setType(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute media on the given 'style' element.
+ */
+DOMString getMedia()
+{
+}
+
+/**
+ * Set the attribute media on the given 'style' element.
+ */
+void setMedia(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * Get the attribute title on the given 'style' element.
+ */
+DOMString getTitle()
+{
+}
+
+/**
+ * Set the attribute title on the given 'style' element.
+ */
+void setTitle(const DOMString &val) throw (DOMException)
+{
+}
+
+//####################################################################
+//# SVGSymbolElement
+//####################################################################
+
+//####################################################################
+//# SVGSVGElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x on the given 'svg' element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'svg' element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute width on the given 'svg' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'svg' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+/**
+ * Get the attribute contentScriptType on the given 'svg' element.
+ */
+DOMString getContentScriptType()
+{
+}
+
+/**
+ * Set the attribute contentScriptType on the given 'svg' element.
+ */
+void setContentScriptType(const DOMString &val) throw (DOMException)
+{
+}
+
+
+/**
+ * Get the attribute contentStyleType on the given 'svg' element.
+ */
+DOMString getContentStyleType()
+{
+}
+
+/**
+ * Set the attribute contentStyleType on the given 'svg' element.
+ */
+void setContentStyleType(const DOMString &val) throw (DOMException)
+{
+}
+
+/**
+ * The position and size of the viewport(implicit or explicit) that corresponds
+ * to this 'svg' element. When the user agent is actually rendering the content,
+ * then the position and size values represent the actual values when rendering.
+ * The position and size values are unitless values in the coordinate system of
+ * the parent element. If no parent element exists(i.e., 'svg' element
+ * represents the root of the document tree), if this SVG document is embedded as
+ * part of another document(e.g., via the HTML 'object' element), then the
+ * position and size are unitless values in the coordinate system of the parent
+ * document.(If the parent uses CSS or XSL layout, then unitless values
+ * represent pixel units for the current CSS or XSL viewport, as described in the
+ * CSS2 specification.) If the parent element does not have a coordinate system,
+ * then the user agent should provide reasonable default values for this attribute.
+ */
+SVGRect getViewport()
+{
+}
+
+/**
+ * Size of a pixel units(as defined by CSS2) along the x-axis of the viewport,
+ * which represents a unit somewhere in the range of 70dpi to 120dpi, and, on
+ * systems that support this, might actually match the characteristics of the
+ * target medium. On systems where it is impossible to know the size of a pixel,
+ * a suitable default pixel size is provided.
+ */
+double getPixelUnitToMillimeterX()
+{
+}
+
+/**
+ * Corresponding size of a pixel unit along the y-axis of the viewport.
+ */
+double getPixelUnitToMillimeterY()
+{
+}
+
+/**
+ * User interface(UI) events in DOM Level 2 indicate the screen positions at
+ * which the given UI event occurred. When the user agent actually knows the
+ * physical size of a "screen unit", this attribute will express that information
+{
+}
+ * otherwise, user agents will provide a suitable default value such as .28mm.
+ */
+double getScreenPixelToMillimeterX()
+{
+}
+
+/**
+ * Corresponding size of a screen pixel along the y-axis of the viewport.
+ */
+double getScreenPixelToMillimeterY()
+{
+}
+
+
+/**
+ * The initial view(i.e., before magnification and panning) of the current
+ * innermost SVG document fragment can be either the "standard" view(i.e., based
+ * on attributes on the 'svg' element such as fitBoxToViewport) or to a "custom"
+ * view(i.e., a hyperlink into a particular 'view' or other element - see
+ * Linking into SVG content: URI fragments and SVG views). If the initial view is
+ * the "standard" view, then this attribute is false. If the initial view is a
+ * "custom" view, then this attribute is true.
+ */
+bool getUseCurrentView()
+{
+}
+
+/**
+ * Set the value above
+ */
+void setUseCurrentView(bool val) throw (DOMException)
+{
+}
+
+/**
+ * The definition of the initial view(i.e., before magnification and panning) of
+ * the current innermost SVG document fragment. The meaning depends on the
+ * situation:
+ *
+ * * If the initial view was a "standard" view, then:
+ * o the values for viewBox, preserveAspectRatio and zoomAndPan within
+ * currentView will match the values for the corresponding DOM attributes that
+ * are on SVGSVGElement directly
+ * o the values for transform and viewTarget within currentView will be null
+ * * If the initial view was a link into a 'view' element, then:
+ * o the values for viewBox, preserveAspectRatio and zoomAndPan within
+ * currentView will correspond to the corresponding attributes for the given
+ * 'view' element
+ * o the values for transform and viewTarget within currentView will be null
+ * * If the initial view was a link into another element(i.e., other than a
+ * 'view'), then:
+ * o the values for viewBox, preserveAspectRatio and zoomAndPan within
+ * currentView will match the values for the corresponding DOM attributes that
+ * are on SVGSVGElement directly for the closest ancestor 'svg' element
+ * o the values for transform within currentView will be null
+ * o the viewTarget within currentView will represent the target of the link
+ * * If the initial view was a link into the SVG document fragment using an SVG
+ * view specification fragment identifier(i.e., #svgView(...)), then:
+ * o the values for viewBox, preserveAspectRatio, zoomAndPan, transform and
+ * viewTarget within currentView will correspond to the values from the SVG view
+ * specification fragment identifier
+ *
+ */
+SVGViewSpec getCurrentView()
+{
+}
+
+
+/**
+ * This attribute indicates the current scale factor relative to the initial view
+ * to take into account user magnification and panning operations, as described
+ * under Magnification and panning. DOM attributes currentScale and
+ * currentTranslate are equivalent to the 2x3 matrix [a b c d e f] =
+ * [currentScale 0 0 currentScale currentTranslate.x currentTranslate.y]. If
+ * "magnification" is enabled(i.e., zoomAndPan="magnify"), then the effect is as
+ * if an extra transformation were placed at the outermost level on the SVG
+ * document fragment(i.e., outside the outermost 'svg' element).
+ */
+double getCurrentScale()
+{
+}
+
+/**
+ * Set the value above.
+ */
+void setCurrentScale(double val) throw (DOMException)
+{
+}
+
+/**
+ * The corresponding translation factor that takes into account
+ * user "magnification".
+ */
+SVGPoint getCurrentTranslate()
+{
+}
+
+/**
+ * Takes a time-out value which indicates that redraw shall not occur until:(a)
+ * the corresponding unsuspendRedraw(suspend_handle_id) call has been made,(b)
+ * an unsuspendRedrawAll() call has been made, or(c) its timer has timed out. In
+ * environments that do not support interactivity(e.g., print media), then
+ * redraw shall not be suspended. suspend_handle_id =
+ * suspendRedraw(max_wait_milliseconds) and unsuspendRedraw(suspend_handle_id)
+ * must be packaged as balanced pairs. When you want to suspend redraw actions as
+ * a collection of SVG DOM changes occur, then precede the changes to the SVG DOM
+ * with a method call similar to suspend_handle_id =
+ * suspendRedraw(max_wait_milliseconds) and follow the changes with a method call
+ * similar to unsuspendRedraw(suspend_handle_id). Note that multiple
+ * suspendRedraw calls can be used at once and that each such method call is
+ * treated independently of the other suspendRedraw method calls.
+ */
+unsigned long suspendRedraw(unsigned long max_wait_milliseconds)
+{
+}
+
+/**
+ * Cancels a specified suspendRedraw() by providing a unique suspend_handle_id.
+ */
+void unsuspendRedraw(unsigned long suspend_handle_id) throw (DOMException)
+{
+}
+
+/**
+ * Cancels all currently active suspendRedraw() method calls. This method is most
+ * useful at the very end of a set of SVG DOM calls to ensure that all pending
+ * suspendRedraw() method calls have been cancelled.
+ */
+void unsuspendRedrawAll()
+{
+}
+
+/**
+ * In rendering environments supporting interactivity, forces the user agent to
+ * immediately redraw all regions of the viewport that require updating.
+ */
+void forceRedraw()
+{
+}
+
+/**
+ * Suspends(i.e., pauses) all currently running animations that are defined
+ * within the SVG document fragment corresponding to this 'svg' element, causing
+ * the animation clock corresponding to this document fragment to stand still
+ * until it is unpaused.
+ */
+void pauseAnimations()
+{
+}
+
+/**
+ * Unsuspends(i.e., unpauses) currently running animations that are defined
+ * within the SVG document fragment, causing the animation clock to continue from
+ * the time at which it was suspended.
+ */
+void unpauseAnimations()
+{
+}
+
+/**
+ * Returns true if this SVG document fragment is in a paused state.
+ */
+bool animationsPaused()
+{
+}
+
+/**
+ * Returns the current time in seconds relative to the start time for
+ * the current SVG document fragment.
+ */
+double getCurrentTime()
+{
+}
+
+/**
+ * Adjusts the clock for this SVG document fragment, establishing
+ * a new current time.
+ */
+void setCurrentTime(double seconds)
+{
+}
+
+/**
+ * Returns the list of graphics elements whose rendered content intersects the
+ * supplied rectangle, honoring the 'pointer-events' property value on each
+ * candidate graphics element.
+ */
+NodeList getIntersectionList(const SVGRect &rect,
+ const SVGElementPtr referenceElement)
+{
+}
+
+/**
+ * Returns the list of graphics elements whose rendered content is entirely
+ * contained within the supplied rectangle, honoring the 'pointer-events'
+ * property value on each candidate graphics element.
+ */
+NodeList getEnclosureList(const SVGRect &rect,
+ const SVGElementPtr referenceElement)
+{
+}
+
+/**
+ * Returns true if the rendered content of the given element intersects the
+ * supplied rectangle, honoring the 'pointer-events' property value on each
+ * candidate graphics element.
+ */
+bool checkIntersection(const SVGElementPtr element, const SVGRect &rect)
+{
+}
+
+/**
+ * Returns true if the rendered content of the given element is entirely
+ * contained within the supplied rectangle, honoring the 'pointer-events'
+ * property value on each candidate graphics element.
+ */
+bool checkEnclosure(const SVGElementPtr element, const SVGRect &rect)
+{
+}
+
+/**
+ * Unselects any selected objects, including any selections of text
+ * strings and type-in bars.
+ */
+void deselectAll()
+{
+}
+
+/**
+ * Creates an SVGNumber object outside of any document trees. The object
+ * is initialized to a value of zero.
+ */
+SVGNumber createSVGNumber()
+{
+}
+
+/**
+ * Creates an SVGLength object outside of any document trees. The object
+ * is initialized to the value of 0 user units.
+ */
+SVGLength createSVGLength()
+{
+}
+
+/**
+ * Creates an SVGAngle object outside of any document trees. The object
+ * is initialized to the value 0 degrees(unitless).
+ */
+SVGAngle createSVGAngle()
+{
+}
+
+/**
+ * Creates an SVGPoint object outside of any document trees. The object
+ * is initialized to the point(0,0) in the user coordinate system.
+ */
+SVGPoint createSVGPoint()
+{
+}
+
+/**
+ * Creates an SVGMatrix object outside of any document trees. The object
+ * is initialized to the identity matrix.
+ */
+SVGMatrix createSVGMatrix()
+{
+}
+
+/**
+ * Creates an SVGRect object outside of any document trees. The object
+ * is initialized such that all values are set to 0 user units.
+ */
+SVGRect createSVGRect()
+{
+}
+
+/**
+ * Creates an SVGTransform object outside of any document trees.
+ * The object is initialized to an identity matrix transform
+ * (SVG_TRANSFORM_MATRIX).
+ */
+SVGTransform createSVGTransform()
+{
+}
+
+/**
+ * Creates an SVGTransform object outside of any document trees.
+ * The object is initialized to the given matrix transform
+ * (i.e., SVG_TRANSFORM_MATRIX).
+ */
+SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix)
+{
+}
+
+/**
+ * Searches this SVG document fragment(i.e., the search is restricted to a
+ * subset of the document tree) for an Element whose id is given by elementId. If
+ * an Element is found, that Element is returned. If no such element exists,
+ * returns null. Behavior is not defined if more than one element has this id.
+ */
+ElementPtr getElementById(const DOMString& elementId)
+{
+}
+
+
+//####################################################################
+//# SVGTextElement
+//####################################################################
+
+
+//####################################################################
+//# SVGTextContentElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute textLength on the given element.
+ */
+SVGAnimatedLength getTextLength()
+{
+}
+
+
+/**
+ * Corresponds to attribute lengthAdjust on the given element. The value must be
+ * one of the length adjust constants specified above.
+ */
+SVGAnimatedEnumeration getLengthAdjust()
+{
+}
+
+
+/**
+ * Returns the total number of characters to be rendered within the current
+ * element. Includes characters which are included via a 'tref' reference.
+ */
+long getNumberOfChars()
+{
+}
+
+/**
+ * The total sum of all of the advance values from rendering all of the
+ * characters within this element, including the advance value on the glyphs
+ *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
+ * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
+ * elements. For non-rendering environments, the user agent shall make reasonable
+ * assumptions about glyph metrics.
+ */
+double getComputedTextLength()
+{
+}
+
+/**
+ * The total sum of all of the advance values from rendering the specified
+ * substring of the characters, including the advance value on the glyphs
+ *(horizontal or vertical), the effect of properties 'kerning', 'letter-spacing'
+ * and 'word-spacing' and adjustments due to attributes dx and dy on 'tspan'
+ * elements. For non-rendering environments, the user agent shall make reasonable
+ * assumptions about glyph metrics.
+ */
+double getSubStringLength(unsigned long charnum, unsigned long nchars)
+ throw (DOMException)
+{
+}
+
+/**
+ * Returns the current text position before rendering the character in the user
+ * coordinate system for rendering the glyph(s) that correspond to the specified
+ * character. The current text position has already taken into account the
+ * effects of any inter-character adjustments due to properties 'kerning',
+ * 'letter-spacing' and 'word-spacing' and adjustments due to attributes x, y, dx
+ * and dy. If multiple consecutive characters are rendered inseparably(e.g., as
+ * a single glyph or a sequence of glyphs), then each of the inseparable
+ * characters will return the start position for the first glyph.
+ */
+SVGPoint getStartPositionOfChar(unsigned long charnum) throw (DOMException)
+{
+}
+
+/**
+ * Returns the current text position after rendering the character in the user
+ * coordinate system for rendering the glyph(s) that correspond to the specified
+ * character. This current text position does not take into account the effects
+ * of any inter-character adjustments to prepare for the next character, such as
+ * properties 'kerning', 'letter-spacing' and 'word-spacing' and adjustments due
+ * to attributes x, y, dx and dy. If multiple consecutive characters are rendered
+ * inseparably(e.g., as a single glyph or a sequence of glyphs), then each of
+ * the inseparable characters will return the end position for the last glyph.
+ */
+SVGPoint getEndPositionOfChar(unsigned long charnum) throw (DOMException)
+{
+}
+
+/**
+ * Returns a tightest rectangle which defines the minimum and maximum X and Y
+ * values in the user coordinate system for rendering the glyph(s) that
+ * correspond to the specified character. The calculations assume that all glyphs
+ * occupy the full standard glyph cell for the font. If multiple consecutive
+ * characters are rendered inseparably(e.g., as a single glyph or a sequence of
+ * glyphs), then each of the inseparable characters will return the same extent.
+ */
+SVGRect getExtentOfChar(unsigned long charnum) throw (DOMException)
+{
+}
+
+/**
+ * Returns the rotation value relative to the current user coordinate system used
+ * to render the glyph(s) corresponding to the specified character. If multiple
+ * glyph(s) are used to render the given character and the glyphs each have
+ * different rotations(e.g., due to text-on-a-path), the user agent shall return
+ * an average value(e.g., the rotation angle at the midpoint along the path for
+ * all glyphs used to render this character). The rotation value represents the
+ * rotation that is supplemental to any rotation due to properties
+ * 'glyph-orientation-horizontal' and 'glyph-orientation-vertical'; thus, any
+ * glyph rotations due to these properties are not included into the returned
+ * rotation value. If multiple consecutive characters are rendered inseparably
+ *(e.g., as a single glyph or a sequence of glyphs), then each of the
+ * inseparable characters will return the same rotation value.
+ */
+double getRotationOfChar(unsigned long charnum) throw (DOMException)
+{
+}
+
+/**
+ * Returns the index of the character whose corresponding glyph cell bounding box
+ * contains the specified point. The calculations assume that all glyphs occupy
+ * the full standard glyph cell for the font. If no such character exists, a
+ * value of -1 is returned. If multiple such characters exist, the character
+ * within the element whose glyphs were rendered last(i.e., take into account
+ * any reordering such as for bidirectional text) is used. If multiple
+ * consecutive characters are rendered inseparably(e.g., as a single glyph or a
+ * sequence of glyphs), then the user agent shall allocate an equal percentage of
+ * the text advance amount to each of the contributing characters in determining
+ * which of the characters is chosen.
+ */
+long getCharNumAtPosition(const SVGPoint &point)
+{
+}
+
+/**
+ * Causes the specified substring to be selected just as if the user
+ * selected the substring interactively.
+ */
+void selectSubString(unsigned long charnum, unsigned long nchars)
+ throw (DOMException)
+{
+}
+
+
+
+
+
+//####################################################################
+//# SVGTextPathElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute startOffset on the given 'textPath' element.
+ */
+SVGAnimatedLength getStartOffset()
+{
+}
+
+/**
+ * Corresponds to attribute method on the given 'textPath' element. The value
+ * must be one of the method type constants specified above.
+ */
+SVGAnimatedEnumeration getMethod()
+{
+}
+
+/**
+ * Corresponds to attribute spacing on the given 'textPath' element.
+ * The value must be one of the spacing type constants specified above.
+ */
+SVGAnimatedEnumeration getSpacing()
+{
+}
+
+
+//####################################################################
+//# SVGTextPositioningElement
+//####################################################################
+
+
+/**
+ * Corresponds to attribute x on the given element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute dx on the given element.
+ */
+SVGAnimatedLength getDx()
+{
+}
+
+/**
+ * Corresponds to attribute dy on the given element.
+ */
+SVGAnimatedLength getDy()
+{
+}
+
+
+/**
+ * Corresponds to attribute rotate on the given element.
+ */
+SVGAnimatedNumberList getRotate()
+{
+}
+
+
+//####################################################################
+//# SVGTitleElement
+//####################################################################
+
+//####################################################################
+//# SVGTRefElement
+//####################################################################
+
+//####################################################################
+//# SVGTSpanElement
+//####################################################################
+
+//####################################################################
+//# SVGSwitchElement
+//####################################################################
+
+//####################################################################
+//# SVGUseElement
+//####################################################################
+
+/**
+ * Corresponds to attribute x on the given 'use' element.
+ */
+SVGAnimatedLength getX()
+{
+}
+
+/**
+ * Corresponds to attribute y on the given 'use' element.
+ */
+SVGAnimatedLength getY()
+{
+}
+
+/**
+ * Corresponds to attribute width on the given 'use' element.
+ */
+SVGAnimatedLength getWidth()
+{
+}
+
+/**
+ * Corresponds to attribute height on the given 'use' element.
+ */
+SVGAnimatedLength getHeight()
+{
+}
+
+/**
+ * The root of the "instance tree". See description of SVGElementInstance for
+ * a discussion on the instance tree.
+ * */
+SVGElementInstance getInstanceRoot()
+{
+}
+
+/**
+ * If the 'href' attribute is being animated, contains the current animated root
+ * of the "instance tree". If the 'href' attribute is not currently being
+ * animated, contains the same value as 'instanceRoot'. The root of the "instance
+ * tree". See description of SVGElementInstance for a discussion on the instance
+ * tree.
+ */
+SVGElementInstance getAnimatedInstanceRoot()
+{
+}
+
+
+//####################################################################
+//# SVGVKernElement
+//####################################################################
+
+//####################################################################
+//# SVGViewElement
+//####################################################################
+
+
+/**
+ *
+ */
+SVGStringList getViewTarget();
+
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+
+/**
+ *
+ */
+SVGElement::~SVGElement()
+{
+}
+
+
+
+
+/*#########################################################################
+## SVGDocument
+#########################################################################*/
+
+
+/**
+ * The title of a document as specified by the title sub-element of the 'svg'
+ * root element(i.e., <svg><title>Here is the title</title>...</svg>)
+ */
+DOMString SVGDocument::getTitle()
+{
+}
+
+/**
+ * Returns the URI of the page that linked to this page. The value is an empty
+ * string if the user navigated to the page directly(not through a link, but,
+ * for example, via a bookmark).
+ */
+DOMString SVGDocument::getReferrer()
+{
+}
+
+
+/**
+ * The domain name of the server that served the document, or a null string if
+ * the server cannot be identified by a domain name.
+ */
+DOMString SVGDocument::getDomain()
+{
+}
+
+
+/**
+ * The complete URI of the document.
+ */
+DOMString SVGDocument::getURL()
+{
+}
+
+
+/**
+ * The root 'svg' element in the document hierarchy.
+ */
+SVGElementPtr SVGDocument::getRootElement()
+{
+}
+
+
+/**
+ * Overloaded from Document
+ *
+ */
+ElementPtr SVGDocument::createElement(const DOMString &tagName)
+{
+ ElementPtr ptr;
+ return ptr;
+}
+
+
+/**
+ * Overloaded from Document
+ *
+ */
+ElementPtr SVGDocument::createElementNS(const DOMString &tagName,
+ const DOMString &namespaceURI)
+{
+ ElementPtr ptr;
+ return ptr;
+}
+
+
+/**
+ * The root 'svg' element in the document hierarchy.
+ */
+SVGElementPtr SVGDocument::getRootElement()
+{
+}
+
+
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+SVGDocument::~SVGDocument()
+{
+}
+
+
+
+/*#########################################################################
+## GetSVGDocument
+#########################################################################*/
+
+
+/**
+ * Returns the SVGDocument object for the referenced SVG document.
+ */
+SVGDocumentPtr GetSVGDocument::getSVGDocument()
+ throw (DOMException)
+{
+ SVGDocumentPtr ptr;
+ return ptr;
+}
+
+//##################
+//# Non-API methods
+//##################
+
+/**
+ *
+ */
+GetSVGDocument::~GetSVGDocument()
+{
+}
+
+
+
+
+
+
+
+} //namespace svg
+} //namespace dom
+} //namespace w3c
+} //namespace org
+
+#endif // __SVG_H__
+/*#########################################################################
+## E N D O F F I L E
+#########################################################################*/
+
diff --git a/src/helper/geom.cpp b/src/helper/geom.cpp
index 9b3b98894..34195be15 100644
--- a/src/helper/geom.cpp
+++ b/src/helper/geom.cpp
@@ -1,496 +1,496 @@
-#define INKSCAPE_HELPER_GEOM_CPP
-
-/**
- * Specific geometry functions for Inkscape, not provided my lib2geom.
- *
- * Author:
- * Johan Engelen <goejendaagh@zonnet.nl>
- *
- * Copyright (C) 2008 Johan Engelen
- *
- * Released under GNU GPL
- */
-
-#include "helper/geom.h"
-#include <typeinfo>
-#include <2geom/pathvector.h>
-#include <2geom/path.h>
-#include <2geom/transforms.h>
-#include <2geom/rect.h>
-#include <2geom/coord.h>
-#include <2geom/sbasis-to-bezier.h>
-#include <libnr/nr-convert2geom.h>
-#include <glibmm.h>
-
-using Geom::X;
-using Geom::Y;
-
-#define NR_HUGE 1e18
-
-//#################################################################################
-// BOUNDING BOX CALCULATIONS
-
-/* Fast bbox calculation */
-/* Thanks to Nathan Hurst for suggesting it */
-static void
-cubic_bbox (Geom::Coord x000, Geom::Coord y000, Geom::Coord x001, Geom::Coord y001, Geom::Coord x011, Geom::Coord y011, Geom::Coord x111, Geom::Coord y111, Geom::Rect &bbox)
-{
- Geom::Coord a, b, c, D;
-
- bbox[0].extendTo(x111);
- bbox[1].extendTo(y111);
-
- /*
- * xttt = s * (s * (s * x000 + t * x001) + t * (s * x001 + t * x011)) + t * (s * (s * x001 + t * x011) + t * (s * x011 + t * x111))
- * xttt = s * (s2 * x000 + s * t * x001 + t * s * x001 + t2 * x011) + t * (s2 * x001 + s * t * x011 + t * s * x011 + t2 * x111)
- * xttt = s * (s2 * x000 + 2 * st * x001 + t2 * x011) + t * (s2 * x001 + 2 * st * x011 + t2 * x111)
- * xttt = s3 * x000 + 2 * s2t * x001 + st2 * x011 + s2t * x001 + 2st2 * x011 + t3 * x111
- * xttt = s3 * x000 + 3s2t * x001 + 3st2 * x011 + t3 * x111
- * xttt = s3 * x000 + (1 - s) 3s2 * x001 + (1 - s) * (1 - s) * 3s * x011 + (1 - s) * (1 - s) * (1 - s) * x111
- * xttt = s3 * x000 + (3s2 - 3s3) * x001 + (3s - 6s2 + 3s3) * x011 + (1 - 2s + s2 - s + 2s2 - s3) * x111
- * xttt = (x000 - 3 * x001 + 3 * x011 - x111) * s3 +
- * ( 3 * x001 - 6 * x011 + 3 * x111) * s2 +
- * ( 3 * x011 - 3 * x111) * s +
- * ( x111)
- * xttt' = (3 * x000 - 9 * x001 + 9 * x011 - 3 * x111) * s2 +
- * ( 6 * x001 - 12 * x011 + 6 * x111) * s +
- * ( 3 * x011 - 3 * x111)
- */
-
- a = 3 * x000 - 9 * x001 + 9 * x011 - 3 * x111;
- b = 6 * x001 - 12 * x011 + 6 * x111;
- c = 3 * x011 - 3 * x111;
-
- /*
- * s = (-b +/- sqrt (b * b - 4 * a * c)) / 2 * a;
- */
- if (fabs (a) < Geom::EPSILON) {
- /* s = -c / b */
- if (fabs (b) > Geom::EPSILON) {
- double s, t, xttt;
- s = -c / b;
- if ((s > 0.0) && (s < 1.0)) {
- t = 1.0 - s;
- xttt = s * s * s * x000 + 3 * s * s * t * x001 + 3 * s * t * t * x011 + t * t * t * x111;
- bbox[0].extendTo(xttt);
- }
- }
- } else {
- /* s = (-b +/- sqrt (b * b - 4 * a * c)) / 2 * a; */
- D = b * b - 4 * a * c;
- if (D >= 0.0) {
- Geom::Coord d, s, t, xttt;
- /* Have solution */
- d = sqrt (D);
- s = (-b + d) / (2 * a);
- if ((s > 0.0) && (s < 1.0)) {
- t = 1.0 - s;
- xttt = s * s * s * x000 + 3 * s * s * t * x001 + 3 * s * t * t * x011 + t * t * t * x111;
- bbox[0].extendTo(xttt);
- }
- s = (-b - d) / (2 * a);
- if ((s > 0.0) && (s < 1.0)) {
- t = 1.0 - s;
- xttt = s * s * s * x000 + 3 * s * s * t * x001 + 3 * s * t * t * x011 + t * t * t * x111;
- bbox[0].extendTo(xttt);
- }
- }
- }
-
- a = 3 * y000 - 9 * y001 + 9 * y011 - 3 * y111;
- b = 6 * y001 - 12 * y011 + 6 * y111;
- c = 3 * y011 - 3 * y111;
-
- if (fabs (a) < Geom::EPSILON) {
- /* s = -c / b */
- if (fabs (b) > Geom::EPSILON) {
- double s, t, yttt;
- s = -c / b;
- if ((s > 0.0) && (s < 1.0)) {
- t = 1.0 - s;
- yttt = s * s * s * y000 + 3 * s * s * t * y001 + 3 * s * t * t * y011 + t * t * t * y111;
- bbox[1].extendTo(yttt);
- }
- }
- } else {
- /* s = (-b +/- sqrt (b * b - 4 * a * c)) / 2 * a; */
- D = b * b - 4 * a * c;
- if (D >= 0.0) {
- Geom::Coord d, s, t, yttt;
- /* Have solution */
- d = sqrt (D);
- s = (-b + d) / (2 * a);
- if ((s > 0.0) && (s < 1.0)) {
- t = 1.0 - s;
- yttt = s * s * s * y000 + 3 * s * s * t * y001 + 3 * s * t * t * y011 + t * t * t * y111;
- bbox[1].extendTo(yttt);
- }
- s = (-b - d) / (2 * a);
- if ((s > 0.0) && (s < 1.0)) {
- t = 1.0 - s;
- yttt = s * s * s * y000 + 3 * s * s * t * y001 + 3 * s * t * t * y011 + t * t * t * y111;
- bbox[1].extendTo(yttt);
- }
- }
- }
-}
-
-Geom::Rect
-bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t)
-{
- return bounds_exact_transformed(pv, t); //use this as it is faster for now! :)
-// return Geom::bounds_fast(pv * t);
-}
-
-Geom::Rect
-bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t)
-{
- Geom::Rect bbox;
-
- if (pv.empty())
- return bbox;
-
- Geom::Point initial = pv.front().initialPoint() * t;
- bbox = Geom::Rect(initial, initial); // obtain well defined bbox as starting point to unionWith
-
- for (Geom::PathVector::const_iterator it = pv.begin(); it != pv.end(); ++it) {
- bbox.expandTo(it->initialPoint() * t);
-
- // don't loop including closing segment, since that segment can never increase the bbox
- for (Geom::Path::const_iterator cit = it->begin(); cit != it->end_open(); ++cit) {
- Geom::Curve const &c = *cit;
-
- if( dynamic_cast<Geom::LineSegment const*>(&c) ||
- dynamic_cast<Geom::HLineSegment const*>(&c) ||
- dynamic_cast<Geom::VLineSegment const*>(&c) )
- {
- bbox.expandTo( c.finalPoint() * t );
- }
- else if(Geom::CubicBezier const *cubic_bezier = dynamic_cast<Geom::CubicBezier const *>(&c))
- {
- Geom::Point c0 = (*cubic_bezier)[0] * t;
- Geom::Point c1 = (*cubic_bezier)[1] * t;
- Geom::Point c2 = (*cubic_bezier)[2] * t;
- Geom::Point c3 = (*cubic_bezier)[3] * t;
- cubic_bbox( c0[0], c0[1],
- c1[0], c1[1],
- c2[0], c2[1],
- c3[0], c3[1],
- bbox );
- }
- else
- {
- // should handle all not-so-easy curves:
- Geom::Curve *ctemp = cit->transformed(t);
- bbox.unionWith( ctemp->boundsExact());
- delete ctemp;
- }
- }
- }
- //return Geom::bounds_exact(pv * t);
- return bbox;
-}
-
-
-
-static void
-geom_line_wind_distance (Geom::Coord x0, Geom::Coord y0, Geom::Coord x1, Geom::Coord y1, Geom::Point const &pt, int *wind, Geom::Coord *best)
-{
- Geom::Coord Ax, Ay, Bx, By, Dx, Dy, s;
- Geom::Coord dist2;
-
- /* Find distance */
- Ax = x0;
- Ay = y0;
- Bx = x1;
- By = y1;
- Dx = x1 - x0;
- Dy = y1 - y0;
- const Geom::Coord Px = pt[X];
- const Geom::Coord Py = pt[Y];
-
- if (best) {
- s = ((Px - Ax) * Dx + (Py - Ay) * Dy) / (Dx * Dx + Dy * Dy);
- if (s <= 0.0) {
- dist2 = (Px - Ax) * (Px - Ax) + (Py - Ay) * (Py - Ay);
- } else if (s >= 1.0) {
- dist2 = (Px - Bx) * (Px - Bx) + (Py - By) * (Py - By);
- } else {
- Geom::Coord Qx, Qy;
- Qx = Ax + s * Dx;
- Qy = Ay + s * Dy;
- dist2 = (Px - Qx) * (Px - Qx) + (Py - Qy) * (Py - Qy);
- }
-
- if (dist2 < (*best * *best)) *best = sqrt (dist2);
- }
-
- if (wind) {
- /* Find wind */
- if ((Ax >= Px) && (Bx >= Px)) return;
- if ((Ay >= Py) && (By >= Py)) return;
- if ((Ay < Py) && (By < Py)) return;
- if (Ay == By) return;
- /* Ctach upper y bound */
- if (Ay == Py) {
- if (Ax < Px) *wind -= 1;
- return;
- } else if (By == Py) {
- if (Bx < Px) *wind += 1;
- return;
- } else {
- Geom::Coord Qx;
- /* Have to calculate intersection */
- Qx = Ax + Dx * (Py - Ay) / Dy;
- if (Qx < Px) {
- *wind += (Dy > 0.0) ? 1 : -1;
- }
- }
- }
-}
-
-static void
-geom_cubic_bbox_wind_distance (Geom::Coord x000, Geom::Coord y000,
- Geom::Coord x001, Geom::Coord y001,
- Geom::Coord x011, Geom::Coord y011,
- Geom::Coord x111, Geom::Coord y111,
- Geom::Point const &pt,
- Geom::Rect *bbox, int *wind, Geom::Coord *best,
- Geom::Coord tolerance)
-{
- Geom::Coord x0, y0, x1, y1, len2;
- int needdist, needwind, needline;
-
- const Geom::Coord Px = pt[X];
- const Geom::Coord Py = pt[Y];
-
- needdist = 0;
- needwind = 0;
- needline = 0;
-
- if (bbox) cubic_bbox (x000, y000, x001, y001, x011, y011, x111, y111, *bbox);
-
- x0 = MIN (x000, x001);
- x0 = MIN (x0, x011);
- x0 = MIN (x0, x111);
- y0 = MIN (y000, y001);
- y0 = MIN (y0, y011);
- y0 = MIN (y0, y111);
- x1 = MAX (x000, x001);
- x1 = MAX (x1, x011);
- x1 = MAX (x1, x111);
- y1 = MAX (y000, y001);
- y1 = MAX (y1, y011);
- y1 = MAX (y1, y111);
-
- if (best) {
- /* Quickly adjust to endpoints */
- len2 = (x000 - Px) * (x000 - Px) + (y000 - Py) * (y000 - Py);
- if (len2 < (*best * *best)) *best = (Geom::Coord) sqrt (len2);
- len2 = (x111 - Px) * (x111 - Px) + (y111 - Py) * (y111 - Py);
- if (len2 < (*best * *best)) *best = (Geom::Coord) sqrt (len2);
-
- if (((x0 - Px) < *best) && ((y0 - Py) < *best) && ((Px - x1) < *best) && ((Py - y1) < *best)) {
- /* Point is inside sloppy bbox */
- /* Now we have to decide, whether subdivide */
- /* fixme: (Lauris) */
- if (((y1 - y0) > 5.0) || ((x1 - x0) > 5.0)) {
- needdist = 1;
- } else {
- needline = 1;
- }
- }
- }
- if (!needdist && wind) {
- if ((y1 >= Py) && (y0 < Py) && (x0 < Px)) {
- /* Possible intersection at the left */
- /* Now we have to decide, whether subdivide */
- /* fixme: (Lauris) */
- if (((y1 - y0) > 5.0) || ((x1 - x0) > 5.0)) {
- needwind = 1;
- } else {
- needline = 1;
- }
- }
- }
-
- if (needdist || needwind) {
- Geom::Coord x00t, x0tt, xttt, x1tt, x11t, x01t;
- Geom::Coord y00t, y0tt, yttt, y1tt, y11t, y01t;
- Geom::Coord s, t;
-
- t = 0.5;
- s = 1 - t;
-
- x00t = s * x000 + t * x001;
- x01t = s * x001 + t * x011;
- x11t = s * x011 + t * x111;
- x0tt = s * x00t + t * x01t;
- x1tt = s * x01t + t * x11t;
- xttt = s * x0tt + t * x1tt;
-
- y00t = s * y000 + t * y001;
- y01t = s * y001 + t * y011;
- y11t = s * y011 + t * y111;
- y0tt = s * y00t + t * y01t;
- y1tt = s * y01t + t * y11t;
- yttt = s * y0tt + t * y1tt;
-
- geom_cubic_bbox_wind_distance (x000, y000, x00t, y00t, x0tt, y0tt, xttt, yttt, pt, NULL, wind, best, tolerance);
- geom_cubic_bbox_wind_distance (xttt, yttt, x1tt, y1tt, x11t, y11t, x111, y111, pt, NULL, wind, best, tolerance);
- } else if (1 || needline) {
- geom_line_wind_distance (x000, y000, x111, y111, pt, wind, best);
- }
-}
-
-static void
-geom_curve_bbox_wind_distance(Geom::Curve const & c, Geom::Matrix const &m,
- Geom::Point const &pt,
- Geom::Rect *bbox, int *wind, Geom::Coord *dist,
- Geom::Coord tolerance, Geom::Rect const *viewbox,
- Geom::Point &p0) // pass p0 through as it represents the last endpoint added (the finalPoint of last curve)
-{
- if( dynamic_cast<Geom::LineSegment const*>(&c) ||
- dynamic_cast<Geom::HLineSegment const*>(&c) ||
- dynamic_cast<Geom::VLineSegment const*>(&c) )
- {
- Geom::Point pe = c.finalPoint() * m;
- if (bbox) {
- bbox->expandTo(pe);
- }
- if (dist || wind) {
- if (wind) { // we need to pick fill, so do what we're told
- geom_line_wind_distance (p0[X], p0[Y], pe[X], pe[Y], pt, wind, dist);
- } else { // only stroke is being picked; skip this segment if it's totally outside the viewbox
- Geom::Rect swept(p0, pe);
- if (!viewbox || swept.intersects(*viewbox))
- geom_line_wind_distance (p0[X], p0[Y], pe[X], pe[Y], pt, wind, dist);
- }
- }
- p0 = pe;
- }
- else if(Geom::CubicBezier const *cubic_bezier = dynamic_cast<Geom::CubicBezier const *>(&c)) {
- Geom::Point p1 = (*cubic_bezier)[1] * m;
- Geom::Point p2 = (*cubic_bezier)[2] * m;
- Geom::Point p3 = (*cubic_bezier)[3] * m;
-
- // get approximate bbox from handles (convex hull property of beziers):
- Geom::Rect swept(p0, p3);
- swept.expandTo(p1);
- swept.expandTo(p2);
-
- if (!viewbox || swept.intersects(*viewbox)) { // we see this segment, so do full processing
- geom_cubic_bbox_wind_distance ( p0[X], p0[Y],
- p1[X], p1[Y],
- p2[X], p2[Y],
- p3[X], p3[Y],
- pt,
- bbox, wind, dist, tolerance);
- } else {
- if (wind) { // if we need fill, we can just pretend it's a straight line
- geom_line_wind_distance (p0[X], p0[Y], p3[X], p3[Y], pt, wind, dist);
- } else { // otherwise, skip it completely
- }
- }
- p0 = p3;
- } else {
- //this case handles sbasis as well as all other curve types
- Geom::Path sbasis_path = Geom::path_from_sbasis(c.toSBasis(), 0.1);
-
- //recurse to convert the new path resulting from the sbasis to svgd
- for(Geom::Path::iterator iter = sbasis_path.begin(); iter != sbasis_path.end(); ++iter) {
- geom_curve_bbox_wind_distance(*iter, m, pt, bbox, wind, dist, tolerance, viewbox, p0);
- }
- }
-}
-
-/* Calculates...
- and returns ... in *wind and the distance to ... in *dist.
- Returns bounding box in *bbox if bbox!=NULL.
- */
-void
-pathv_matrix_point_bbox_wind_distance (Geom::PathVector const & pathv, Geom::Matrix const &m, Geom::Point const &pt,
- Geom::Rect *bbox, int *wind, Geom::Coord *dist,
- Geom::Coord tolerance, Geom::Rect const *viewbox)
-{
- if (pathv.empty()) {
- if (wind) *wind = 0;
- if (dist) *dist = NR_HUGE;
- return;
- }
-
- // remember last point of last curve
- Geom::Point p0(0,0);
-
- // remembering the start of subpath
- Geom::Point p_start(0,0);
- bool start_set = false;
-
- for (Geom::PathVector::const_iterator it = pathv.begin(); it != pathv.end(); ++it) {
-
- if (start_set) { // this is a new subpath
- if (wind && (p0 != p_start)) // for correct fill picking, each subpath must be closed
- geom_line_wind_distance (p0[X], p0[Y], p_start[X], p_start[Y], pt, wind, dist);
- }
- p0 = it->initialPoint() * m;
- p_start = p0;
- start_set = true;
- if (bbox) {
- bbox->expandTo(p0);
- }
-
- // loop including closing segment if path is closed
- for (Geom::Path::const_iterator cit = it->begin(); cit != it->end_default(); ++cit) {
- geom_curve_bbox_wind_distance(*cit, m, pt, bbox, wind, dist, tolerance, viewbox, p0);
- }
- }
-
- if (start_set) {
- if (wind && (p0 != p_start)) // for correct picking, each subpath must be closed
- geom_line_wind_distance (p0[X], p0[Y], p_start[X], p_start[Y], pt, wind, dist);
- }
-}
-
-// temporary wrapper
-void
-pathv_matrix_point_bbox_wind_distance (Geom::PathVector const & pathv, NR::Matrix const &m, NR::Point const &pt,
- NR::Rect *bbox, int *wind, NR::Coord *dist,
- NR::Coord tolerance, NR::Rect const *viewbox)
-{
- Geom::Rect _bbox;
- if (bbox)
- _bbox = to_2geom(*bbox);
- Geom::Coord _dist;
- if (dist)
- _dist = *dist;
- Geom::Rect _viewbox;
- if (viewbox)
- _viewbox = to_2geom(*viewbox);
-
- pathv_matrix_point_bbox_wind_distance( pathv, to_2geom(m), to_2geom(pt),
- bbox ? &_bbox : NULL,
- wind,
- dist ? &_dist : NULL,
- tolerance,
- viewbox ? &_viewbox : NULL );
-
- if (bbox)
- *bbox = from_2geom(_bbox);
- if (dist)
- *dist = _dist;
-}
-//#################################################################################
-
-
-
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#define INKSCAPE_HELPER_GEOM_CPP
+
+/**
+ * Specific geometry functions for Inkscape, not provided my lib2geom.
+ *
+ * Author:
+ * Johan Engelen <goejendaagh@zonnet.nl>
+ *
+ * Copyright (C) 2008 Johan Engelen
+ *
+ * Released under GNU GPL
+ */
+
+#include "helper/geom.h"
+#include <typeinfo>
+#include <2geom/pathvector.h>
+#include <2geom/path.h>
+#include <2geom/transforms.h>
+#include <2geom/rect.h>
+#include <2geom/coord.h>
+#include <2geom/sbasis-to-bezier.h>
+#include <libnr/nr-convert2geom.h>
+#include <glibmm.h>
+
+using Geom::X;
+using Geom::Y;
+
+#define NR_HUGE 1e18
+
+//#################################################################################
+// BOUNDING BOX CALCULATIONS
+
+/* Fast bbox calculation */
+/* Thanks to Nathan Hurst for suggesting it */
+static void
+cubic_bbox (Geom::Coord x000, Geom::Coord y000, Geom::Coord x001, Geom::Coord y001, Geom::Coord x011, Geom::Coord y011, Geom::Coord x111, Geom::Coord y111, Geom::Rect &bbox)
+{
+ Geom::Coord a, b, c, D;
+
+ bbox[0].extendTo(x111);
+ bbox[1].extendTo(y111);
+
+ /*
+ * xttt = s * (s * (s * x000 + t * x001) + t * (s * x001 + t * x011)) + t * (s * (s * x001 + t * x011) + t * (s * x011 + t * x111))
+ * xttt = s * (s2 * x000 + s * t * x001 + t * s * x001 + t2 * x011) + t * (s2 * x001 + s * t * x011 + t * s * x011 + t2 * x111)
+ * xttt = s * (s2 * x000 + 2 * st * x001 + t2 * x011) + t * (s2 * x001 + 2 * st * x011 + t2 * x111)
+ * xttt = s3 * x000 + 2 * s2t * x001 + st2 * x011 + s2t * x001 + 2st2 * x011 + t3 * x111
+ * xttt = s3 * x000 + 3s2t * x001 + 3st2 * x011 + t3 * x111
+ * xttt = s3 * x000 + (1 - s) 3s2 * x001 + (1 - s) * (1 - s) * 3s * x011 + (1 - s) * (1 - s) * (1 - s) * x111
+ * xttt = s3 * x000 + (3s2 - 3s3) * x001 + (3s - 6s2 + 3s3) * x011 + (1 - 2s + s2 - s + 2s2 - s3) * x111
+ * xttt = (x000 - 3 * x001 + 3 * x011 - x111) * s3 +
+ * ( 3 * x001 - 6 * x011 + 3 * x111) * s2 +
+ * ( 3 * x011 - 3 * x111) * s +
+ * ( x111)
+ * xttt' = (3 * x000 - 9 * x001 + 9 * x011 - 3 * x111) * s2 +
+ * ( 6 * x001 - 12 * x011 + 6 * x111) * s +
+ * ( 3 * x011 - 3 * x111)
+ */
+
+ a = 3 * x000 - 9 * x001 + 9 * x011 - 3 * x111;
+ b = 6 * x001 - 12 * x011 + 6 * x111;
+ c = 3 * x011 - 3 * x111;
+
+ /*
+ * s = (-b +/- sqrt (b * b - 4 * a * c)) / 2 * a;
+ */
+ if (fabs (a) < Geom::EPSILON) {
+ /* s = -c / b */
+ if (fabs (b) > Geom::EPSILON) {
+ double s, t, xttt;
+ s = -c / b;
+ if ((s > 0.0) && (s < 1.0)) {
+ t = 1.0 - s;
+ xttt = s * s * s * x000 + 3 * s * s * t * x001 + 3 * s * t * t * x011 + t * t * t * x111;
+ bbox[0].extendTo(xttt);
+ }
+ }
+ } else {
+ /* s = (-b +/- sqrt (b * b - 4 * a * c)) / 2 * a; */
+ D = b * b - 4 * a * c;
+ if (D >= 0.0) {
+ Geom::Coord d, s, t, xttt;
+ /* Have solution */
+ d = sqrt (D);
+ s = (-b + d) / (2 * a);
+ if ((s > 0.0) && (s < 1.0)) {
+ t = 1.0 - s;
+ xttt = s * s * s * x000 + 3 * s * s * t * x001 + 3 * s * t * t * x011 + t * t * t * x111;
+ bbox[0].extendTo(xttt);
+ }
+ s = (-b - d) / (2 * a);
+ if ((s > 0.0) && (s < 1.0)) {
+ t = 1.0 - s;
+ xttt = s * s * s * x000 + 3 * s * s * t * x001 + 3 * s * t * t * x011 + t * t * t * x111;
+ bbox[0].extendTo(xttt);
+ }
+ }
+ }
+
+ a = 3 * y000 - 9 * y001 + 9 * y011 - 3 * y111;
+ b = 6 * y001 - 12 * y011 + 6 * y111;
+ c = 3 * y011 - 3 * y111;
+
+ if (fabs (a) < Geom::EPSILON) {
+ /* s = -c / b */
+ if (fabs (b) > Geom::EPSILON) {
+ double s, t, yttt;
+ s = -c / b;
+ if ((s > 0.0) && (s < 1.0)) {
+ t = 1.0 - s;
+ yttt = s * s * s * y000 + 3 * s * s * t * y001 + 3 * s * t * t * y011 + t * t * t * y111;
+ bbox[1].extendTo(yttt);
+ }
+ }
+ } else {
+ /* s = (-b +/- sqrt (b * b - 4 * a * c)) / 2 * a; */
+ D = b * b - 4 * a * c;
+ if (D >= 0.0) {
+ Geom::Coord d, s, t, yttt;
+ /* Have solution */
+ d = sqrt (D);
+ s = (-b + d) / (2 * a);
+ if ((s > 0.0) && (s < 1.0)) {
+ t = 1.0 - s;
+ yttt = s * s * s * y000 + 3 * s * s * t * y001 + 3 * s * t * t * y011 + t * t * t * y111;
+ bbox[1].extendTo(yttt);
+ }
+ s = (-b - d) / (2 * a);
+ if ((s > 0.0) && (s < 1.0)) {
+ t = 1.0 - s;
+ yttt = s * s * s * y000 + 3 * s * s * t * y001 + 3 * s * t * t * y011 + t * t * t * y111;
+ bbox[1].extendTo(yttt);
+ }
+ }
+ }
+}
+
+Geom::Rect
+bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t)
+{
+ return bounds_exact_transformed(pv, t); //use this as it is faster for now! :)
+// return Geom::bounds_fast(pv * t);
+}
+
+Geom::Rect
+bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t)
+{
+ Geom::Rect bbox;
+
+ if (pv.empty())
+ return bbox;
+
+ Geom::Point initial = pv.front().initialPoint() * t;
+ bbox = Geom::Rect(initial, initial); // obtain well defined bbox as starting point to unionWith
+
+ for (Geom::PathVector::const_iterator it = pv.begin(); it != pv.end(); ++it) {
+ bbox.expandTo(it->initialPoint() * t);
+
+ // don't loop including closing segment, since that segment can never increase the bbox
+ for (Geom::Path::const_iterator cit = it->begin(); cit != it->end_open(); ++cit) {
+ Geom::Curve const &c = *cit;
+
+ if( dynamic_cast<Geom::LineSegment const*>(&c) ||
+ dynamic_cast<Geom::HLineSegment const*>(&c) ||
+ dynamic_cast<Geom::VLineSegment const*>(&c) )
+ {
+ bbox.expandTo( c.finalPoint() * t );
+ }
+ else if(Geom::CubicBezier const *cubic_bezier = dynamic_cast<Geom::CubicBezier const *>(&c))
+ {
+ Geom::Point c0 = (*cubic_bezier)[0] * t;
+ Geom::Point c1 = (*cubic_bezier)[1] * t;
+ Geom::Point c2 = (*cubic_bezier)[2] * t;
+ Geom::Point c3 = (*cubic_bezier)[3] * t;
+ cubic_bbox( c0[0], c0[1],
+ c1[0], c1[1],
+ c2[0], c2[1],
+ c3[0], c3[1],
+ bbox );
+ }
+ else
+ {
+ // should handle all not-so-easy curves:
+ Geom::Curve *ctemp = cit->transformed(t);
+ bbox.unionWith( ctemp->boundsExact());
+ delete ctemp;
+ }
+ }
+ }
+ //return Geom::bounds_exact(pv * t);
+ return bbox;
+}
+
+
+
+static void
+geom_line_wind_distance (Geom::Coord x0, Geom::Coord y0, Geom::Coord x1, Geom::Coord y1, Geom::Point const &pt, int *wind, Geom::Coord *best)
+{
+ Geom::Coord Ax, Ay, Bx, By, Dx, Dy, s;
+ Geom::Coord dist2;
+
+ /* Find distance */
+ Ax = x0;
+ Ay = y0;
+ Bx = x1;
+ By = y1;
+ Dx = x1 - x0;
+ Dy = y1 - y0;
+ const Geom::Coord Px = pt[X];
+ const Geom::Coord Py = pt[Y];
+
+ if (best) {
+ s = ((Px - Ax) * Dx + (Py - Ay) * Dy) / (Dx * Dx + Dy * Dy);
+ if (s <= 0.0) {
+ dist2 = (Px - Ax) * (Px - Ax) + (Py - Ay) * (Py - Ay);
+ } else if (s >= 1.0) {
+ dist2 = (Px - Bx) * (Px - Bx) + (Py - By) * (Py - By);
+ } else {
+ Geom::Coord Qx, Qy;
+ Qx = Ax + s * Dx;
+ Qy = Ay + s * Dy;
+ dist2 = (Px - Qx) * (Px - Qx) + (Py - Qy) * (Py - Qy);
+ }
+
+ if (dist2 < (*best * *best)) *best = sqrt (dist2);
+ }
+
+ if (wind) {
+ /* Find wind */
+ if ((Ax >= Px) && (Bx >= Px)) return;
+ if ((Ay >= Py) && (By >= Py)) return;
+ if ((Ay < Py) && (By < Py)) return;
+ if (Ay == By) return;
+ /* Ctach upper y bound */
+ if (Ay == Py) {
+ if (Ax < Px) *wind -= 1;
+ return;
+ } else if (By == Py) {
+ if (Bx < Px) *wind += 1;
+ return;
+ } else {
+ Geom::Coord Qx;
+ /* Have to calculate intersection */
+ Qx = Ax + Dx * (Py - Ay) / Dy;
+ if (Qx < Px) {
+ *wind += (Dy > 0.0) ? 1 : -1;
+ }
+ }
+ }
+}
+
+static void
+geom_cubic_bbox_wind_distance (Geom::Coord x000, Geom::Coord y000,
+ Geom::Coord x001, Geom::Coord y001,
+ Geom::Coord x011, Geom::Coord y011,
+ Geom::Coord x111, Geom::Coord y111,
+ Geom::Point const &pt,
+ Geom::Rect *bbox, int *wind, Geom::Coord *best,
+ Geom::Coord tolerance)
+{
+ Geom::Coord x0, y0, x1, y1, len2;
+ int needdist, needwind, needline;
+
+ const Geom::Coord Px = pt[X];
+ const Geom::Coord Py = pt[Y];
+
+ needdist = 0;
+ needwind = 0;
+ needline = 0;
+
+ if (bbox) cubic_bbox (x000, y000, x001, y001, x011, y011, x111, y111, *bbox);
+
+ x0 = MIN (x000, x001);
+ x0 = MIN (x0, x011);
+ x0 = MIN (x0, x111);
+ y0 = MIN (y000, y001);
+ y0 = MIN (y0, y011);
+ y0 = MIN (y0, y111);
+ x1 = MAX (x000, x001);
+ x1 = MAX (x1, x011);
+ x1 = MAX (x1, x111);
+ y1 = MAX (y000, y001);
+ y1 = MAX (y1, y011);
+ y1 = MAX (y1, y111);
+
+ if (best) {
+ /* Quickly adjust to endpoints */
+ len2 = (x000 - Px) * (x000 - Px) + (y000 - Py) * (y000 - Py);
+ if (len2 < (*best * *best)) *best = (Geom::Coord) sqrt (len2);
+ len2 = (x111 - Px) * (x111 - Px) + (y111 - Py) * (y111 - Py);
+ if (len2 < (*best * *best)) *best = (Geom::Coord) sqrt (len2);
+
+ if (((x0 - Px) < *best) && ((y0 - Py) < *best) && ((Px - x1) < *best) && ((Py - y1) < *best)) {
+ /* Point is inside sloppy bbox */
+ /* Now we have to decide, whether subdivide */
+ /* fixme: (Lauris) */
+ if (((y1 - y0) > 5.0) || ((x1 - x0) > 5.0)) {
+ needdist = 1;
+ } else {
+ needline = 1;
+ }
+ }
+ }
+ if (!needdist && wind) {
+ if ((y1 >= Py) && (y0 < Py) && (x0 < Px)) {
+ /* Possible intersection at the left */
+ /* Now we have to decide, whether subdivide */
+ /* fixme: (Lauris) */
+ if (((y1 - y0) > 5.0) || ((x1 - x0) > 5.0)) {
+ needwind = 1;
+ } else {
+ needline = 1;
+ }
+ }
+ }
+
+ if (needdist || needwind) {
+ Geom::Coord x00t, x0tt, xttt, x1tt, x11t, x01t;
+ Geom::Coord y00t, y0tt, yttt, y1tt, y11t, y01t;
+ Geom::Coord s, t;
+
+ t = 0.5;
+ s = 1 - t;
+
+ x00t = s * x000 + t * x001;
+ x01t = s * x001 + t * x011;
+ x11t = s * x011 + t * x111;
+ x0tt = s * x00t + t * x01t;
+ x1tt = s * x01t + t * x11t;
+ xttt = s * x0tt + t * x1tt;
+
+ y00t = s * y000 + t * y001;
+ y01t = s * y001 + t * y011;
+ y11t = s * y011 + t * y111;
+ y0tt = s * y00t + t * y01t;
+ y1tt = s * y01t + t * y11t;
+ yttt = s * y0tt + t * y1tt;
+
+ geom_cubic_bbox_wind_distance (x000, y000, x00t, y00t, x0tt, y0tt, xttt, yttt, pt, NULL, wind, best, tolerance);
+ geom_cubic_bbox_wind_distance (xttt, yttt, x1tt, y1tt, x11t, y11t, x111, y111, pt, NULL, wind, best, tolerance);
+ } else if (1 || needline) {
+ geom_line_wind_distance (x000, y000, x111, y111, pt, wind, best);
+ }
+}
+
+static void
+geom_curve_bbox_wind_distance(Geom::Curve const & c, Geom::Matrix const &m,
+ Geom::Point const &pt,
+ Geom::Rect *bbox, int *wind, Geom::Coord *dist,
+ Geom::Coord tolerance, Geom::Rect const *viewbox,
+ Geom::Point &p0) // pass p0 through as it represents the last endpoint added (the finalPoint of last curve)
+{
+ if( dynamic_cast<Geom::LineSegment const*>(&c) ||
+ dynamic_cast<Geom::HLineSegment const*>(&c) ||
+ dynamic_cast<Geom::VLineSegment const*>(&c) )
+ {
+ Geom::Point pe = c.finalPoint() * m;
+ if (bbox) {
+ bbox->expandTo(pe);
+ }
+ if (dist || wind) {
+ if (wind) { // we need to pick fill, so do what we're told
+ geom_line_wind_distance (p0[X], p0[Y], pe[X], pe[Y], pt, wind, dist);
+ } else { // only stroke is being picked; skip this segment if it's totally outside the viewbox
+ Geom::Rect swept(p0, pe);
+ if (!viewbox || swept.intersects(*viewbox))
+ geom_line_wind_distance (p0[X], p0[Y], pe[X], pe[Y], pt, wind, dist);
+ }
+ }
+ p0 = pe;
+ }
+ else if(Geom::CubicBezier const *cubic_bezier = dynamic_cast<Geom::CubicBezier const *>(&c)) {
+ Geom::Point p1 = (*cubic_bezier)[1] * m;
+ Geom::Point p2 = (*cubic_bezier)[2] * m;
+ Geom::Point p3 = (*cubic_bezier)[3] * m;
+
+ // get approximate bbox from handles (convex hull property of beziers):
+ Geom::Rect swept(p0, p3);
+ swept.expandTo(p1);
+ swept.expandTo(p2);
+
+ if (!viewbox || swept.intersects(*viewbox)) { // we see this segment, so do full processing
+ geom_cubic_bbox_wind_distance ( p0[X], p0[Y],
+ p1[X], p1[Y],
+ p2[X], p2[Y],
+ p3[X], p3[Y],
+ pt,
+ bbox, wind, dist, tolerance);
+ } else {
+ if (wind) { // if we need fill, we can just pretend it's a straight line
+ geom_line_wind_distance (p0[X], p0[Y], p3[X], p3[Y], pt, wind, dist);
+ } else { // otherwise, skip it completely
+ }
+ }
+ p0 = p3;
+ } else {
+ //this case handles sbasis as well as all other curve types
+ Geom::Path sbasis_path = Geom::path_from_sbasis(c.toSBasis(), 0.1);
+
+ //recurse to convert the new path resulting from the sbasis to svgd
+ for(Geom::Path::iterator iter = sbasis_path.begin(); iter != sbasis_path.end(); ++iter) {
+ geom_curve_bbox_wind_distance(*iter, m, pt, bbox, wind, dist, tolerance, viewbox, p0);
+ }
+ }
+}
+
+/* Calculates...
+ and returns ... in *wind and the distance to ... in *dist.
+ Returns bounding box in *bbox if bbox!=NULL.
+ */
+void
+pathv_matrix_point_bbox_wind_distance (Geom::PathVector const & pathv, Geom::Matrix const &m, Geom::Point const &pt,
+ Geom::Rect *bbox, int *wind, Geom::Coord *dist,
+ Geom::Coord tolerance, Geom::Rect const *viewbox)
+{
+ if (pathv.empty()) {
+ if (wind) *wind = 0;
+ if (dist) *dist = NR_HUGE;
+ return;
+ }
+
+ // remember last point of last curve
+ Geom::Point p0(0,0);
+
+ // remembering the start of subpath
+ Geom::Point p_start(0,0);
+ bool start_set = false;
+
+ for (Geom::PathVector::const_iterator it = pathv.begin(); it != pathv.end(); ++it) {
+
+ if (start_set) { // this is a new subpath
+ if (wind && (p0 != p_start)) // for correct fill picking, each subpath must be closed
+ geom_line_wind_distance (p0[X], p0[Y], p_start[X], p_start[Y], pt, wind, dist);
+ }
+ p0 = it->initialPoint() * m;
+ p_start = p0;
+ start_set = true;
+ if (bbox) {
+ bbox->expandTo(p0);
+ }
+
+ // loop including closing segment if path is closed
+ for (Geom::Path::const_iterator cit = it->begin(); cit != it->end_default(); ++cit) {
+ geom_curve_bbox_wind_distance(*cit, m, pt, bbox, wind, dist, tolerance, viewbox, p0);
+ }
+ }
+
+ if (start_set) {
+ if (wind && (p0 != p_start)) // for correct picking, each subpath must be closed
+ geom_line_wind_distance (p0[X], p0[Y], p_start[X], p_start[Y], pt, wind, dist);
+ }
+}
+
+// temporary wrapper
+void
+pathv_matrix_point_bbox_wind_distance (Geom::PathVector const & pathv, NR::Matrix const &m, NR::Point const &pt,
+ NR::Rect *bbox, int *wind, NR::Coord *dist,
+ NR::Coord tolerance, NR::Rect const *viewbox)
+{
+ Geom::Rect _bbox;
+ if (bbox)
+ _bbox = to_2geom(*bbox);
+ Geom::Coord _dist;
+ if (dist)
+ _dist = *dist;
+ Geom::Rect _viewbox;
+ if (viewbox)
+ _viewbox = to_2geom(*viewbox);
+
+ pathv_matrix_point_bbox_wind_distance( pathv, to_2geom(m), to_2geom(pt),
+ bbox ? &_bbox : NULL,
+ wind,
+ dist ? &_dist : NULL,
+ tolerance,
+ viewbox ? &_viewbox : NULL );
+
+ if (bbox)
+ *bbox = from_2geom(_bbox);
+ if (dist)
+ *dist = _dist;
+}
+//#################################################################################
+
+
+
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/helper/geom.h b/src/helper/geom.h
index a271ae3f0..e8eef075b 100644
--- a/src/helper/geom.h
+++ b/src/helper/geom.h
@@ -1,40 +1,40 @@
-#ifndef INKSCAPE_HELPER_GEOM_H
-#define INKSCAPE_HELPER_GEOM_H
-
-/**
- * Specific geometry functions for Inkscape, not provided my lib2geom.
- *
- * Author:
- * Johan Engelen <goejendaagh@zonnet.nl>
- *
- * Copyright (C) 2008 Johan Engelen
- *
- * Released under GNU GPL
- */
-
-#include <2geom/forward.h>
-#include <libnr/nr-forward.h>
-#include <libnr/nr-coord.h>
-
-Geom::Rect bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
-Geom::Rect bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
-
-void pathv_matrix_point_bbox_wind_distance ( Geom::PathVector const & pathv, NR::Matrix const &m, NR::Point const &pt,
- NR::Rect *bbox, int *wind, NR::Coord *dist,
- NR::Coord tolerance, NR::Rect const *viewbox) __attribute__ ((deprecated));
-void pathv_matrix_point_bbox_wind_distance ( Geom::PathVector const & pathv, Geom::Matrix const &m, Geom::Point const &pt,
- Geom::Rect *bbox, int *wind, Geom::Coord *dist,
- Geom::Coord tolerance, Geom::Rect const *viewbox);
-
-#endif // INKSCAPE_HELPER_GEOM_H
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#ifndef INKSCAPE_HELPER_GEOM_H
+#define INKSCAPE_HELPER_GEOM_H
+
+/**
+ * Specific geometry functions for Inkscape, not provided my lib2geom.
+ *
+ * Author:
+ * Johan Engelen <goejendaagh@zonnet.nl>
+ *
+ * Copyright (C) 2008 Johan Engelen
+ *
+ * Released under GNU GPL
+ */
+
+#include <2geom/forward.h>
+#include <libnr/nr-forward.h>
+#include <libnr/nr-coord.h>
+
+Geom::Rect bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
+Geom::Rect bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
+
+void pathv_matrix_point_bbox_wind_distance ( Geom::PathVector const & pathv, NR::Matrix const &m, NR::Point const &pt,
+ NR::Rect *bbox, int *wind, NR::Coord *dist,
+ NR::Coord tolerance, NR::Rect const *viewbox) __attribute__ ((deprecated));
+void pathv_matrix_point_bbox_wind_distance ( Geom::PathVector const & pathv, Geom::Matrix const &m, Geom::Point const &pt,
+ Geom::Rect *bbox, int *wind, Geom::Coord *dist,
+ Geom::Coord tolerance, Geom::Rect const *viewbox);
+
+#endif // INKSCAPE_HELPER_GEOM_H
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/helper/units-test.h b/src/helper/units-test.h
index f704b988a..ff218ca94 100644
--- a/src/helper/units-test.h
+++ b/src/helper/units-test.h
@@ -1,88 +1,88 @@
-#include <cxxtest/TestSuite.h>
-
-#include <helper/units.h>
-#include <glibmm/i18n.h>
-#include <math.h>
-
-
-/* N.B. Wrongly returns false if both near 0. (Not a problem for current users.) */
-static bool
-approx_equal(double const x, double const y)
-{
- return fabs(x / y - 1) < 1e-15;
-}
-
-static double
-sp_units_get_points(double const x, SPUnit const &unit)
-{
- SPUnit const &pt_unit = sp_unit_get_by_id(SP_UNIT_PT);
- double const px = sp_units_get_pixels(x, unit);
- return sp_pixels_get_units(px, pt_unit);
-}
-
-static double
-sp_points_get_units(double const pts, SPUnit const &unit)
-{
- SPUnit const &pt_unit = sp_unit_get_by_id(SP_UNIT_PT);
- double const px = sp_units_get_pixels(pts, pt_unit);
- return sp_pixels_get_units(px, unit);
-}
-
-class UnitsTest : public CxxTest::TestSuite {
-public:
-
- UnitsTest()
- {
- }
- virtual ~UnitsTest() {}
-
- void testConversions()
- {
- struct Case { double x; char const *abbr; double pts; } const tests[] = {
- { 1.0, "pt", 1.0 },
- { 5.0, "pt", 5.0 },
- { 1.0, "in", 72.0 },
- { 2.0, "in", 144.0 },
- { 254., "mm", 720.0 },
- { 254., "cm", 7200. },
- { 254., "m", 720000. },
- { 1.5, "mm", (15 * 72. / 254) }
- };
- for (unsigned i = 0; i < G_N_ELEMENTS(tests); ++i) {
- Case const &c = tests[i];
- SPUnit const &unit = *sp_unit_get_by_abbreviation(N_(c.abbr));
-
- double const calc_pts = sp_units_get_points(c.x, unit);
- TS_ASSERT(approx_equal(calc_pts, c.pts));
-
- double const calc_x = sp_points_get_units(c.pts, unit);
- TS_ASSERT(approx_equal(calc_x, c.x));
-
- double tmp = c.x;
- bool const converted_to_pts = sp_convert_distance(&tmp, &unit, SP_PS_UNIT);
- TS_ASSERT(converted_to_pts);
- TS_ASSERT(approx_equal(tmp, c.pts));
-
- tmp = c.pts;
- bool const converted_from_pts = sp_convert_distance(&tmp, SP_PS_UNIT, &unit);
- TS_ASSERT(converted_from_pts);
- TS_ASSERT(approx_equal(tmp, c.x));
- }
- }
-
- void testUnitTable()
- {
- TS_ASSERT(sp_units_table_sane());
- }
-};
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :encoding=utf-8:textwidth=99 :
+#include <cxxtest/TestSuite.h>
+
+#include <helper/units.h>
+#include <glibmm/i18n.h>
+#include <math.h>
+
+
+/* N.B. Wrongly returns false if both near 0. (Not a problem for current users.) */
+static bool
+approx_equal(double const x, double const y)
+{
+ return fabs(x / y - 1) < 1e-15;
+}
+
+static double
+sp_units_get_points(double const x, SPUnit const &unit)
+{
+ SPUnit const &pt_unit = sp_unit_get_by_id(SP_UNIT_PT);
+ double const px = sp_units_get_pixels(x, unit);
+ return sp_pixels_get_units(px, pt_unit);
+}
+
+static double
+sp_points_get_units(double const pts, SPUnit const &unit)
+{
+ SPUnit const &pt_unit = sp_unit_get_by_id(SP_UNIT_PT);
+ double const px = sp_units_get_pixels(pts, pt_unit);
+ return sp_pixels_get_units(px, unit);
+}
+
+class UnitsTest : public CxxTest::TestSuite {
+public:
+
+ UnitsTest()
+ {
+ }
+ virtual ~UnitsTest() {}
+
+ void testConversions()
+ {
+ struct Case { double x; char const *abbr; double pts; } const tests[] = {
+ { 1.0, "pt", 1.0 },
+ { 5.0, "pt", 5.0 },
+ { 1.0, "in", 72.0 },
+ { 2.0, "in", 144.0 },
+ { 254., "mm", 720.0 },
+ { 254., "cm", 7200. },
+ { 254., "m", 720000. },
+ { 1.5, "mm", (15 * 72. / 254) }
+ };
+ for (unsigned i = 0; i < G_N_ELEMENTS(tests); ++i) {
+ Case const &c = tests[i];
+ SPUnit const &unit = *sp_unit_get_by_abbreviation(N_(c.abbr));
+
+ double const calc_pts = sp_units_get_points(c.x, unit);
+ TS_ASSERT(approx_equal(calc_pts, c.pts));
+
+ double const calc_x = sp_points_get_units(c.pts, unit);
+ TS_ASSERT(approx_equal(calc_x, c.x));
+
+ double tmp = c.x;
+ bool const converted_to_pts = sp_convert_distance(&tmp, &unit, SP_PS_UNIT);
+ TS_ASSERT(converted_to_pts);
+ TS_ASSERT(approx_equal(tmp, c.pts));
+
+ tmp = c.pts;
+ bool const converted_from_pts = sp_convert_distance(&tmp, SP_PS_UNIT, &unit);
+ TS_ASSERT(converted_from_pts);
+ TS_ASSERT(approx_equal(tmp, c.x));
+ }
+ }
+
+ void testUnitTable()
+ {
+ TS_ASSERT(sp_units_table_sane());
+ }
+};
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :encoding=utf-8:textwidth=99 :
diff --git a/src/svg/svg-affine-test.h b/src/svg/svg-affine-test.h
index 4180fcf3d..658968bce 100644
--- a/src/svg/svg-affine-test.h
+++ b/src/svg/svg-affine-test.h
@@ -1,219 +1,219 @@
-#include <cxxtest/TestSuite.h>
-
-#include "svg/svg.h"
-#include <2geom/matrix.h>
-#include <algorithm>
-#include <glib.h>
-#include <iostream>
-#include <math.h>
-#include <utility>
-
-struct streq_free2 {
- bool operator()(char const *exp, char const *got) const
- {
- bool const ret = (strcmp(exp, got) == 0);
- g_free((void*)got);
- return ret;
- }
-};
-
-struct approx_equal {
- bool operator()(Geom::Matrix const &ref, Geom::Matrix const &cm) const
- {
- double maxabsdiff = 0;
- for(size_t i=0; i<6; i++) {
- maxabsdiff = std::max(std::abs(ref[i]-cm[i]), maxabsdiff);
- }
- return maxabsdiff < 1e-14;
- }
-};
-
-class SvgAffineTest : public CxxTest::TestSuite
-{
-private:
- struct test_t {
- char const * str;
- Geom::Matrix matrix;
- };
- static test_t const read_matrix_tests[3];
- static test_t const read_translate_tests[3];
- static test_t const read_scale_tests[3];
- static test_t const read_rotate_tests[4];
- static test_t const read_skew_tests[3];
- static test_t const write_matrix_tests[2];
- static test_t const write_translate_tests[3];
- static test_t const write_scale_tests[2];
- static test_t const write_rotate_tests[2];
- static test_t const write_skew_tests[3];
-public:
- SvgAffineTest() {
- }
-
- void testReadIdentity()
- {
- char const* strs[] = {
- //0,
- "",
- "matrix(1,0,0,1,0,0)",
- "translate(0,0)",
- "scale(1,1)",
- "rotate(0,0,0)",
- "skewX(0)",
- "skewY(0)"};
- size_t n = G_N_ELEMENTS(strs);
- for(size_t i=0; i<n; i++) {
- Geom::Matrix cm;
- TSM_ASSERT(strs[i] , sp_svg_transform_read(strs[i], &cm));
- TSM_ASSERT_EQUALS(strs[i] , Geom::identity() , cm);
- }
- }
-
- void testWriteIdentity()
- {
- TS_ASSERT_EQUALS(sp_svg_transform_write(Geom::identity()) , (void*)0)
- }
-
- void testReadMatrix()
- {
- for(size_t i=0; i<G_N_ELEMENTS(read_matrix_tests); i++) {
- Geom::Matrix cm;
- TSM_ASSERT(read_matrix_tests[i].str , sp_svg_transform_read(read_matrix_tests[i].str, &cm));
- TSM_ASSERT_RELATION(read_matrix_tests[i].str , approx_equal , read_matrix_tests[i].matrix , cm);
- }
- }
-
- void testReadTranslate()
- {
- for(size_t i=0; i<G_N_ELEMENTS(read_translate_tests); i++) {
- Geom::Matrix cm;
- TSM_ASSERT(read_translate_tests[i].str , sp_svg_transform_read(read_translate_tests[i].str, &cm));
- TSM_ASSERT_RELATION(read_translate_tests[i].str , approx_equal , read_translate_tests[i].matrix , cm);
- }
- }
-
- void testReadScale()
- {
- for(size_t i=0; i<G_N_ELEMENTS(read_scale_tests); i++) {
- Geom::Matrix cm;
- TSM_ASSERT(read_scale_tests[i].str , sp_svg_transform_read(read_scale_tests[i].str, &cm));
- TSM_ASSERT_RELATION(read_scale_tests[i].str , approx_equal , read_scale_tests[i].matrix , cm);
- }
- }
-
- void testReadRotate()
- {
- for(size_t i=0; i<G_N_ELEMENTS(read_rotate_tests); i++) {
- Geom::Matrix cm;
- TSM_ASSERT(read_rotate_tests[i].str , sp_svg_transform_read(read_rotate_tests[i].str, &cm));
- TSM_ASSERT_RELATION(read_rotate_tests[i].str , approx_equal , read_rotate_tests[i].matrix , cm);
- }
- }
-
- void testReadSkew()
- {
- for(size_t i=0; i<G_N_ELEMENTS(read_skew_tests); i++) {
- Geom::Matrix cm;
- TSM_ASSERT(read_skew_tests[i].str , sp_svg_transform_read(read_skew_tests[i].str, &cm));
- TSM_ASSERT_RELATION(read_skew_tests[i].str , approx_equal , read_skew_tests[i].matrix , cm);
- }
- }
-
- void testWriteMatrix()
- {
- for(size_t i=0; i<G_N_ELEMENTS(write_matrix_tests); i++) {
- TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_matrix_tests[i].matrix) , write_matrix_tests[i].str);
- }
- }
-
- void testWriteTranslate()
- {
- for(size_t i=0; i<G_N_ELEMENTS(write_translate_tests); i++) {
- TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_translate_tests[i].matrix) , write_translate_tests[i].str);
- }
- }
-
- void testWriteScale()
- {
- for(size_t i=0; i<G_N_ELEMENTS(write_scale_tests); i++) {
- TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_scale_tests[i].matrix) , write_scale_tests[i].str);
- }
- }
-
- void testWriteRotate()
- {
- for(size_t i=0; i<G_N_ELEMENTS(write_rotate_tests); i++) {
- TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_rotate_tests[i].matrix) , write_rotate_tests[i].str);
- }
- }
-
- void testWriteSkew()
- {
- for(size_t i=0; i<G_N_ELEMENTS(write_skew_tests); i++) {
- TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_skew_tests[i].matrix) , write_skew_tests[i].str);
- }
- }
-
- void testReadConcatenation()
- {
- char const * str = "skewY(17)skewX(9)translate(7,13)scale(2)rotate(13)translate(3,5)";
- Geom::Matrix ref(2.0199976232558053, 1.0674773585906016, -0.14125199392774669, 1.9055550612095459, 14.412730624347654, 28.499820929377454); // Precomputed using Mathematica
- Geom::Matrix cm;
- TS_ASSERT(sp_svg_transform_read(str, &cm));
- TS_ASSERT_RELATION(approx_equal , ref , cm);
- }
-
- // TODO: Perhaps check faulty transforms (like "translate(1,2,3)", or "matrix(1,2,3,4,5)", or ...)
-};
-
-static double const DEGREE = M_PI/180.;
-
-SvgAffineTest::test_t const SvgAffineTest::read_matrix_tests[3] = {
- {"matrix(0,0,0,0,0,0)",Geom::Matrix(0,0,0,0,0,0)},
- {"matrix(1,2,3,4,5,6)",Geom::Matrix(1,2,3,4,5,6)},
- {"matrix(1 2 -3,-4,5e6,-6e-7)",Geom::Matrix(1,2,-3,-4,5e6,-6e-7)}};
-SvgAffineTest::test_t const SvgAffineTest::read_translate_tests[3] = {
- {"translate(1)",Geom::Matrix(1,0,0,1,1,0)},
- {"translate(1,1)",Geom::Matrix(1,0,0,1,1,1)},
- {"translate(-1e3 .123e2)",Geom::Matrix(1,0,0,1,-1e3,.123e2)}};
-SvgAffineTest::test_t const SvgAffineTest::read_scale_tests[3] = {
- {"scale(2)",Geom::Matrix(2,0,0,2,0,0)},
- {"scale(2,3)",Geom::Matrix(2,0,0,3,0,0)},
- {"scale(0.1e-2 -.475e0)",Geom::Matrix(0.1e-2,0,0,-.475e0,0,0)}};
-SvgAffineTest::test_t const SvgAffineTest::read_rotate_tests[4] = {
- {"rotate(13 )",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),0,0)},
- {"rotate(-13)",Geom::Matrix(cos(-13.*DEGREE),sin(-13.*DEGREE),-sin(-13.*DEGREE),cos(-13.*DEGREE),0,0)},
- {"rotate(373)",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),0,0)},
- {"rotate(13,7,11)",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),(1-cos(13.*DEGREE))*7+sin(13.*DEGREE)*11,(1-cos(13.*DEGREE))*11-sin(13.*DEGREE)*7)}};
-SvgAffineTest::test_t const SvgAffineTest::read_skew_tests[3] = {
- {"skewX( 30)",Geom::Matrix(1,0,tan(30.*DEGREE),1,0,0)},
- {"skewX(-30)",Geom::Matrix(1,0,tan(-30.*DEGREE),1,0,0)},
- {"skewY(390)",Geom::Matrix(1,tan(30.*DEGREE),0,1,0,0)}};
-
-SvgAffineTest::test_t const SvgAffineTest::write_matrix_tests[2] = {
- {"matrix(1,2,3,4,5,6)",Geom::Matrix(1,2,3,4,5,6)},
- {"matrix(-1,2123,3,0.4,1e-8,1e20)",Geom::Matrix(-1,2.123e3,3+1e-14,0.4,1e-8,1e20)}};
-SvgAffineTest::test_t const SvgAffineTest::write_translate_tests[3] = {
- {"translate(1,1)",Geom::Matrix(1,0,0,1,1,1)},
- {"translate(1)",Geom::Matrix(1,0,0,1,1,0)},
- {"translate(-1345,0.123)",Geom::Matrix(1,0,0,1,-1.345e3,.123)}};
-SvgAffineTest::test_t const SvgAffineTest::write_scale_tests[2] = {
- {"scale(0)",Geom::Matrix(0,0,0,0,0,0)},
- {"scale(2,3)",Geom::Matrix(2,0,0,3,0,0)}};
-SvgAffineTest::test_t const SvgAffineTest::write_rotate_tests[2] = {
- {"rotate(13)",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),0,0)},
- {"rotate(-13,7,11)",Geom::Matrix(cos(-13.*DEGREE),sin(-13.*DEGREE),-sin(-13.*DEGREE),cos(-13.*DEGREE),(1-cos(-13.*DEGREE))*7+sin(-13.*DEGREE)*11,(1-cos(-13.*DEGREE))*11-sin(-13.*DEGREE)*7)}};
-SvgAffineTest::test_t const SvgAffineTest::write_skew_tests[3] = {
- {"skewX(30)",Geom::Matrix(1,0,tan(30.*DEGREE),1,0,0)},
- {"skewX(-30)",Geom::Matrix(1,0,tan(-30.*DEGREE),1,0,0)},
- {"skewY(390)",Geom::Matrix(1,tan(30.*DEGREE),0,1,0,0)}};
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#include <cxxtest/TestSuite.h>
+
+#include "svg/svg.h"
+#include <2geom/matrix.h>
+#include <algorithm>
+#include <glib.h>
+#include <iostream>
+#include <math.h>
+#include <utility>
+
+struct streq_free2 {
+ bool operator()(char const *exp, char const *got) const
+ {
+ bool const ret = (strcmp(exp, got) == 0);
+ g_free((void*)got);
+ return ret;
+ }
+};
+
+struct approx_equal {
+ bool operator()(Geom::Matrix const &ref, Geom::Matrix const &cm) const
+ {
+ double maxabsdiff = 0;
+ for(size_t i=0; i<6; i++) {
+ maxabsdiff = std::max(std::abs(ref[i]-cm[i]), maxabsdiff);
+ }
+ return maxabsdiff < 1e-14;
+ }
+};
+
+class SvgAffineTest : public CxxTest::TestSuite
+{
+private:
+ struct test_t {
+ char const * str;
+ Geom::Matrix matrix;
+ };
+ static test_t const read_matrix_tests[3];
+ static test_t const read_translate_tests[3];
+ static test_t const read_scale_tests[3];
+ static test_t const read_rotate_tests[4];
+ static test_t const read_skew_tests[3];
+ static test_t const write_matrix_tests[2];
+ static test_t const write_translate_tests[3];
+ static test_t const write_scale_tests[2];
+ static test_t const write_rotate_tests[2];
+ static test_t const write_skew_tests[3];
+public:
+ SvgAffineTest() {
+ }
+
+ void testReadIdentity()
+ {
+ char const* strs[] = {
+ //0,
+ "",
+ "matrix(1,0,0,1,0,0)",
+ "translate(0,0)",
+ "scale(1,1)",
+ "rotate(0,0,0)",
+ "skewX(0)",
+ "skewY(0)"};
+ size_t n = G_N_ELEMENTS(strs);
+ for(size_t i=0; i<n; i++) {
+ Geom::Matrix cm;
+ TSM_ASSERT(strs[i] , sp_svg_transform_read(strs[i], &cm));
+ TSM_ASSERT_EQUALS(strs[i] , Geom::identity() , cm);
+ }
+ }
+
+ void testWriteIdentity()
+ {
+ TS_ASSERT_EQUALS(sp_svg_transform_write(Geom::identity()) , (void*)0)
+ }
+
+ void testReadMatrix()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(read_matrix_tests); i++) {
+ Geom::Matrix cm;
+ TSM_ASSERT(read_matrix_tests[i].str , sp_svg_transform_read(read_matrix_tests[i].str, &cm));
+ TSM_ASSERT_RELATION(read_matrix_tests[i].str , approx_equal , read_matrix_tests[i].matrix , cm);
+ }
+ }
+
+ void testReadTranslate()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(read_translate_tests); i++) {
+ Geom::Matrix cm;
+ TSM_ASSERT(read_translate_tests[i].str , sp_svg_transform_read(read_translate_tests[i].str, &cm));
+ TSM_ASSERT_RELATION(read_translate_tests[i].str , approx_equal , read_translate_tests[i].matrix , cm);
+ }
+ }
+
+ void testReadScale()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(read_scale_tests); i++) {
+ Geom::Matrix cm;
+ TSM_ASSERT(read_scale_tests[i].str , sp_svg_transform_read(read_scale_tests[i].str, &cm));
+ TSM_ASSERT_RELATION(read_scale_tests[i].str , approx_equal , read_scale_tests[i].matrix , cm);
+ }
+ }
+
+ void testReadRotate()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(read_rotate_tests); i++) {
+ Geom::Matrix cm;
+ TSM_ASSERT(read_rotate_tests[i].str , sp_svg_transform_read(read_rotate_tests[i].str, &cm));
+ TSM_ASSERT_RELATION(read_rotate_tests[i].str , approx_equal , read_rotate_tests[i].matrix , cm);
+ }
+ }
+
+ void testReadSkew()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(read_skew_tests); i++) {
+ Geom::Matrix cm;
+ TSM_ASSERT(read_skew_tests[i].str , sp_svg_transform_read(read_skew_tests[i].str, &cm));
+ TSM_ASSERT_RELATION(read_skew_tests[i].str , approx_equal , read_skew_tests[i].matrix , cm);
+ }
+ }
+
+ void testWriteMatrix()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(write_matrix_tests); i++) {
+ TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_matrix_tests[i].matrix) , write_matrix_tests[i].str);
+ }
+ }
+
+ void testWriteTranslate()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(write_translate_tests); i++) {
+ TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_translate_tests[i].matrix) , write_translate_tests[i].str);
+ }
+ }
+
+ void testWriteScale()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(write_scale_tests); i++) {
+ TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_scale_tests[i].matrix) , write_scale_tests[i].str);
+ }
+ }
+
+ void testWriteRotate()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(write_rotate_tests); i++) {
+ TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_rotate_tests[i].matrix) , write_rotate_tests[i].str);
+ }
+ }
+
+ void testWriteSkew()
+ {
+ for(size_t i=0; i<G_N_ELEMENTS(write_skew_tests); i++) {
+ TS_ASSERT_RELATION(streq_free2 , sp_svg_transform_write(write_skew_tests[i].matrix) , write_skew_tests[i].str);
+ }
+ }
+
+ void testReadConcatenation()
+ {
+ char const * str = "skewY(17)skewX(9)translate(7,13)scale(2)rotate(13)translate(3,5)";
+ Geom::Matrix ref(2.0199976232558053, 1.0674773585906016, -0.14125199392774669, 1.9055550612095459, 14.412730624347654, 28.499820929377454); // Precomputed using Mathematica
+ Geom::Matrix cm;
+ TS_ASSERT(sp_svg_transform_read(str, &cm));
+ TS_ASSERT_RELATION(approx_equal , ref , cm);
+ }
+
+ // TODO: Perhaps check faulty transforms (like "translate(1,2,3)", or "matrix(1,2,3,4,5)", or ...)
+};
+
+static double const DEGREE = M_PI/180.;
+
+SvgAffineTest::test_t const SvgAffineTest::read_matrix_tests[3] = {
+ {"matrix(0,0,0,0,0,0)",Geom::Matrix(0,0,0,0,0,0)},
+ {"matrix(1,2,3,4,5,6)",Geom::Matrix(1,2,3,4,5,6)},
+ {"matrix(1 2 -3,-4,5e6,-6e-7)",Geom::Matrix(1,2,-3,-4,5e6,-6e-7)}};
+SvgAffineTest::test_t const SvgAffineTest::read_translate_tests[3] = {
+ {"translate(1)",Geom::Matrix(1,0,0,1,1,0)},
+ {"translate(1,1)",Geom::Matrix(1,0,0,1,1,1)},
+ {"translate(-1e3 .123e2)",Geom::Matrix(1,0,0,1,-1e3,.123e2)}};
+SvgAffineTest::test_t const SvgAffineTest::read_scale_tests[3] = {
+ {"scale(2)",Geom::Matrix(2,0,0,2,0,0)},
+ {"scale(2,3)",Geom::Matrix(2,0,0,3,0,0)},
+ {"scale(0.1e-2 -.475e0)",Geom::Matrix(0.1e-2,0,0,-.475e0,0,0)}};
+SvgAffineTest::test_t const SvgAffineTest::read_rotate_tests[4] = {
+ {"rotate(13 )",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),0,0)},
+ {"rotate(-13)",Geom::Matrix(cos(-13.*DEGREE),sin(-13.*DEGREE),-sin(-13.*DEGREE),cos(-13.*DEGREE),0,0)},
+ {"rotate(373)",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),0,0)},
+ {"rotate(13,7,11)",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),(1-cos(13.*DEGREE))*7+sin(13.*DEGREE)*11,(1-cos(13.*DEGREE))*11-sin(13.*DEGREE)*7)}};
+SvgAffineTest::test_t const SvgAffineTest::read_skew_tests[3] = {
+ {"skewX( 30)",Geom::Matrix(1,0,tan(30.*DEGREE),1,0,0)},
+ {"skewX(-30)",Geom::Matrix(1,0,tan(-30.*DEGREE),1,0,0)},
+ {"skewY(390)",Geom::Matrix(1,tan(30.*DEGREE),0,1,0,0)}};
+
+SvgAffineTest::test_t const SvgAffineTest::write_matrix_tests[2] = {
+ {"matrix(1,2,3,4,5,6)",Geom::Matrix(1,2,3,4,5,6)},
+ {"matrix(-1,2123,3,0.4,1e-8,1e20)",Geom::Matrix(-1,2.123e3,3+1e-14,0.4,1e-8,1e20)}};
+SvgAffineTest::test_t const SvgAffineTest::write_translate_tests[3] = {
+ {"translate(1,1)",Geom::Matrix(1,0,0,1,1,1)},
+ {"translate(1)",Geom::Matrix(1,0,0,1,1,0)},
+ {"translate(-1345,0.123)",Geom::Matrix(1,0,0,1,-1.345e3,.123)}};
+SvgAffineTest::test_t const SvgAffineTest::write_scale_tests[2] = {
+ {"scale(0)",Geom::Matrix(0,0,0,0,0,0)},
+ {"scale(2,3)",Geom::Matrix(2,0,0,3,0,0)}};
+SvgAffineTest::test_t const SvgAffineTest::write_rotate_tests[2] = {
+ {"rotate(13)",Geom::Matrix(cos(13.*DEGREE),sin(13.*DEGREE),-sin(13.*DEGREE),cos(13.*DEGREE),0,0)},
+ {"rotate(-13,7,11)",Geom::Matrix(cos(-13.*DEGREE),sin(-13.*DEGREE),-sin(-13.*DEGREE),cos(-13.*DEGREE),(1-cos(-13.*DEGREE))*7+sin(-13.*DEGREE)*11,(1-cos(-13.*DEGREE))*11-sin(-13.*DEGREE)*7)}};
+SvgAffineTest::test_t const SvgAffineTest::write_skew_tests[3] = {
+ {"skewX(30)",Geom::Matrix(1,0,tan(30.*DEGREE),1,0,0)},
+ {"skewX(-30)",Geom::Matrix(1,0,tan(-30.*DEGREE),1,0,0)},
+ {"skewY(390)",Geom::Matrix(1,tan(30.*DEGREE),0,1,0,0)}};
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/svg/svg-length-test.h b/src/svg/svg-length-test.h
index 0f628ae7c..f6c6cb4f6 100644
--- a/src/svg/svg-length-test.h
+++ b/src/svg/svg-length-test.h
@@ -1,46 +1,46 @@
-#include <cxxtest/TestSuite.h>
-
-#include "svg/svg-length.h"
-#include <glib.h>
-#include <utility>
-
-class SvgLengthTest : public CxxTest::TestSuite
-{
-private:
-public:
- SvgLengthTest() {
- }
-
- void testRead()
- {
- struct test_t {
- char const* str; float computed;
- test_t(char const* str, float computed) : str(str), computed(computed) {}
- };
- test_t tests[] = {
- test_t("0",0),
- test_t("1",1),
- test_t("1.00001",1.00001),
- test_t("1px",1),
- test_t(".1px",0.1)};
- size_t n = G_N_ELEMENTS(tests);
- for(size_t i=0; i<n; i++) {
- SVGLength l;
- TSM_ASSERT(tests[i].str , l.read(tests[i].str));
- TSM_ASSERT_EQUALS(tests[i].str , l.computed , tests[i].computed);
- }
- }
-
- // TODO: More tests
-};
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#include <cxxtest/TestSuite.h>
+
+#include "svg/svg-length.h"
+#include <glib.h>
+#include <utility>
+
+class SvgLengthTest : public CxxTest::TestSuite
+{
+private:
+public:
+ SvgLengthTest() {
+ }
+
+ void testRead()
+ {
+ struct test_t {
+ char const* str; float computed;
+ test_t(char const* str, float computed) : str(str), computed(computed) {}
+ };
+ test_t tests[] = {
+ test_t("0",0),
+ test_t("1",1),
+ test_t("1.00001",1.00001),
+ test_t("1px",1),
+ test_t(".1px",0.1)};
+ size_t n = G_N_ELEMENTS(tests);
+ for(size_t i=0; i<n; i++) {
+ SVGLength l;
+ TSM_ASSERT(tests[i].str , l.read(tests[i].str));
+ TSM_ASSERT_EQUALS(tests[i].str , l.computed , tests[i].computed);
+ }
+ }
+
+ // TODO: More tests
+};
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/svg/svg-path-test.h b/src/svg/svg-path-test.h
index 5247ace83..5e2038527 100644
--- a/src/svg/svg-path-test.h
+++ b/src/svg/svg-path-test.h
@@ -1,472 +1,472 @@
-#include <cxxtest/TestSuite.h>
-#include "libnr/n-art-bpath.h"
-#include "svg/svg.h"
-#include "2geom/coord.h"
-#include <string>
-#include <vector>
-#include <glib/gmem.h>
-
-class SvgPathTest : public CxxTest::TestSuite
-{
-private:
- std::vector<std::string> rectanglesAbsoluteClosed;
- std::vector<std::string> rectanglesRelativeClosed;
- std::vector<std::string> rectanglesAbsoluteOpen;
- std::vector<std::string> rectanglesRelativeOpen;
- NArtBpath rectangleBpath[5+1];
-public:
- SvgPathTest() {
- // Lots of ways to define the same rectangle
- rectanglesAbsoluteClosed.push_back("M 1,2 L 4,2 L 4,8 L 1,8 L 1,2 Z");
- rectanglesAbsoluteClosed.push_back("M 1,2 L 4,2 L 4,8 L 1,8 z");
- rectanglesAbsoluteClosed.push_back("M 1,2 4,2 4,8 1,8 z");
- rectanglesAbsoluteClosed.push_back("M 1,2 H 4 V 8 H 1 z");
- rectanglesRelativeClosed.push_back("m 1,2 l 3,0 l 0,6 l -3,0 z");
- rectanglesRelativeClosed.push_back("m 1,2 3,0 0,6 -3,0 z");
- rectanglesRelativeClosed.push_back("m 1,2 h 3 v 6 h -3 z");
- rectanglesAbsoluteOpen.push_back("M 1,2 L 4,2 L 4,8 L 1,8 L 1,2");
- rectanglesAbsoluteOpen.push_back("M 1,2 4,2 4,8 1,8 1,2");
- rectanglesAbsoluteOpen.push_back("M 1,2 H 4 V 8 H 1 V 2");
- rectanglesRelativeOpen.push_back("m 1,2 l 3,0 l 0,6 l -3,0 l 0,-6");
- rectanglesRelativeOpen.push_back("m 1,2 3,0 0,6 -3,0 0,-6");
- rectanglesRelativeOpen.push_back("m 1,2 h 3 v 6 h -3 v -6");
- rectangleBpath[0].code = NR_MOVETO;
- rectangleBpath[0].x3 = 1;
- rectangleBpath[0].y3 = 2;
- rectangleBpath[1].code = NR_LINETO;
- rectangleBpath[1].x3 = 4;
- rectangleBpath[1].y3 = 2;
- rectangleBpath[2].code = NR_LINETO;
- rectangleBpath[2].x3 = 4;
- rectangleBpath[2].y3 = 8;
- rectangleBpath[3].code = NR_LINETO;
- rectangleBpath[3].x3 = 1;
- rectangleBpath[3].y3 = 8;
- rectangleBpath[4].code = NR_LINETO;
- rectangleBpath[4].x3 = 1;
- rectangleBpath[4].y3 = 2;
- rectangleBpath[5].code = NR_END;
- // TODO: Also test some (smooth) cubic/quadratic beziers and elliptical arcs
- }
-
- void testReadRectanglesAbsoluteClosed()
- {
- rectangleBpath[0].code = NR_MOVETO;
- for(size_t i=0; i<rectanglesAbsoluteClosed.size(); i++) {
- NArtBpath * bpath = sp_svg_read_path(rectanglesAbsoluteClosed[i].c_str());
- TS_ASSERT(bpathEqual(bpath,rectangleBpath));
- g_free(bpath);
- }
- }
-
- void testReadRectanglesRelativeClosed()
- {
- rectangleBpath[0].code = NR_MOVETO;
- for(size_t i=0; i<rectanglesRelativeClosed.size(); i++) {
- NArtBpath * bpath = sp_svg_read_path(rectanglesRelativeClosed[i].c_str());
- TS_ASSERT(bpathEqual(bpath,rectangleBpath));
- g_free(bpath);
- }
- }
-
- void testReadRectanglesAbsoluteOpen()
- {
- rectangleBpath[0].code = NR_MOVETO_OPEN;
- for(size_t i=0; i<rectanglesAbsoluteOpen.size(); i++) {
- NArtBpath * bpath = sp_svg_read_path(rectanglesAbsoluteOpen[i].c_str());
- TS_ASSERT(bpathEqual(bpath,rectangleBpath));
- g_free(bpath);
- }
- }
-
- void testReadRectanglesRelativeOpen()
- {
- rectangleBpath[0].code = NR_MOVETO_OPEN;
- for(size_t i=0; i<rectanglesRelativeOpen.size(); i++) {
- NArtBpath * bpath = sp_svg_read_path(rectanglesRelativeOpen[i].c_str());
- TS_ASSERT(bpathEqual(bpath,rectangleBpath));
- g_free(bpath);
- }
- }
-
- void testReadConcatenatedPaths()
- {
- NArtBpath bpath_good[4*5+1];
- for(size_t i=0; i<4; i++) {
- memcpy(bpath_good+i*5,rectangleBpath,sizeof(rectangleBpath[0])*5);
- }
- bpath_good[0*5].code = NR_MOVETO;
- bpath_good[1*5].code = NR_MOVETO_OPEN;
- bpath_good[2*5].code = NR_MOVETO;
- bpath_good[3*5].code = NR_MOVETO_OPEN;
- bpath_good[4*5].code = NR_END;
- for(size_t i=0; i<5; i++) {
- bpath_good[1*5+i].x3 += bpath_good[0*5+4].x3;
- bpath_good[1*5+i].y3 += bpath_good[0*5+4].y3;
- }
- for(size_t i=0; i<5; i++) {
- bpath_good[2*5+i].x3 += bpath_good[1*5+4].x3;
- bpath_good[2*5+i].y3 += bpath_good[1*5+4].y3;
- }
- std::string path_str = rectanglesAbsoluteClosed[0] + rectanglesRelativeOpen[0] + rectanglesRelativeClosed[0] + rectanglesAbsoluteOpen[0];
- NArtBpath * bpath = sp_svg_read_path(path_str.c_str());
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testReadZeroLengthSubpaths() {
- // Per the SVG 1.1 specification (section F5) zero-length subpaths are relevant
- NArtBpath bpath_good[8+1];
- bpath_good[0].code = NR_MOVETO_OPEN;
- bpath_good[0].x3 = bpath_good[0].y3 = 0;
- bpath_good[1].code = NR_MOVETO_OPEN;
- bpath_good[1].x3 = bpath_good[1].y3 = 1;
- bpath_good[2].code = NR_LINETO;
- bpath_good[2].x3 = bpath_good[2].y3 = 2;
- bpath_good[3].code = NR_MOVETO;
- bpath_good[3].x3 = bpath_good[3].y3 = 3;
- bpath_good[4].code = NR_MOVETO;
- bpath_good[4].x3 = bpath_good[4].y3 = 4;
- bpath_good[5].code = NR_LINETO;
- bpath_good[5].x3 = bpath_good[5].y3 = 5;
- bpath_good[6].code = NR_LINETO;
- bpath_good[6].x3 = bpath_good[6].y3 = 4;
- bpath_good[7].code = NR_MOVETO_OPEN;
- bpath_good[7].x3 = bpath_good[7].y3 = 6;
- bpath_good[8].code = NR_END;
- { // Test absolute version
- char const * path_str = "M 0,0 M 1,1 L 2,2 M 3,3 z M 4,4 L 5,5 z M 6,6";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- { // Test relative version
- char const * path_str = "m 0,0 m 1,1 l 1,1 m 1,1 z m 1,1 l 1,1 z m 2,2";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- }
-
- void testReadImplicitMoveto() {
- NArtBpath bpath_good[6+1];
- bpath_good[0].code = NR_MOVETO;
- bpath_good[0].x3 = bpath_good[0].y3 = 1;
- bpath_good[1].code = NR_LINETO;
- bpath_good[1].x3 = bpath_good[1].y3 = 2;
- bpath_good[2].code = NR_LINETO;
- bpath_good[2].x3 = bpath_good[2].y3 = 1;
- bpath_good[3].code = NR_MOVETO;
- bpath_good[3].x3 = bpath_good[3].y3 = 1;
- bpath_good[4].code = NR_LINETO;
- bpath_good[4].x3 = bpath_good[4].y3 = 3;
- bpath_good[5].code = NR_LINETO;
- bpath_good[5].x3 = bpath_good[5].y3 = 1;
- bpath_good[6].code = NR_END;
- { // Test absolute version
- char const * path_str = "M 1,1 L 2,2 z L 3,3 z";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- { // Test relative version
- char const * path_str = "M 1,1 L 2,2 z L 3,3 z";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- }
-
- void testReadFloatingPoint() {
- NArtBpath bpath_good[5+1];
- bpath_good[0].code = NR_MOVETO;
- bpath_good[0].x3 = .01;
- bpath_good[0].y3 = .02;
- bpath_good[1].code = NR_LINETO;
- bpath_good[1].x3 = .04;
- bpath_good[1].y3 = .02;
- bpath_good[2].code = NR_LINETO;
- bpath_good[2].x3 = 1.5;
- bpath_good[2].y3 = 1.6;
- bpath_good[3].code = NR_LINETO;
- bpath_good[3].x3 = .01;
- bpath_good[3].y3 = .08;
- bpath_good[4].code = NR_LINETO;
- bpath_good[4].x3 = .01;
- bpath_good[4].y3 = .02;
- bpath_good[5].code = NR_END;
- { // Test decimals
- char const * path_str = "M .01,.02 L.04.02 L1.5,1.6L0.01,0.08 .01.02 z";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- { // Test exponent
- char const * path_str = "M 1e-2,.2e-1 L 0.004e1,0.0002e+2 L0150E-2,1.6e0L1.0e-2,80e-3 z";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- }
-
- void testReadImplicitSeparation() {
- // Coordinates need not be separated by whitespace if they can still be read unambiguously
- NArtBpath bpath_good[5+1];
- bpath_good[0].code = NR_MOVETO;
- bpath_good[0].x3 = .1;
- bpath_good[0].y3 = .2;
- bpath_good[1].code = NR_LINETO;
- bpath_good[1].x3 = .4;
- bpath_good[1].y3 = .2;
- bpath_good[2].code = NR_LINETO;
- bpath_good[2].x3 = .4;
- bpath_good[2].y3 = .8;
- bpath_good[3].code = NR_LINETO;
- bpath_good[3].x3 = .1;
- bpath_good[3].y3 = .8;
- bpath_good[4].code = NR_LINETO;
- bpath_good[4].x3 = .1;
- bpath_good[4].y3 = .2;
- bpath_good[5].code = NR_END;
- { // Test absolute
- char const * path_str = "M .1.2+0.4.2e0.4e0+8e-1.1.8 z";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- { // Test relative
- char const * path_str = "m .1.2+0.3.0e0.0e0+6e-1-.3.0 z";
- NArtBpath * bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
- }
-
- void testReadErrorMisplacedCharacter() {
- char const * path_str;
- NArtBpath * bpath;
- NArtBpath * bpath_good = rectangleBpath;
- bpath_good[0].code = NR_MOVETO;
- // Comma in the wrong place (commas may only appear between parameters)
- path_str = "M 1,2 4,2 4,8 1,8 z , m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Comma in the wrong place (commas may only appear between parameters)
- path_str = "M 1,2 4,2 4,8 1,8 z m,13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Period in the wrong place (no numbers after a 'z')
- path_str = "M 1,2 4,2 4,8 1,8 z . m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Sign in the wrong place (no numbers after a 'z')
- path_str = "M 1,2 4,2 4,8 1,8 z + - m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Digit in the wrong place (no numbers after a 'z')
- path_str = "M 1,2 4,2 4,8 1,8 z 9809 m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Digit in the wrong place (no numbers after a 'z')
- path_str = "M 1,2 4,2 4,8 1,8 z 9809 876 m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testReadErrorUnrecognizedCharacter() {
- char const * path_str;
- NArtBpath * bpath;
- NArtBpath * bpath_good = rectangleBpath;
- bpath_good[0].code = NR_MOVETO;
- // Unrecognized character
- path_str = "M 1,2 4,2 4,8 1,8 z&m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Unrecognized character
- path_str = "M 1,2 4,2 4,8 1,8 z m &13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testReadErrorTypo() {
- char const * path_str;
- NArtBpath * bpath;
- NArtBpath * bpath_good = rectangleBpath;
- bpath_good[0].code = NR_MOVETO;
- // Typo
- path_str = "M 1,2 4,2 4,8 1,8 z j 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
-
- bpath_good[0].code = NR_MOVETO_OPEN;
- // Typo
- path_str = "M 1,2 4,2 4,8 1,8 L 1,2 x m 13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testReadErrorIllformedNumbers() {
- char const * path_str;
- NArtBpath * bpath;
- NArtBpath * bpath_good = rectangleBpath;
- bpath_good[0].code = NR_MOVETO;
- // Double exponent
- path_str = "M 1,2 4,2 4,8 1,8 z m 13e4e5,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Double sign
- path_str = "M 1,2 4,2 4,8 1,8 z m +-13,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Double sign
- path_str = "M 1,2 4,2 4,8 1,8 z m 13e+-12,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // No digit
- path_str = "M 1,2 4,2 4,8 1,8 z m .e12,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // No digit
- path_str = "M 1,2 4,2 4,8 1,8 z m .,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // No digit
- path_str = "M 1,2 4,2 4,8 1,8 z m +,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // No digit
- path_str = "M 1,2 4,2 4,8 1,8 z m +.e+,15";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testReadErrorJunk() {
- char const * path_str;
- NArtBpath * bpath;
- NArtBpath * bpath_good = rectangleBpath;
- bpath_good[0].code = NR_MOVETO;
- // Junk
- path_str = "M 1,2 4,2 4,8 1,8 z j 357 hkjh.,34e34 90ih6kj4 h5k6vlh4N.,6,45wikuyi3yere..3487 m 13,23";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testReadErrorStopReading() {
- char const * path_str;
- NArtBpath * bpath;
- NArtBpath * bpath_good = rectangleBpath;
- bpath_good[0].code = NR_MOVETO;
- // Unrecognized parameter
- path_str = "M 1,2 4,2 4,8 1,8 z m #$%,23,34";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Invalid parameter
- path_str = "M 1,2 4,2 4,8 1,8 z m #$%,23,34";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- // Illformed parameter
- path_str = "M 1,2 4,2 4,8 1,8 z m +-12,23,34";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
-
- bpath_good[0].code = NR_MOVETO_OPEN;
- // "Third" parameter
- path_str = "M 1,2 4,2 4,8 1,8 1,2,3 M 12,23";
- bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,bpath_good));
- g_free(bpath);
- }
-
- void testRoundTrip() {
- // This is the easiest way to (also) test writing path data, as a path can be written in more than one way.
- NArtBpath * bpath;
- NArtBpath * new_bpath;
- char * path_str;
- // Rectangle (closed)
- bpath = sp_svg_read_path(rectanglesAbsoluteClosed[0].c_str());
- path_str = sp_svg_write_path(bpath);
- new_bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,new_bpath));
- g_free(bpath); g_free(path_str); g_free(new_bpath);
- // Rectangle (open)
- bpath = sp_svg_read_path(rectanglesAbsoluteOpen[0].c_str());
- path_str = sp_svg_write_path(bpath);
- new_bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,new_bpath));
- g_free(bpath); g_free(path_str); g_free(new_bpath);
- // Concatenated rectangles
- bpath = sp_svg_read_path((rectanglesAbsoluteClosed[0] + rectanglesRelativeOpen[0] + rectanglesRelativeClosed[0] + rectanglesAbsoluteOpen[0]).c_str());
- path_str = sp_svg_write_path(bpath);
- new_bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,new_bpath));
- g_free(bpath); g_free(path_str); g_free(new_bpath);
- // Zero-length subpaths
- bpath = sp_svg_read_path("M 0,0 M 1,1 L 2,2 M 3,3 z M 4,4 L 5,5 z M 6,6");
- path_str = sp_svg_write_path(bpath);
- new_bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath,new_bpath));
- g_free(bpath); g_free(path_str); g_free(new_bpath);
- // Floating-point
- bpath = sp_svg_read_path("M .01,.02 L 0.04,0.02 L.04,.08L0.01,0.08 z""M 1e-2,.2e-1 L 0.004e1,0.0002e+2 L04E-2,.08e0L1.0e-2,80e-3 z");
- path_str = sp_svg_write_path(bpath);
- new_bpath = sp_svg_read_path(path_str);
- TS_ASSERT(bpathEqual(bpath, new_bpath, 1e-17));
- g_free(bpath); g_free(path_str); g_free(new_bpath);
- }
-
-private:
- bool bpathEqual(NArtBpath const * a, NArtBpath const * b, double eps = 1e-16) {
- while(a->code != NR_END && b->code == a->code) {
- switch(a->code) {
- case NR_MOVETO:
- case NR_MOVETO_OPEN:
- case NR_LINETO:
- if (!Geom::are_near(a->x3,b->x3, eps) || !Geom::are_near(a->y3,b->y3, eps)) return false;
- break;
- case NR_CURVETO:
- if (!Geom::are_near(a->x1,b->x1, eps) || !Geom::are_near(a->y1,b->y1, eps)) return false;
- if (!Geom::are_near(a->x2,b->x2, eps) || !Geom::are_near(a->y2,b->y2, eps)) return false;
- if (!Geom::are_near(a->x3,b->x3, eps) || !Geom::are_near(a->y3,b->y3, eps)) return false;
- break;
- default:
- TS_FAIL("Unknown path code!");
- }
- a++;
- b++;
- }
- return a->code == b->code;
- }
-};
-
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#include <cxxtest/TestSuite.h>
+#include "libnr/n-art-bpath.h"
+#include "svg/svg.h"
+#include "2geom/coord.h"
+#include <string>
+#include <vector>
+#include <glib/gmem.h>
+
+class SvgPathTest : public CxxTest::TestSuite
+{
+private:
+ std::vector<std::string> rectanglesAbsoluteClosed;
+ std::vector<std::string> rectanglesRelativeClosed;
+ std::vector<std::string> rectanglesAbsoluteOpen;
+ std::vector<std::string> rectanglesRelativeOpen;
+ NArtBpath rectangleBpath[5+1];
+public:
+ SvgPathTest() {
+ // Lots of ways to define the same rectangle
+ rectanglesAbsoluteClosed.push_back("M 1,2 L 4,2 L 4,8 L 1,8 L 1,2 Z");
+ rectanglesAbsoluteClosed.push_back("M 1,2 L 4,2 L 4,8 L 1,8 z");
+ rectanglesAbsoluteClosed.push_back("M 1,2 4,2 4,8 1,8 z");
+ rectanglesAbsoluteClosed.push_back("M 1,2 H 4 V 8 H 1 z");
+ rectanglesRelativeClosed.push_back("m 1,2 l 3,0 l 0,6 l -3,0 z");
+ rectanglesRelativeClosed.push_back("m 1,2 3,0 0,6 -3,0 z");
+ rectanglesRelativeClosed.push_back("m 1,2 h 3 v 6 h -3 z");
+ rectanglesAbsoluteOpen.push_back("M 1,2 L 4,2 L 4,8 L 1,8 L 1,2");
+ rectanglesAbsoluteOpen.push_back("M 1,2 4,2 4,8 1,8 1,2");
+ rectanglesAbsoluteOpen.push_back("M 1,2 H 4 V 8 H 1 V 2");
+ rectanglesRelativeOpen.push_back("m 1,2 l 3,0 l 0,6 l -3,0 l 0,-6");
+ rectanglesRelativeOpen.push_back("m 1,2 3,0 0,6 -3,0 0,-6");
+ rectanglesRelativeOpen.push_back("m 1,2 h 3 v 6 h -3 v -6");
+ rectangleBpath[0].code = NR_MOVETO;
+ rectangleBpath[0].x3 = 1;
+ rectangleBpath[0].y3 = 2;
+ rectangleBpath[1].code = NR_LINETO;
+ rectangleBpath[1].x3 = 4;
+ rectangleBpath[1].y3 = 2;
+ rectangleBpath[2].code = NR_LINETO;
+ rectangleBpath[2].x3 = 4;
+ rectangleBpath[2].y3 = 8;
+ rectangleBpath[3].code = NR_LINETO;
+ rectangleBpath[3].x3 = 1;
+ rectangleBpath[3].y3 = 8;
+ rectangleBpath[4].code = NR_LINETO;
+ rectangleBpath[4].x3 = 1;
+ rectangleBpath[4].y3 = 2;
+ rectangleBpath[5].code = NR_END;
+ // TODO: Also test some (smooth) cubic/quadratic beziers and elliptical arcs
+ }
+
+ void testReadRectanglesAbsoluteClosed()
+ {
+ rectangleBpath[0].code = NR_MOVETO;
+ for(size_t i=0; i<rectanglesAbsoluteClosed.size(); i++) {
+ NArtBpath * bpath = sp_svg_read_path(rectanglesAbsoluteClosed[i].c_str());
+ TS_ASSERT(bpathEqual(bpath,rectangleBpath));
+ g_free(bpath);
+ }
+ }
+
+ void testReadRectanglesRelativeClosed()
+ {
+ rectangleBpath[0].code = NR_MOVETO;
+ for(size_t i=0; i<rectanglesRelativeClosed.size(); i++) {
+ NArtBpath * bpath = sp_svg_read_path(rectanglesRelativeClosed[i].c_str());
+ TS_ASSERT(bpathEqual(bpath,rectangleBpath));
+ g_free(bpath);
+ }
+ }
+
+ void testReadRectanglesAbsoluteOpen()
+ {
+ rectangleBpath[0].code = NR_MOVETO_OPEN;
+ for(size_t i=0; i<rectanglesAbsoluteOpen.size(); i++) {
+ NArtBpath * bpath = sp_svg_read_path(rectanglesAbsoluteOpen[i].c_str());
+ TS_ASSERT(bpathEqual(bpath,rectangleBpath));
+ g_free(bpath);
+ }
+ }
+
+ void testReadRectanglesRelativeOpen()
+ {
+ rectangleBpath[0].code = NR_MOVETO_OPEN;
+ for(size_t i=0; i<rectanglesRelativeOpen.size(); i++) {
+ NArtBpath * bpath = sp_svg_read_path(rectanglesRelativeOpen[i].c_str());
+ TS_ASSERT(bpathEqual(bpath,rectangleBpath));
+ g_free(bpath);
+ }
+ }
+
+ void testReadConcatenatedPaths()
+ {
+ NArtBpath bpath_good[4*5+1];
+ for(size_t i=0; i<4; i++) {
+ memcpy(bpath_good+i*5,rectangleBpath,sizeof(rectangleBpath[0])*5);
+ }
+ bpath_good[0*5].code = NR_MOVETO;
+ bpath_good[1*5].code = NR_MOVETO_OPEN;
+ bpath_good[2*5].code = NR_MOVETO;
+ bpath_good[3*5].code = NR_MOVETO_OPEN;
+ bpath_good[4*5].code = NR_END;
+ for(size_t i=0; i<5; i++) {
+ bpath_good[1*5+i].x3 += bpath_good[0*5+4].x3;
+ bpath_good[1*5+i].y3 += bpath_good[0*5+4].y3;
+ }
+ for(size_t i=0; i<5; i++) {
+ bpath_good[2*5+i].x3 += bpath_good[1*5+4].x3;
+ bpath_good[2*5+i].y3 += bpath_good[1*5+4].y3;
+ }
+ std::string path_str = rectanglesAbsoluteClosed[0] + rectanglesRelativeOpen[0] + rectanglesRelativeClosed[0] + rectanglesAbsoluteOpen[0];
+ NArtBpath * bpath = sp_svg_read_path(path_str.c_str());
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testReadZeroLengthSubpaths() {
+ // Per the SVG 1.1 specification (section F5) zero-length subpaths are relevant
+ NArtBpath bpath_good[8+1];
+ bpath_good[0].code = NR_MOVETO_OPEN;
+ bpath_good[0].x3 = bpath_good[0].y3 = 0;
+ bpath_good[1].code = NR_MOVETO_OPEN;
+ bpath_good[1].x3 = bpath_good[1].y3 = 1;
+ bpath_good[2].code = NR_LINETO;
+ bpath_good[2].x3 = bpath_good[2].y3 = 2;
+ bpath_good[3].code = NR_MOVETO;
+ bpath_good[3].x3 = bpath_good[3].y3 = 3;
+ bpath_good[4].code = NR_MOVETO;
+ bpath_good[4].x3 = bpath_good[4].y3 = 4;
+ bpath_good[5].code = NR_LINETO;
+ bpath_good[5].x3 = bpath_good[5].y3 = 5;
+ bpath_good[6].code = NR_LINETO;
+ bpath_good[6].x3 = bpath_good[6].y3 = 4;
+ bpath_good[7].code = NR_MOVETO_OPEN;
+ bpath_good[7].x3 = bpath_good[7].y3 = 6;
+ bpath_good[8].code = NR_END;
+ { // Test absolute version
+ char const * path_str = "M 0,0 M 1,1 L 2,2 M 3,3 z M 4,4 L 5,5 z M 6,6";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ { // Test relative version
+ char const * path_str = "m 0,0 m 1,1 l 1,1 m 1,1 z m 1,1 l 1,1 z m 2,2";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ }
+
+ void testReadImplicitMoveto() {
+ NArtBpath bpath_good[6+1];
+ bpath_good[0].code = NR_MOVETO;
+ bpath_good[0].x3 = bpath_good[0].y3 = 1;
+ bpath_good[1].code = NR_LINETO;
+ bpath_good[1].x3 = bpath_good[1].y3 = 2;
+ bpath_good[2].code = NR_LINETO;
+ bpath_good[2].x3 = bpath_good[2].y3 = 1;
+ bpath_good[3].code = NR_MOVETO;
+ bpath_good[3].x3 = bpath_good[3].y3 = 1;
+ bpath_good[4].code = NR_LINETO;
+ bpath_good[4].x3 = bpath_good[4].y3 = 3;
+ bpath_good[5].code = NR_LINETO;
+ bpath_good[5].x3 = bpath_good[5].y3 = 1;
+ bpath_good[6].code = NR_END;
+ { // Test absolute version
+ char const * path_str = "M 1,1 L 2,2 z L 3,3 z";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ { // Test relative version
+ char const * path_str = "M 1,1 L 2,2 z L 3,3 z";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ }
+
+ void testReadFloatingPoint() {
+ NArtBpath bpath_good[5+1];
+ bpath_good[0].code = NR_MOVETO;
+ bpath_good[0].x3 = .01;
+ bpath_good[0].y3 = .02;
+ bpath_good[1].code = NR_LINETO;
+ bpath_good[1].x3 = .04;
+ bpath_good[1].y3 = .02;
+ bpath_good[2].code = NR_LINETO;
+ bpath_good[2].x3 = 1.5;
+ bpath_good[2].y3 = 1.6;
+ bpath_good[3].code = NR_LINETO;
+ bpath_good[3].x3 = .01;
+ bpath_good[3].y3 = .08;
+ bpath_good[4].code = NR_LINETO;
+ bpath_good[4].x3 = .01;
+ bpath_good[4].y3 = .02;
+ bpath_good[5].code = NR_END;
+ { // Test decimals
+ char const * path_str = "M .01,.02 L.04.02 L1.5,1.6L0.01,0.08 .01.02 z";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ { // Test exponent
+ char const * path_str = "M 1e-2,.2e-1 L 0.004e1,0.0002e+2 L0150E-2,1.6e0L1.0e-2,80e-3 z";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ }
+
+ void testReadImplicitSeparation() {
+ // Coordinates need not be separated by whitespace if they can still be read unambiguously
+ NArtBpath bpath_good[5+1];
+ bpath_good[0].code = NR_MOVETO;
+ bpath_good[0].x3 = .1;
+ bpath_good[0].y3 = .2;
+ bpath_good[1].code = NR_LINETO;
+ bpath_good[1].x3 = .4;
+ bpath_good[1].y3 = .2;
+ bpath_good[2].code = NR_LINETO;
+ bpath_good[2].x3 = .4;
+ bpath_good[2].y3 = .8;
+ bpath_good[3].code = NR_LINETO;
+ bpath_good[3].x3 = .1;
+ bpath_good[3].y3 = .8;
+ bpath_good[4].code = NR_LINETO;
+ bpath_good[4].x3 = .1;
+ bpath_good[4].y3 = .2;
+ bpath_good[5].code = NR_END;
+ { // Test absolute
+ char const * path_str = "M .1.2+0.4.2e0.4e0+8e-1.1.8 z";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ { // Test relative
+ char const * path_str = "m .1.2+0.3.0e0.0e0+6e-1-.3.0 z";
+ NArtBpath * bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+ }
+
+ void testReadErrorMisplacedCharacter() {
+ char const * path_str;
+ NArtBpath * bpath;
+ NArtBpath * bpath_good = rectangleBpath;
+ bpath_good[0].code = NR_MOVETO;
+ // Comma in the wrong place (commas may only appear between parameters)
+ path_str = "M 1,2 4,2 4,8 1,8 z , m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Comma in the wrong place (commas may only appear between parameters)
+ path_str = "M 1,2 4,2 4,8 1,8 z m,13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Period in the wrong place (no numbers after a 'z')
+ path_str = "M 1,2 4,2 4,8 1,8 z . m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Sign in the wrong place (no numbers after a 'z')
+ path_str = "M 1,2 4,2 4,8 1,8 z + - m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Digit in the wrong place (no numbers after a 'z')
+ path_str = "M 1,2 4,2 4,8 1,8 z 9809 m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Digit in the wrong place (no numbers after a 'z')
+ path_str = "M 1,2 4,2 4,8 1,8 z 9809 876 m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testReadErrorUnrecognizedCharacter() {
+ char const * path_str;
+ NArtBpath * bpath;
+ NArtBpath * bpath_good = rectangleBpath;
+ bpath_good[0].code = NR_MOVETO;
+ // Unrecognized character
+ path_str = "M 1,2 4,2 4,8 1,8 z&m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Unrecognized character
+ path_str = "M 1,2 4,2 4,8 1,8 z m &13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testReadErrorTypo() {
+ char const * path_str;
+ NArtBpath * bpath;
+ NArtBpath * bpath_good = rectangleBpath;
+ bpath_good[0].code = NR_MOVETO;
+ // Typo
+ path_str = "M 1,2 4,2 4,8 1,8 z j 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+
+ bpath_good[0].code = NR_MOVETO_OPEN;
+ // Typo
+ path_str = "M 1,2 4,2 4,8 1,8 L 1,2 x m 13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testReadErrorIllformedNumbers() {
+ char const * path_str;
+ NArtBpath * bpath;
+ NArtBpath * bpath_good = rectangleBpath;
+ bpath_good[0].code = NR_MOVETO;
+ // Double exponent
+ path_str = "M 1,2 4,2 4,8 1,8 z m 13e4e5,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Double sign
+ path_str = "M 1,2 4,2 4,8 1,8 z m +-13,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Double sign
+ path_str = "M 1,2 4,2 4,8 1,8 z m 13e+-12,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // No digit
+ path_str = "M 1,2 4,2 4,8 1,8 z m .e12,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // No digit
+ path_str = "M 1,2 4,2 4,8 1,8 z m .,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // No digit
+ path_str = "M 1,2 4,2 4,8 1,8 z m +,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // No digit
+ path_str = "M 1,2 4,2 4,8 1,8 z m +.e+,15";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testReadErrorJunk() {
+ char const * path_str;
+ NArtBpath * bpath;
+ NArtBpath * bpath_good = rectangleBpath;
+ bpath_good[0].code = NR_MOVETO;
+ // Junk
+ path_str = "M 1,2 4,2 4,8 1,8 z j 357 hkjh.,34e34 90ih6kj4 h5k6vlh4N.,6,45wikuyi3yere..3487 m 13,23";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testReadErrorStopReading() {
+ char const * path_str;
+ NArtBpath * bpath;
+ NArtBpath * bpath_good = rectangleBpath;
+ bpath_good[0].code = NR_MOVETO;
+ // Unrecognized parameter
+ path_str = "M 1,2 4,2 4,8 1,8 z m #$%,23,34";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Invalid parameter
+ path_str = "M 1,2 4,2 4,8 1,8 z m #$%,23,34";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ // Illformed parameter
+ path_str = "M 1,2 4,2 4,8 1,8 z m +-12,23,34";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+
+ bpath_good[0].code = NR_MOVETO_OPEN;
+ // "Third" parameter
+ path_str = "M 1,2 4,2 4,8 1,8 1,2,3 M 12,23";
+ bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,bpath_good));
+ g_free(bpath);
+ }
+
+ void testRoundTrip() {
+ // This is the easiest way to (also) test writing path data, as a path can be written in more than one way.
+ NArtBpath * bpath;
+ NArtBpath * new_bpath;
+ char * path_str;
+ // Rectangle (closed)
+ bpath = sp_svg_read_path(rectanglesAbsoluteClosed[0].c_str());
+ path_str = sp_svg_write_path(bpath);
+ new_bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,new_bpath));
+ g_free(bpath); g_free(path_str); g_free(new_bpath);
+ // Rectangle (open)
+ bpath = sp_svg_read_path(rectanglesAbsoluteOpen[0].c_str());
+ path_str = sp_svg_write_path(bpath);
+ new_bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,new_bpath));
+ g_free(bpath); g_free(path_str); g_free(new_bpath);
+ // Concatenated rectangles
+ bpath = sp_svg_read_path((rectanglesAbsoluteClosed[0] + rectanglesRelativeOpen[0] + rectanglesRelativeClosed[0] + rectanglesAbsoluteOpen[0]).c_str());
+ path_str = sp_svg_write_path(bpath);
+ new_bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,new_bpath));
+ g_free(bpath); g_free(path_str); g_free(new_bpath);
+ // Zero-length subpaths
+ bpath = sp_svg_read_path("M 0,0 M 1,1 L 2,2 M 3,3 z M 4,4 L 5,5 z M 6,6");
+ path_str = sp_svg_write_path(bpath);
+ new_bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath,new_bpath));
+ g_free(bpath); g_free(path_str); g_free(new_bpath);
+ // Floating-point
+ bpath = sp_svg_read_path("M .01,.02 L 0.04,0.02 L.04,.08L0.01,0.08 z""M 1e-2,.2e-1 L 0.004e1,0.0002e+2 L04E-2,.08e0L1.0e-2,80e-3 z");
+ path_str = sp_svg_write_path(bpath);
+ new_bpath = sp_svg_read_path(path_str);
+ TS_ASSERT(bpathEqual(bpath, new_bpath, 1e-17));
+ g_free(bpath); g_free(path_str); g_free(new_bpath);
+ }
+
+private:
+ bool bpathEqual(NArtBpath const * a, NArtBpath const * b, double eps = 1e-16) {
+ while(a->code != NR_END && b->code == a->code) {
+ switch(a->code) {
+ case NR_MOVETO:
+ case NR_MOVETO_OPEN:
+ case NR_LINETO:
+ if (!Geom::are_near(a->x3,b->x3, eps) || !Geom::are_near(a->y3,b->y3, eps)) return false;
+ break;
+ case NR_CURVETO:
+ if (!Geom::are_near(a->x1,b->x1, eps) || !Geom::are_near(a->y1,b->y1, eps)) return false;
+ if (!Geom::are_near(a->x2,b->x2, eps) || !Geom::are_near(a->y2,b->y2, eps)) return false;
+ if (!Geom::are_near(a->x3,b->x3, eps) || !Geom::are_near(a->y3,b->y3, eps)) return false;
+ break;
+ default:
+ TS_FAIL("Unknown path code!");
+ }
+ a++;
+ b++;
+ }
+ return a->code == b->code;
+ }
+};
+
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/util/list-container-test.h b/src/util/list-container-test.h
index 9d8507f65..1c4fe511b 100644
--- a/src/util/list-container-test.h
+++ b/src/util/list-container-test.h
@@ -1,245 +1,245 @@
-#include <cxxtest/TestSuite.h>
-
-#include <stdarg.h>
-#include "util/list-container.h"
-
-using Inkscape::Util::ListContainer;
-
-#define ARRAY_RANGE(array) (array), (array)+sizeof((array))/sizeof((array)[0])
-
-static bool check_values(ListContainer<int> const &c, unsigned n_values, ...) {
- bool ret = true;
- va_list args;
- va_start(args, n_values);
- ListContainer<int>::const_iterator iter(c.begin());
- while ( n_values && iter != c.end() ) {
- int const value = va_arg(args, int);
- if ( value != *iter ) {
- ret = false;
- }
- if ( n_values == 1 && &c.back() != &*iter ) {
- ret = false;
- }
- n_values--;
- ++iter;
- }
- va_end(args);
- return ret && n_values == 0 && iter == c.end();
-}
-
-class ListContainerTest : public CxxTest::TestSuite {
-public:
- ListContainerTest()
- {
- Inkscape::GC::init();
- }
- virtual ~ListContainerTest() {}
-
- void testRangeConstructor()
- {
- int const values[]={1,2,3,4};
- int const * const values_end=values+4;
- ListContainer<int> container(values, values_end);
-
- ListContainer<int>::iterator container_iter=container.begin();
- int const * values_iter=values;
-
- while ( values_iter != values_end && container_iter != container.end() ) {
- TS_ASSERT_EQUALS(*values_iter , *container_iter);
- ++values_iter;
- ++container_iter;
- }
-
- TS_ASSERT_EQUALS(values_iter , values_end);
- TS_ASSERT_EQUALS(container_iter , container.end());
- }
-
- void testEqualityTests()
- {
- int const a[] = { 1, 2, 3, 4 };
- int const b[] = { 1, 2, 3, 4 };
- int const c[] = { 1, 2, 3 };
- int const d[] = { 1, 2, 3, 5 };
- ListContainer<int> c_a(ARRAY_RANGE(a));
- ListContainer<int> c_b(ARRAY_RANGE(b));
- ListContainer<int> c_c(ARRAY_RANGE(c));
- ListContainer<int> c_d(ARRAY_RANGE(d));
-
- TS_ASSERT(c_a == c_b);
- TS_ASSERT(!( c_a != c_b ));
- TS_ASSERT(!( c_a == c_c ));
- TS_ASSERT(c_a != c_c);
- TS_ASSERT(!( c_a == c_d ));
- TS_ASSERT(c_a != c_d);
- }
-
- void testLessThan()
- {
- int const a[] = { 1, 2, 3, 4 };
- int const b[] = { 1, 2, 2, 4 };
- int const c[] = { 1, 2, 4, 4 };
- int const d[] = { 1, 2, 3 };
- ListContainer<int> c_a(ARRAY_RANGE(a));
- ListContainer<int> c_b(ARRAY_RANGE(b));
- ListContainer<int> c_c(ARRAY_RANGE(c));
- ListContainer<int> c_d(ARRAY_RANGE(d));
- TS_ASSERT(c_a >= c_b);
- TS_ASSERT(!( c_a < c_b ));
- TS_ASSERT(!( c_a >= c_c ));
- TS_ASSERT(c_a < c_c);
- TS_ASSERT(!( c_a < c_d ));
- TS_ASSERT(c_a >= c_d);
- TS_ASSERT(c_d < c_a);
- }
-
- void testAssignmentOperator()
- {
- int const a[] = { 1, 2, 3, 4 };
- ListContainer<int> c_a(ARRAY_RANGE(a));
- ListContainer<int> c_c;
- TS_ASSERT(c_a != c_c);
- c_c = c_a;
- TS_ASSERT(c_a == c_c);
- c_c = c_a;
- TS_ASSERT(c_a == c_c);
- }
-
- void testFillConstructor()
- {
- ListContainer<int> filled((std::size_t)3, 2);
- TS_ASSERT(check_values(filled, 3, 2, 2, 2));
- }
-
- void testContainerSize()
- {
- ListContainer<int> empty;
- TS_ASSERT(empty.empty());
- TS_ASSERT_EQUALS(empty.size() , 0);
- int const a[] = { 1, 2, 3 };
- ListContainer<int> c_a(ARRAY_RANGE(a));
- TS_ASSERT(!c_a.empty());
- TS_ASSERT_EQUALS(c_a.size() , 3);
-
- TS_ASSERT_LESS_THAN(0 , empty.max_size());
- }
-
- void testAppending()
- {
- ListContainer<int> c;
- c.push_back(1);
- TS_ASSERT(check_values(c, 1, 1));
- c.push_back(2);
- TS_ASSERT(check_values(c, 2, 1, 2));
- c.push_back(3);
- TS_ASSERT(check_values(c, 3, 1, 2, 3));
- }
-
- void testBulkAppending()
- {
- int const a[] = { 1, 2, 3, 4 };
- int const b[] = { 5, 6, 7 };
- ListContainer<int> c_a(ARRAY_RANGE(a));
- ListContainer<int> c_b(ARRAY_RANGE(b));
- c_a.insert(c_a.end(), c_b.begin(), c_b.end());
- TS_ASSERT(check_values(c_a, 7, 1, 2, 3, 4, 5, 6, 7));
- }
-
- void testPrepending()
- {
- ListContainer<int> c;
- c.push_front(1);
- TS_ASSERT(check_values(c, 1, 1));
- c.push_front(2);
- TS_ASSERT(check_values(c, 2, 2, 1));
- c.push_front(3);
- TS_ASSERT(check_values(c, 3, 3, 2, 1));
- }
-
- void testSingleValueInsertion()
- {
- ListContainer<int> c;
-
- c.insert(c.begin(), 1);
- TS_ASSERT(check_values(c, 1, 1));
-
- c.insert(c.end(), 2);
- TS_ASSERT(check_values(c, 2, 1, 2));
-
- c.insert(c.begin(), 3);
- TS_ASSERT(check_values(c, 3, 3, 1, 2));
-
- ListContainer<int>::iterator pos=c.begin();
- ++pos;
- c.insert(pos, 4);
- TS_ASSERT(check_values(c, 4, 3, 4, 1, 2));
- }
-
- void testSingleValueErasure()
- {
- int const values[] = { 1, 2, 3, 4 };
- ListContainer<int> c(ARRAY_RANGE(values));
-
- c.erase(c.begin());
- TS_ASSERT(check_values(c, 3, 2, 3, 4));
-
- ListContainer<int>::iterator pos=c.begin();
- ++pos;
- c.erase(pos);
- TS_ASSERT(check_values(c, 2, 2, 4));
-
- pos=c.begin();
- ++pos;
- c.erase(pos);
- TS_ASSERT(check_values(c, 1, 2));
-
- c.erase(c.begin());
- TS_ASSERT(check_values(c, 0));
- }
-
- void testPopFront()
- {
- int const full_ary[] = { 1, 2, 3 };
- ListContainer<int> t(ARRAY_RANGE(full_ary));
- TS_ASSERT(check_values(t, 3, 1, 2, 3));
- TS_ASSERT_EQUALS(t.back() , 3);
- t.pop_front();
- TS_ASSERT(check_values(t, 2, 2, 3));
- TS_ASSERT_EQUALS(t.back() , 3);
- t.push_back(23);
- TS_ASSERT(check_values(t, 3, 2, 3, 23));
- TS_ASSERT_EQUALS(t.back() , 23);
- t.pop_front();
- TS_ASSERT(check_values(t, 2, 3, 23));
- TS_ASSERT_EQUALS(t.back() , 23);
- t.pop_front();
- TS_ASSERT(check_values(t, 1, 23));
- TS_ASSERT_EQUALS(t.back() , 23);
- t.pop_front();
- TS_ASSERT(check_values(t, 0));
- t.push_back(42);
- TS_ASSERT(check_values(t, 1, 42));
- TS_ASSERT_EQUALS(t.back() , 42);
- }
-
- void testEraseAfter()
- {
- int const full_ary[] = { 1, 2, 3, 4 };
- int const exp_ary[] = { 1, 3, 4 };
- ListContainer<int> full_list(ARRAY_RANGE(full_ary));
- ListContainer<int> exp_list(ARRAY_RANGE(exp_ary));
- TS_ASSERT(full_list != exp_list);
- full_list.erase_after(full_list.begin());
- TS_ASSERT(full_list == exp_list);
- }
-};
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#include <cxxtest/TestSuite.h>
+
+#include <stdarg.h>
+#include "util/list-container.h"
+
+using Inkscape::Util::ListContainer;
+
+#define ARRAY_RANGE(array) (array), (array)+sizeof((array))/sizeof((array)[0])
+
+static bool check_values(ListContainer<int> const &c, unsigned n_values, ...) {
+ bool ret = true;
+ va_list args;
+ va_start(args, n_values);
+ ListContainer<int>::const_iterator iter(c.begin());
+ while ( n_values && iter != c.end() ) {
+ int const value = va_arg(args, int);
+ if ( value != *iter ) {
+ ret = false;
+ }
+ if ( n_values == 1 && &c.back() != &*iter ) {
+ ret = false;
+ }
+ n_values--;
+ ++iter;
+ }
+ va_end(args);
+ return ret && n_values == 0 && iter == c.end();
+}
+
+class ListContainerTest : public CxxTest::TestSuite {
+public:
+ ListContainerTest()
+ {
+ Inkscape::GC::init();
+ }
+ virtual ~ListContainerTest() {}
+
+ void testRangeConstructor()
+ {
+ int const values[]={1,2,3,4};
+ int const * const values_end=values+4;
+ ListContainer<int> container(values, values_end);
+
+ ListContainer<int>::iterator container_iter=container.begin();
+ int const * values_iter=values;
+
+ while ( values_iter != values_end && container_iter != container.end() ) {
+ TS_ASSERT_EQUALS(*values_iter , *container_iter);
+ ++values_iter;
+ ++container_iter;
+ }
+
+ TS_ASSERT_EQUALS(values_iter , values_end);
+ TS_ASSERT_EQUALS(container_iter , container.end());
+ }
+
+ void testEqualityTests()
+ {
+ int const a[] = { 1, 2, 3, 4 };
+ int const b[] = { 1, 2, 3, 4 };
+ int const c[] = { 1, 2, 3 };
+ int const d[] = { 1, 2, 3, 5 };
+ ListContainer<int> c_a(ARRAY_RANGE(a));
+ ListContainer<int> c_b(ARRAY_RANGE(b));
+ ListContainer<int> c_c(ARRAY_RANGE(c));
+ ListContainer<int> c_d(ARRAY_RANGE(d));
+
+ TS_ASSERT(c_a == c_b);
+ TS_ASSERT(!( c_a != c_b ));
+ TS_ASSERT(!( c_a == c_c ));
+ TS_ASSERT(c_a != c_c);
+ TS_ASSERT(!( c_a == c_d ));
+ TS_ASSERT(c_a != c_d);
+ }
+
+ void testLessThan()
+ {
+ int const a[] = { 1, 2, 3, 4 };
+ int const b[] = { 1, 2, 2, 4 };
+ int const c[] = { 1, 2, 4, 4 };
+ int const d[] = { 1, 2, 3 };
+ ListContainer<int> c_a(ARRAY_RANGE(a));
+ ListContainer<int> c_b(ARRAY_RANGE(b));
+ ListContainer<int> c_c(ARRAY_RANGE(c));
+ ListContainer<int> c_d(ARRAY_RANGE(d));
+ TS_ASSERT(c_a >= c_b);
+ TS_ASSERT(!( c_a < c_b ));
+ TS_ASSERT(!( c_a >= c_c ));
+ TS_ASSERT(c_a < c_c);
+ TS_ASSERT(!( c_a < c_d ));
+ TS_ASSERT(c_a >= c_d);
+ TS_ASSERT(c_d < c_a);
+ }
+
+ void testAssignmentOperator()
+ {
+ int const a[] = { 1, 2, 3, 4 };
+ ListContainer<int> c_a(ARRAY_RANGE(a));
+ ListContainer<int> c_c;
+ TS_ASSERT(c_a != c_c);
+ c_c = c_a;
+ TS_ASSERT(c_a == c_c);
+ c_c = c_a;
+ TS_ASSERT(c_a == c_c);
+ }
+
+ void testFillConstructor()
+ {
+ ListContainer<int> filled((std::size_t)3, 2);
+ TS_ASSERT(check_values(filled, 3, 2, 2, 2));
+ }
+
+ void testContainerSize()
+ {
+ ListContainer<int> empty;
+ TS_ASSERT(empty.empty());
+ TS_ASSERT_EQUALS(empty.size() , 0);
+ int const a[] = { 1, 2, 3 };
+ ListContainer<int> c_a(ARRAY_RANGE(a));
+ TS_ASSERT(!c_a.empty());
+ TS_ASSERT_EQUALS(c_a.size() , 3);
+
+ TS_ASSERT_LESS_THAN(0 , empty.max_size());
+ }
+
+ void testAppending()
+ {
+ ListContainer<int> c;
+ c.push_back(1);
+ TS_ASSERT(check_values(c, 1, 1));
+ c.push_back(2);
+ TS_ASSERT(check_values(c, 2, 1, 2));
+ c.push_back(3);
+ TS_ASSERT(check_values(c, 3, 1, 2, 3));
+ }
+
+ void testBulkAppending()
+ {
+ int const a[] = { 1, 2, 3, 4 };
+ int const b[] = { 5, 6, 7 };
+ ListContainer<int> c_a(ARRAY_RANGE(a));
+ ListContainer<int> c_b(ARRAY_RANGE(b));
+ c_a.insert(c_a.end(), c_b.begin(), c_b.end());
+ TS_ASSERT(check_values(c_a, 7, 1, 2, 3, 4, 5, 6, 7));
+ }
+
+ void testPrepending()
+ {
+ ListContainer<int> c;
+ c.push_front(1);
+ TS_ASSERT(check_values(c, 1, 1));
+ c.push_front(2);
+ TS_ASSERT(check_values(c, 2, 2, 1));
+ c.push_front(3);
+ TS_ASSERT(check_values(c, 3, 3, 2, 1));
+ }
+
+ void testSingleValueInsertion()
+ {
+ ListContainer<int> c;
+
+ c.insert(c.begin(), 1);
+ TS_ASSERT(check_values(c, 1, 1));
+
+ c.insert(c.end(), 2);
+ TS_ASSERT(check_values(c, 2, 1, 2));
+
+ c.insert(c.begin(), 3);
+ TS_ASSERT(check_values(c, 3, 3, 1, 2));
+
+ ListContainer<int>::iterator pos=c.begin();
+ ++pos;
+ c.insert(pos, 4);
+ TS_ASSERT(check_values(c, 4, 3, 4, 1, 2));
+ }
+
+ void testSingleValueErasure()
+ {
+ int const values[] = { 1, 2, 3, 4 };
+ ListContainer<int> c(ARRAY_RANGE(values));
+
+ c.erase(c.begin());
+ TS_ASSERT(check_values(c, 3, 2, 3, 4));
+
+ ListContainer<int>::iterator pos=c.begin();
+ ++pos;
+ c.erase(pos);
+ TS_ASSERT(check_values(c, 2, 2, 4));
+
+ pos=c.begin();
+ ++pos;
+ c.erase(pos);
+ TS_ASSERT(check_values(c, 1, 2));
+
+ c.erase(c.begin());
+ TS_ASSERT(check_values(c, 0));
+ }
+
+ void testPopFront()
+ {
+ int const full_ary[] = { 1, 2, 3 };
+ ListContainer<int> t(ARRAY_RANGE(full_ary));
+ TS_ASSERT(check_values(t, 3, 1, 2, 3));
+ TS_ASSERT_EQUALS(t.back() , 3);
+ t.pop_front();
+ TS_ASSERT(check_values(t, 2, 2, 3));
+ TS_ASSERT_EQUALS(t.back() , 3);
+ t.push_back(23);
+ TS_ASSERT(check_values(t, 3, 2, 3, 23));
+ TS_ASSERT_EQUALS(t.back() , 23);
+ t.pop_front();
+ TS_ASSERT(check_values(t, 2, 3, 23));
+ TS_ASSERT_EQUALS(t.back() , 23);
+ t.pop_front();
+ TS_ASSERT(check_values(t, 1, 23));
+ TS_ASSERT_EQUALS(t.back() , 23);
+ t.pop_front();
+ TS_ASSERT(check_values(t, 0));
+ t.push_back(42);
+ TS_ASSERT(check_values(t, 1, 42));
+ TS_ASSERT_EQUALS(t.back() , 42);
+ }
+
+ void testEraseAfter()
+ {
+ int const full_ary[] = { 1, 2, 3, 4 };
+ int const exp_ary[] = { 1, 3, 4 };
+ ListContainer<int> full_list(ARRAY_RANGE(full_ary));
+ ListContainer<int> exp_list(ARRAY_RANGE(exp_ary));
+ TS_ASSERT(full_list != exp_list);
+ full_list.erase_after(full_list.begin());
+ TS_ASSERT(full_list == exp_list);
+ }
+};
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :