Explorar o código

rtl: fixed getdelimitedtext, quoting was wrong, clean up

mattias %!s(int64=6) %!d(string=hai) anos
pai
achega
630f39df2b
Modificáronse 30 ficheiros con 1754 adicións e 112 borrados
  1. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jsbase.ppu
  2. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jsminifier.ppu
  3. 0 6
      compiler/packages/fcl-js/units/x86_64-linux/jsminifier.rsj
  4. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jsparser.ppu
  5. 0 26
      compiler/packages/fcl-js/units/x86_64-linux/jsparser.rsj
  6. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jsscanner.ppu
  7. 0 11
      compiler/packages/fcl-js/units/x86_64-linux/jsscanner.rsj
  8. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jssrcmap.ppu
  9. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jstoken.ppu
  10. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jstree.ppu
  11. BIN=BIN
      compiler/packages/fcl-js/units/x86_64-linux/jswriter.ppu
  12. 0 4
      compiler/packages/fcl-js/units/x86_64-linux/jswriter.rsj
  13. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/fpjson.ppu
  14. 0 22
      compiler/packages/fcl-json/units/x86_64-linux/fpjson.rsj
  15. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/fpjsonrtti.ppu
  16. 0 15
      compiler/packages/fcl-json/units/x86_64-linux/fpjsonrtti.rsj
  17. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/fpjsontopas.ppu
  18. 0 5
      compiler/packages/fcl-json/units/x86_64-linux/fpjsontopas.rsj
  19. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/json2yaml.ppu
  20. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/jsonconf.ppu
  21. 0 5
      compiler/packages/fcl-json/units/x86_64-linux/jsonconf.rsj
  22. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/jsonini.ppu
  23. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/jsonparser.ppu
  24. 0 3
      compiler/packages/fcl-json/units/x86_64-linux/jsonparser.rsj
  25. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/jsonreader.ppu
  26. 0 9
      compiler/packages/fcl-json/units/x86_64-linux/jsonreader.rsj
  27. BIN=BIN
      compiler/packages/fcl-json/units/x86_64-linux/jsonscanner.ppu
  28. 0 5
      compiler/packages/fcl-json/units/x86_64-linux/jsonscanner.rsj
  29. 1 1
      packages/rtl/classes.pas
  30. 1753 0
      packages/rtl/websvg.pas

BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jsbase.ppu


BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jsminifier.ppu


+ 0 - 6
compiler/packages/fcl-js/units/x86_64-linux/jsminifier.rsj

@@ -1,6 +0,0 @@
-{"version":1,"strings":[
-{"hash":140625918,"name":"jsminifier.serrunterminatedcomment","sourcebytes":[85,110,116,101,114,109,105,110,97,116,101,100,32,99,111,109,109,101,110,116,46],"value":"Unterminated comment."},
-{"hash":239610158,"name":"jsminifier.serrunterminatedstringliteral","sourcebytes":[85,110,116,101,114,109,105,110,97,116,101,100,32,115,116,114,105,110,103,32,108,105,116,101,114,97,108,46],"value":"Unterminated string literal."},
-{"hash":242769518,"name":"jsminifier.serrunterminatedsetinregexp","sourcebytes":[85,110,116,101,114,109,105,110,97,116,101,100,32,115,101,116,32,105,110,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,108,105,116,101,114,97,108,46],"value":"Unterminated set in Regular Expression literal."},
-{"hash":220045198,"name":"jsminifier.serrunterminatedregexp","sourcebytes":[85,110,116,101,114,109,105,110,97,116,101,100,32,82,101,103,117,108,97,114,32,69,120,112,114,101,115,115,105,111,110,32,108,105,116,101,114,97,108,46],"value":"Unterminated Regular Expression literal."}
-]}

BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jsparser.ppu


+ 0 - 26
compiler/packages/fcl-js/units/x86_64-linux/jsparser.rsj

@@ -1,26 +0,0 @@
-{"version":1,"strings":[
-{"hash":180545021,"name":"jsparser.serrunmatchedcurlybrace","sourcebytes":[85,110,109,97,116,99,104,101,100,32,125],"value":"Unmatched }"},
-{"hash":180544989,"name":"jsparser.serrunmatchedsquarebrace","sourcebytes":[85,110,109,97,116,99,104,101,100,32,93],"value":"Unmatched ]"},
-{"hash":180544937,"name":"jsparser.serrunmatchedbrace","sourcebytes":[85,110,109,97,116,99,104,101,100,32,41],"value":"Unmatched )"},
-{"hash":148362119,"name":"jsparser.serrunexpectedtoken","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,39,37,115,39],"value":"Unexpected token: '%s'"},
-{"hash":187172855,"name":"jsparser.serrtokenmismatch","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,39,37,115,39,44,32,101,120,112,101,99,116,101,100,58,32,39,37,115,39],"value":"Unexpected token: '%s', expected: '%s'"},
-{"hash":233310215,"name":"jsparser.serrsemicolonorinexpected","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,39,37,115,39,44,32,101,120,112,101,99,116,101,100,32,59,32,111,114,32,39,105,110,39],"value":"Unexpected token: '%s', expected ; or 'in'"},
-{"hash":177973979,"name":"jsparser.serrsemicolonexpected","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,39,37,115,39,44,32,101,120,112,101,99,116,101,100,32,59],"value":"Unexpected token: '%s', expected ;"},
-{"hash":86377175,"name":"jsparser.serrduplicatelabelname","sourcebytes":[68,117,112,108,105,99,97,116,101,32,108,97,98,101,108,32,110,97,109,101,58,32,39,37,115,39],"value":"Duplicate label name: '%s'"},
-{"hash":105075422,"name":"jsparser.serrlabelnotcontinuable","sourcebytes":[76,97,98,101,108,32,39,37,115,39,32,105,115,32,110,111,116,32,115,117,105,116,97,98,108,101,32,102,111,114,32,99,111,110,116,105,110,117,101,46],"value":"Label '%s' is not suitable for continue."},
-{"hash":230725630,"name":"jsparser.serrlabelnotdefinedorreachable","sourcebytes":[76,97,98,101,108,32,39,37,115,39,32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,32,111,114,32,110,111,116,32,114,101,97,99,104,97,98,108,101,46],"value":"Label '%s' is not defined or not reachable."},
-{"hash":32991728,"name":"jsparser.serrcontinuenotinloop","sourcebytes":[67,111,110,116,105,110,117,101,32,115,116,97,116,101,109,101,110,116,32,110,111,116,32,105,110,32,108,111,111,112],"value":"Continue statement not in loop"},
-{"hash":197352304,"name":"jsparser.serrbreaknotinloop","sourcebytes":[66,114,101,97,107,32,115,116,97,116,101,109,101,110,116,32,110,111,116,32,105,110,32,108,111,111,112],"value":"Break statement not in loop"},
-{"hash":191166105,"name":"jsparser.serrreturnnotinfunction","sourcebytes":[114,101,116,117,114,110,32,115,116,97,116,101,109,101,110,116,32,110,111,116,32,105,110,32,97,32,102,117,110,99,116,105,111,110,32,98,111,100,121],"value":"return statement not in a function body"},
-{"hash":23193349,"name":"jsparser.serrcaseendexpected","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,69,120,112,101,99,116,101,100,32,125,44,32,99,97,115,101,32,111,114,32,100,101,102,97,117,108,116,32,99,108,97,117,115,101],"value":"Unexpected token: Expected }, case or default clause"},
-{"hash":13475300,"name":"jsparser.serrduplicateswitchdefault","sourcebytes":[68,117,112,108,105,99,97,116,101,32,100,101,102,97,117,108,116,32,99,108,97,117,115,101,32,102,111,114,32,115,119,105,116,99,104,32,115,116,97,116,101,109,101,110,116],"value":"Duplicate default clause for switch statement"},
-{"hash":184227940,"name":"jsparser.serrnewlineafterthrow","sourcebytes":[78,101,119,108,105,110,101,32,97,102,116,101,114,32,116,104,114,111,119,32,110,111,116,32,97,108,108,111,119,101,100],"value":"Newline after throw not allowed"},
-{"hash":119278855,"name":"jsparser.serrcatchfinallyexpected","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,69,120,112,101,99,116,101,100,32,39,99,97,116,99,104,39,32,111,114,32,39,102,105,110,97,108,108,121,39],"value":"Unexpected token: Expected 'catch' or 'finally'"},
-{"hash":191298851,"name":"jsparser.serrargumentsexpected","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,69,120,112,101,99,116,101,100,32,39,44,39,32,111,114,32,39,41,39,44,32,103,111,116,32,37,115],"value":"Unexpected token: Expected ',' or ')', got %s"},
-{"hash":191085859,"name":"jsparser.serrarrayend","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,69,120,112,101,99,116,101,100,32,39,44,39,32,111,114,32,39,93,39,44,32,103,111,116,32,37,115],"value":"Unexpected token: Expected ',' or ']', got %s"},
-{"hash":57215715,"name":"jsparser.serrobjectelement","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,69,120,112,101,99,116,101,100,32,115,116,114,105,110,103,44,32,105,100,101,110,116,105,102,105,101,114,32,111,114,32,110,117,109,98,101,114,32,97,102,116,101,114,32,39,44,39,32,103,111,116,58,32,37,115],"value":"Unexpected token: Expected string, identifier or number after ',' got: %s"},
-{"hash":131110131,"name":"jsparser.serrliteralexpected","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,58,32,69,120,112,101,99,116,101,100,58,32,110,117,108,108,44,32,116,114,117,101,44,32,102,97,108,115,101,44,32,110,117,109,98,101,114,44,32,115,116,114,105,110,103,44,32,111,114,32,114,101,103,101,120,44,32,103,111,116,58,32,37,115],"value":"Unexpected token: Expected: null, true, false, number, string, or regex, got: %s"},
-{"hash":59232275,"name":"jsparser.serrinvalidnumber","sourcebytes":[73,110,118,97,108,105,100,32,110,117,109,101,114,105,99,97,108,32,118,97,108,117,101,58,32,37,115],"value":"Invalid numerical value: %s"},
-{"hash":57871699,"name":"jsparser.serrinvalidregularexpression","sourcebytes":[73,110,118,97,108,105,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,58,32,37,115],"value":"Invalid regular expression: %s"},
-{"hash":114755989,"name":"jsparser.serrfunctionnotallowedhere","sourcebytes":[102,117,110,99,116,105,111,110,32,107,101,121,119,111,114,100,32,110,111,116,32,97,108,108,111,119,101,100,32,104,101,114,101],"value":"function keyword not allowed here"}
-]}

BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jsscanner.ppu


+ 0 - 11
compiler/packages/fcl-js/units/x86_64-linux/jsscanner.rsj

@@ -1,11 +0,0 @@
-{"version":1,"strings":[
-{"hash":182486439,"name":"jsscanner.serrinvalidcharacter","sourcebytes":[73,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,39,37,115,39],"value":"Invalid character '%s'"},
-{"hash":127311205,"name":"jsscanner.serropenstring","sourcebytes":[115,116,114,105,110,103,32,101,120,99,101,101,100,115,32,101,110,100,32,111,102,32,108,105,110,101],"value":"string exceeds end of line"},
-{"hash":253302231,"name":"jsscanner.serrincludefilenotfound","sourcebytes":[67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,105,110,99,108,117,100,101,32,102,105,108,101,32,39,37,115,39],"value":"Could not find include file '%s'"},
-{"hash":68822384,"name":"jsscanner.serrifxxxnestinglimitreached","sourcebytes":[78,101,115,116,105,110,103,32,111,102,32,36,73,70,120,120,120,32,116,111,111,32,100,101,101,112],"value":"Nesting of $IFxxx too deep"},
-{"hash":159638344,"name":"jsscanner.serrinvalidppelse","sourcebytes":[36,69,76,83,69,32,119,105,116,104,111,117,116,32,109,97,116,99,104,105,110,103,32,36,73,70,120,120,120],"value":"$ELSE without matching $IFxxx"},
-{"hash":70085288,"name":"jsscanner.serrinvalidppendif","sourcebytes":[36,69,78,68,73,70,32,119,105,116,104,111,117,116,32,109,97,116,99,104,105,110,103,32,36,73,70,120,120,120],"value":"$ENDIF without matching $IFxxx"},
-{"hash":116288578,"name":"jsscanner.sinvalidhexadecimalnumber","sourcebytes":[73,110,118,97,108,105,100,32,100,101,99,105,109,97,108,32,110,117,109,98,101,114],"value":"Invalid decimal number"},
-{"hash":62373892,"name":"jsscanner.serrinvalidnonequal","sourcebytes":[83,121,110,116,97,120,32,69,114,114,111,114,58,32,33,61,32,111,114,32,33,61,61,32,101,120,112,101,99,116,101,100],"value":"Syntax Error: != or !== expected"},
-{"hash":113051875,"name":"jsscanner.serrinvalidregularexpression","sourcebytes":[83,121,110,116,97,120,32,101,114,114,111,114,32,105,110,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,58,32,47,32,101,120,112,101,99,116,101,100,44,32,103,111,116,58,32,37,115],"value":"Syntax error in regular expression: \/ expected, got: %s"}
-]}

BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jssrcmap.ppu


BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jstoken.ppu


BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jstree.ppu


BIN=BIN
compiler/packages/fcl-js/units/x86_64-linux/jswriter.ppu


+ 0 - 4
compiler/packages/fcl-js/units/x86_64-linux/jswriter.rsj

@@ -1,4 +0,0 @@
-{"version":1,"strings":[
-{"hash":207371923,"name":"jswriter.serrunknownjsclass","sourcebytes":[85,110,107,110,111,119,110,32,106,97,118,97,115,99,114,105,112,116,32,101,108,101,109,101,110,116,32,99,108,97,115,115,32,58,32,37,115],"value":"Unknown javascript element class : %s"},
-{"hash":30371892,"name":"jswriter.serrnilnode","sourcebytes":[78,105,108,32,110,111,100,101,32,105,110,32,74,97,118,97,115,99,114,105,112,116],"value":"Nil node in Javascript"}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/fpjson.ppu


+ 0 - 22
compiler/packages/fcl-json/units/x86_64-linux/fpjson.rsj

@@ -1,22 +0,0 @@
-{"version":1,"strings":[
-{"hash":164499877,"name":"fpjson.serrcannotconvertfromnull","sourcebytes":[67,97,110,110,111,116,32,99,111,110,118,101,114,116,32,100,97,116,97,32,102,114,111,109,32,78,117,108,108,32,118,97,108,117,101],"value":"Cannot convert data from Null value"},
-{"hash":13335717,"name":"fpjson.serrcannotconverttonull","sourcebytes":[67,97,110,110,111,116,32,99,111,110,118,101,114,116,32,100,97,116,97,32,116,111,32,78,117,108,108,32,118,97,108,117,101],"value":"Cannot convert data to Null value"},
-{"hash":4610117,"name":"fpjson.serrcannotconvertfromarray","sourcebytes":[67,97,110,110,111,116,32,99,111,110,118,101,114,116,32,100,97,116,97,32,102,114,111,109,32,97,114,114,97,121,32,118,97,108,117,101],"value":"Cannot convert data from array value"},
-{"hash":3197141,"name":"fpjson.serrcannotconverttoarray","sourcebytes":[67,97,110,110,111,116,32,99,111,110,118,101,114,116,32,100,97,116,97,32,116,111,32,97,114,114,97,121,32,118,97,108,117,101],"value":"Cannot convert data to array value"},
-{"hash":34561957,"name":"fpjson.serrcannotconvertfromobject","sourcebytes":[67,97,110,110,111,116,32,99,111,110,118,101,114,116,32,100,97,116,97,32,102,114,111,109,32,111,98,106,101,99,116,32,118,97,108,117,101],"value":"Cannot convert data from object value"},
-{"hash":56776357,"name":"fpjson.serrcannotconverttoobject","sourcebytes":[67,97,110,110,111,116,32,99,111,110,118,101,114,116,32,100,97,116,97,32,116,111,32,111,98,106,101,99,116,32,118,97,108,117,101],"value":"Cannot convert data to object value"},
-{"hash":158801795,"name":"fpjson.serrinvalidfloat","sourcebytes":[73,110,118,97,108,105,100,32,102,108,111,97,116,32,118,97,108,117,101,32,58,32,37,115],"value":"Invalid float value : %s"},
-{"hash":16809925,"name":"fpjson.serrcannotsetnotisnull","sourcebytes":[73,115,78,117,108,108,32,99,97,110,110,111,116,32,98,101,32,115,101,116,32,116,111,32,70,97,108,115,101],"value":"IsNull cannot be set to False"},
-{"hash":263172452,"name":"fpjson.serrcannotaddarraytwice","sourcebytes":[65,100,100,105,110,103,32,97,110,32,97,114,114,97,121,32,111,98,106,101,99,116,32,116,111,32,97,110,32,97,114,114,97,121,32,116,119,105,99,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100],"value":"Adding an array object to an array twice is not allowed"},
-{"hash":119724340,"name":"fpjson.serrcannotaddobjecttwice","sourcebytes":[65,100,100,105,110,103,32,97,110,32,111,98,106,101,99,116,32,116,111,32,97,110,32,97,114,114,97,121,32,116,119,105,99,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100],"value":"Adding an object to an array twice is not allowed"},
-{"hash":44747796,"name":"fpjson.serrunknowntypeinconstructor","sourcebytes":[85,110,107,110,111,119,110,32,116,121,112,101,32,105,110,32,74,83,79,78,37,115,32,99,111,110,115,116,114,117,99,116,111,114,58,32,37,100],"value":"Unknown type in JSON%s constructor: %d"},
-{"hash":127458243,"name":"fpjson.serrnotjsondata","sourcebytes":[67,97,110,110,111,116,32,97,100,100,32,111,98,106,101,99,116,32,111,102,32,116,121,112,101,32,37,115,32,116,111,32,84,74,83,79,78,37,115],"value":"Cannot add object of type %s to TJSON%s"},
-{"hash":84018003,"name":"fpjson.serroddnumber","sourcebytes":[84,74,83,79,78,79,98,106,101,99,116,32,109,117,115,116,32,98,101,32,99,111,110,115,116,114,117,99,116,101,100,32,119,105,116,104,32,110,97,109,101,44,118,97,108,117,101,32,112,97,105,114,115],"value":"TJSONObject must be constructed with name,value pairs"},
-{"hash":203101655,"name":"fpjson.serrnamemustbestring","sourcebytes":[84,74,83,79,78,79,98,106,101,99,116,32,99,111,110,115,116,114,117,99,116,111,114,32,101,108,101,109,101,110,116,32,110,97,109,101,32,97,116,32,112,111,115,32,37,100,32,105,115,32,110,111,116,32,97,32,115,116,114,105,110,103],"value":"TJSONObject constructor element name at pos %d is not a string"},
-{"hash":119296690,"name":"fpjson.serrnonexistentelement","sourcebytes":[85,110,107,110,111,119,110,32,111,98,106,101,99,116,32,109,101,109,98,101,114,58,32,34,37,115,34],"value":"Unknown object member: \"%s\""},
-{"hash":144420514,"name":"fpjson.serrduplicatevalue","sourcebytes":[68,117,112,108,105,99,97,116,101,32,111,98,106,101,99,116,32,109,101,109,98,101,114,58,32,34,37,115,34],"value":"Duplicate object member: \"%s\""},
-{"hash":132398958,"name":"fpjson.serrpathelementnotfound","sourcebytes":[80,97,116,104,32,34,37,115,34,32,105,110,118,97,108,105,100,58,32,101,108,101,109,101,110,116,32,34,37,115,34,32,110,111,116,32,102,111,117,110,100,46],"value":"Path \"%s\" invalid: element \"%s\" not found."},
-{"hash":133699358,"name":"fpjson.serrwronginstanceclass","sourcebytes":[67,97,110,110,111,116,32,115,101,116,32,105,110,115,116,97,110,99,101,32,99,108,97,115,115,58,32,37,115,32,100,111,101,115,32,110,111,116,32,100,101,115,99,101,110,100,32,102,114,111,109,32,37,115,46],"value":"Cannot set instance class: %s does not descend from %s."},
-{"hash":126211171,"name":"fpjson.serrpointernotnil","sourcebytes":[67,97,110,110,111,116,32,97,100,100,32,110,111,110,45,110,105,108,32,112,111,105,110,116,101,114,32,116,111,32,74,83,79,78,37,115],"value":"Cannot add non-nil pointer to JSON%s"},
-{"hash":152621460,"name":"fpjson.serrnoparserhandler","sourcebytes":[78,111,32,74,83,79,78,32,112,97,114,115,101,114,32,104,97,110,100,108,101,114,32,105,110,115,116,97,108,108,101,100,46,32,82,101,99,111,109,112,105,108,101,32,121,111,117,114,32,112,114,111,106,101,99,116,32,119,105,116,104,32,116,104,101,32,106,115,111,110,112,97,114,115,101,114,32,117,110,105,116,32,105,110,99,108,117,100,101,100],"value":"No JSON parser handler installed. Recompile your project with the jsonparser unit included"}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/fpjsonrtti.ppu


+ 0 - 15
compiler/packages/fcl-json/units/x86_64-linux/fpjsonrtti.rsj

@@ -1,15 +0,0 @@
-{"version":1,"strings":[
-{"hash":154818594,"name":"fpjsonrtti.serrunknownpropertykind","sourcebytes":[85,110,107,110,111,119,110,32,112,114,111,112,101,114,116,121,32,107,105,110,100,32,102,111,114,32,112,114,111,112,101,114,116,121,32,58,32,34,37,115,34],"value":"Unknown property kind for property : \"%s\""},
-{"hash":222493842,"name":"fpjsonrtti.serrunsupportedpropertykind","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,112,114,111,112,101,114,116,121,32,107,105,110,100,32,102,111,114,32,112,114,111,112,101,114,116,121,58,32,34,37,115,34],"value":"Unsupported property kind for property: \"%s\""},
-{"hash":18085428,"name":"fpjsonrtti.serrunsupportedvarianttype","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,118,97,114,105,97,110,116,32,116,121,112,101,32,58,32,37,100],"value":"Unsupported variant type : %d"},
-{"hash":185800146,"name":"fpjsonrtti.serrunsupportedarraytype","sourcebytes":[74,83,79,78,32,97,114,114,97,121,32,99,97,110,110,111,116,32,98,101,32,115,116,114,101,97,109,101,100,32,116,111,32,111,98,106,101,99,116,32,111,102,32,99,108,97,115,115,32,34,37,115,34],"value":"JSON array cannot be streamed to object of class \"%s\""},
-{"hash":142123154,"name":"fpjsonrtti.serrunsupportedjsontype","sourcebytes":[67,97,110,110,111,116,32,100,101,115,116,114,101,97,109,32,111,98,106,101,99,116,32,102,114,111,109,32,74,83,79,78,32,100,97,116,97,32,111,102,32,116,121,112,101,32,34,37,115,34],"value":"Cannot destream object from JSON data of type \"%s\""},
-{"hash":212044930,"name":"fpjsonrtti.serrunsupportedcollectiontype","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,74,83,79,78,32,116,121,112,101,32,102,111,114,32,99,111,108,108,101,99,116,105,111,110,115,58,32,34,37,115,34],"value":"Unsupported JSON type for collections: \"%s\""},
-{"hash":170539922,"name":"fpjsonrtti.serrunsupportedcollectionitemtype","sourcebytes":[65,114,114,97,121,32,101,108,101,109,101,110,116,32,37,100,32,105,115,32,110,111,116,32,97,32,118,97,108,105,100,32,116,121,112,101,32,102,111,114,32,97,32,99,111,108,108,101,99,116,105,111,110,32,105,116,101,109,58,32,34,37,115,34],"value":"Array element %d is not a valid type for a collection item: \"%s\""},
-{"hash":199975138,"name":"fpjsonrtti.serrunsupportedstringsitemtype","sourcebytes":[65,114,114,97,121,32,101,108,101,109,101,110,116,32,37,100,32,105,115,32,110,111,116,32,97,32,118,97,108,105,100,32,116,121,112,101,32,102,111,114,32,97,32,115,116,114,105,110,103,108,105,115,116,32,105,116,101,109,58,32,34,37,115,34],"value":"Array element %d is not a valid type for a stringlist item: \"%s\""},
-{"hash":64939394,"name":"fpjsonrtti.serrunsupportedstringstype","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,74,83,79,78,32,116,121,112,101,32,102,111,114,32,115,116,114,105,110,103,108,105,115,116,115,58,32,34,37,115,34],"value":"Unsupported JSON type for stringlists: \"%s\""},
-{"hash":188513362,"name":"fpjsonrtti.serrunsupportedstringsobjecttype","sourcebytes":[79,98,106,101,99,116,32,69,108,101,109,101,110,116,32,37,115,32,105,115,32,110,111,116,32,97,32,118,97,108,105,100,32,116,121,112,101,32,102,111,114,32,97,32,115,116,114,105,110,103,108,105,115,116,32,111,98,106,101,99,116,58,32,34,37,115,34],"value":"Object Element %s is not a valid type for a stringlist object: \"%s\""},
-{"hash":40549010,"name":"fpjsonrtti.serrunsupportedenumdatatype","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,74,83,79,78,32,116,121,112,101,32,102,111,114,32,101,110,117,109,101,114,97,116,101,100,32,112,114,111,112,101,114,116,121,32,34,37,115,34,32,58,32,34,37,115,34],"value":"Unsupported JSON type for enumerated property \"%s\" : \"%s\""},
-{"hash":221319090,"name":"fpjsonrtti.serrunsupportedvariantjsontype","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,74,83,79,78,32,116,121,112,101,32,102,111,114,32,118,97,114,105,97,110,116,32,118,97,108,117,101,32,58,32,34,37,115,34],"value":"Unsupported JSON type for variant value : \"%s\""},
-{"hash":146748466,"name":"fpjsonrtti.serrunsupportedobjectdata","sourcebytes":[85,110,115,117,112,112,111,114,116,101,100,32,74,83,79,78,32,116,121,112,101,32,102,111,114,32,111,98,106,101,99,116,32,112,114,111,112,101,114,116,121,58,32,34,37,115,34],"value":"Unsupported JSON type for object property: \"%s\""}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/fpjsontopas.ppu


+ 0 - 5
compiler/packages/fcl-json/units/x86_64-linux/fpjsontopas.rsj

@@ -1,5 +0,0 @@
-{"version":1,"strings":[
-{"hash":219335488,"name":"fpjsontopas.serrcannotdeterminetype","sourcebytes":[67,97,110,110,111,116,32,100,101,116,101,114,109,105,110,101,32,116,121,112,101,32,102,111,114,32,37,115,32,58,32,78,111,116,32,105,110,32,116,121,112,101,32,109,97,112],"value":"Cannot determine type for %s : Not in type map"},
-{"hash":138870979,"name":"fpjsontopas.serrcannotdeterminepropertytype","sourcebytes":[67,97,110,110,111,116,32,100,101,116,101,114,109,105,110,101,32,112,114,111,112,101,114,116,121,32,116,121,112,101,32,102,111,114,32,37,115],"value":"Cannot determine property type for %s"},
-{"hash":90616450,"name":"fpjsontopas.serrcannotgeneratearraydeclaration","sourcebytes":[67,97,110,110,111,116,32,103,101,110,101,114,97,116,101,32,97,114,114,97,121,32,100,101,99,108,97,114,97,116,105,111,110,32,102,114,111,109,32,101,109,112,116,121,32,97,114,114,97,121,32,97,116,32,34,37,115,34],"value":"Cannot generate array declaration from empty array at \"%s\""}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/json2yaml.ppu


BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/jsonconf.ppu


+ 0 - 5
compiler/packages/fcl-json/units/x86_64-linux/jsonconf.rsj

@@ -1,5 +0,0 @@
-{"version":1,"strings":[
-{"hash":246587102,"name":"jsonconf.serrinvalidjsonfile","sourcebytes":[34,37,115,34,32,105,115,32,110,111,116,32,97,32,118,97,108,105,100,32,74,83,79,78,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,46],"value":"\"%s\" is not a valid JSON configuration file."},
-{"hash":242487694,"name":"jsonconf.serrcouldnotopenkey","sourcebytes":[67,111,117,108,100,32,110,111,116,32,111,112,101,110,32,107,101,121,32,34,37,115,34,46],"value":"Could not open key \"%s\"."},
-{"hash":12426702,"name":"jsonconf.serrcannotnotreplacekey","sourcebytes":[65,32,40,115,117,98,41,107,101,121,32,119,105,116,104,32,110,97,109,101,32,34,37,115,34,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,46],"value":"A (sub)key with name \"%s\" already exists."}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/jsonini.ppu


BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/jsonparser.ppu


+ 0 - 3
compiler/packages/fcl-json/units/x86_64-linux/jsonparser.rsj

@@ -1,3 +0,0 @@
-{"version":1,"strings":[
-{"hash":96664706,"name":"jsonparser.serrstructure","sourcebytes":[83,116,114,117,99,116,117,114,97,108,32,101,114,114,111,114],"value":"Structural error"}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/jsonreader.ppu


+ 0 - 9
compiler/packages/fcl-json/units/x86_64-linux/jsonreader.rsj

@@ -1,9 +0,0 @@
-{"version":1,"strings":[
-{"hash":77244558,"name":"jsonreader.serrunexpectedeof","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,69,79,70,32,101,110,99,111,117,110,116,101,114,101,100,46],"value":"Unexpected EOF encountered."},
-{"hash":171419534,"name":"jsonreader.serrunexpectedtoken","sourcebytes":[85,110,101,120,112,101,99,116,101,100,32,116,111,107,101,110,32,40,37,115,41,32,101,110,99,111,117,110,116,101,114,101,100,46],"value":"Unexpected token (%s) encountered."},
-{"hash":171025534,"name":"jsonreader.serrexpectedcolon","sourcebytes":[69,120,112,101,99,116,101,100,32,99,111,108,111,110,32,40,58,41,44,32,103,111,116,32,116,111,107,101,110,32,34,37,115,34,46],"value":"Expected colon (:), got token \"%s\"."},
-{"hash":174529602,"name":"jsonreader.serrexpectedelementname","sourcebytes":[69,120,112,101,99,116,101,100,32,101,108,101,109,101,110,116,32,110,97,109,101,44,32,103,111,116,32,116,111,107,101,110,32,34,37,115,34],"value":"Expected element name, got token \"%s\""},
-{"hash":182858430,"name":"jsonreader.sexpectedcommaorbraceclose","sourcebytes":[69,120,112,101,99,116,101,100,32,44,32,111,114,32,93,44,32,103,111,116,32,116,111,107,101,110,32,34,37,115,34,46],"value":"Expected , or ], got token \"%s\"."},
-{"hash":222938003,"name":"jsonreader.serrinvalidnumber","sourcebytes":[78,117,109,98,101,114,32,105,115,32,110,111,116,32,97,110,32,105,110,116,101,103,101,114,32,111,114,32,114,101,97,108,32,110,117,109,98,101,114,58,32,37,115],"value":"Number is not an integer or real number: %s"},
-{"hash":70947455,"name":"jsonreader.serrnoscanner","sourcebytes":[78,111,32,115,99,97,110,110,101,114,46,32,78,111,32,115,111,117,114,99,101,32,115,112,101,99,105,102,105,101,100,32,63],"value":"No scanner. No source specified ?"}
-]}

BIN=BIN
compiler/packages/fcl-json/units/x86_64-linux/jsonscanner.ppu


+ 0 - 5
compiler/packages/fcl-json/units/x86_64-linux/jsonscanner.rsj

@@ -1,5 +0,0 @@
-{"version":1,"strings":[
-{"hash":5885991,"name":"jsonscanner.serrinvalidcharacter","sourcebytes":[73,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,97,116,32,108,105,110,101,32,37,100,44,32,112,111,115,32,37,100,58,32,39,37,115,39],"value":"Invalid character at line %d, pos %d: '%s'"},
-{"hash":163695895,"name":"jsonscanner.sunterminatedcomment","sourcebytes":[85,110,116,101,114,109,105,110,97,116,101,100,32,99,111,109,109,101,110,116,32,97,116,32,108,105,110,101,32,37,100,44,32,112,111,115,32,37,100,58,32,39,37,115,39],"value":"Unterminated comment at line %d, pos %d: '%s'"},
-{"hash":127311205,"name":"jsonscanner.serropenstring","sourcebytes":[115,116,114,105,110,103,32,101,120,99,101,101,100,115,32,101,110,100,32,111,102,32,108,105,110,101],"value":"string exceeds end of line"}
-]}

+ 1 - 1
packages/rtl/classes.pas

@@ -1694,7 +1694,7 @@ begin
   For i:=0 to count-1 do
     begin
     S:=Strings[i];
-    doQuote:=FAlwaysQuote or (TJSString(s).search(RE)=-1);
+    doQuote:=FAlwaysQuote or (TJSString(s).search(RE)<>-1);
     if DoQuote then
       Result:=Result+QuoteString(S,QuoteChar)
     else

+ 1753 - 0
packages/rtl/websvg.pas

@@ -0,0 +1,1753 @@
+unit websvg;
+
+{$MODE ObjFPC}
+{$H+}
+{$MODESWITCH externalclass}
+
+interface
+
+uses SysUtils, web, JS;
+
+type
+  // Forward class
+  TJSSVGSVGElement = class;
+  TJSSVGNumberList = class;
+  TJSSVGAngle = class;
+  TJSSVGAnimatedAngle = class;
+  TJSSVGAnimatedBoolean = class;
+  TJSSVGAnimatedEnumeration = class;
+  TJSSVGAnimatedInteger = class;
+  TJSSVGAnimatedLength = class;
+  TJSSVGAnimatedLengthList = class;
+  TJSSVGAnimatedNumber = class;
+  TJSSVGAnimatedNumberList = class;
+  TJSSVGAnimatedPreserveAspectRatio = class;
+  TJSSVGAnimatedRect = class;
+  TJSSVGAnimatedString = class;
+  TJSSVGAnimatedTransformList = class;
+  TJSSVGAnimateElement = class;
+  TJSSVGAnimateMotionElement = class;
+  TJSSVGAnimateTransformElement = class;
+  TJSSVGAnimationElement = class;
+  TJSSVGCircleElement = class;
+  TJSSVGClipPathElement = class;
+  TJSSVGComponentTransferFunctionElement = class;
+  TJSSVGDefsElement = class;
+  TJSSVGDescElement = class;
+  TJSSVGDiscardElement = class;
+  TJSSVGDocument = class;
+  TJSSVGElement = class;
+  TJSSVGEllipseElement = class;
+  TJSSVGFEBlendElement = class;
+  TJSSVGFEColorMatrixElement = class;
+  TJSSVGFEComponentTransferElement = class;
+  TJSSVGFECompositeElement = class;
+  TJSSVGFEConvolveMatrixElement = class;
+  TJSSVGFEDiffuseLightingElement = class;
+  TJSSVGFEDisplacementMapElement = class;
+  TJSSVGFEDistantLightElement = class;
+  TJSSVGFEDropShadowElement = class;
+  TJSSVGFEFloodElement = class;
+  TJSSVGFEFuncAElement = class;
+  TJSSVGFEFuncBElement = class;
+  TJSSVGFEFuncGElement = class;
+  TJSSVGFEFuncRElement = class;
+  TJSSVGFEGaussianBlurElement = class;
+  TJSSVGFEImageElement = class;
+  TJSSVGFEMergeElement = class;
+  TJSSVGFEMergeNodeElement = class;
+  TJSSVGFEMorphologyElement = class;
+  TJSSVGFEOffsetElement = class;
+  TJSSVGFEPointLightElement = class;
+  TJSSVGFESpecularLightingElement = class;
+  TJSSVGFESpotLightElement = class;
+  TJSSVGFETileElement = class;
+  TJSSVGFETurbulenceElement = class;
+  TJSSVGFilterElement = class;
+  TJSSVGFilterPrimitiveStandardAttributes = class;
+  TJSSVGFitToViewBox = class;
+  TJSSVGForeignObjectElement = class;
+  TJSSVGGElement = class;
+  TJSSVGGeometryElement = class;
+  TJSSVGGradientElement = class;
+  TJSSVGGraphicsElement = class;
+  TJSSVGImageElement = class;
+  TJSSVGLength = class;
+  TJSSVGLinearGradientElement = class;
+  TJSSVGLineElement = class;
+  TJSSVGMarkerElement = class;
+  TJSSVGMaskElement = class;
+  TJSSVGMatrix = class;
+  TJSSVGMetadataElement = class;
+  TJSSVGMPathElement = class;
+  TJSSVGNumber = class;
+  TJSSVGPathElement = class;
+  TJSSVGPatternElement = class;
+  TJSSVGPoint = class;
+  TJSSVGPolygonElement = class;
+  TJSSVGPolylineElement = class;
+  TJSSVGPreserveAspectRatio = class;
+  TJSSVGRadialGradientElement = class;
+  TJSSVGRect = class;
+  TJSSVGRectElement = class;
+  TJSSVGScriptElement = class;
+  TJSSVGSetElement = class;
+  TJSSVGStopElement = class;
+  TJSSVGStyleElement = class;
+  TJSSVGSwitchElement = class;
+  TJSSVGSymbolElement = class;
+  TJSSVGTests = class;
+  TJSSVGTextContentElement = class;
+  TJSSVGTextElement = class;
+  TJSSVGTextPathElement = class;
+  TJSSVGTextPositioningElement = class;
+  TJSSVGTitleElement = class;
+  TJSSVGTransform = class;
+  TJSSVGTSpanElement = class;
+  TJSSVGUnitTypes = class;
+  TJSSVGURIReference = class;
+  TJSSVGUseElement = class;
+  TJSSVGViewElement = class;
+  TJSSVGZoomAndPan = class;
+
+type
+  DOMStringMap = class external name 'DOMStringMap'
+  private
+    function GetItem(name: String): String; external name '[]';
+    procedure SetItem(name: String; value: String); external name '[]';
+  public
+    //procedure (name: String);
+    property Items[name: String]: String read GetItem write SetItem; default;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGElement
+    --------------------------------------------------------------------}
+  TJSSVGElement = class external name 'SVGElement'(TJSElement)
+  private
+    FclassName: TJSSVGAnimatedString; external name 'className';
+    Fdataset: DOMStringMap; external name 'dataset';
+    Fstyle: TJSCSSStyleDeclaration; external name 'style';
+    FownerSVGElement: TJSSVGSVGElement; external name 'ownerSVGElement';
+    FviewportElement: TJSSVGElement; external name 'viewportElement';
+  public
+    tabIndex: Integer;
+    procedure focus;
+    procedure blur;
+    property className: TJSSVGAnimatedString read FclassName;
+    property dataset: DOMStringMap read Fdataset;
+    property style: TJSCSSStyleDeclaration read Fstyle;
+    property ownerSVGElement: TJSSVGSVGElement read FownerSVGElement;
+    property viewportElement: TJSSVGElement read FviewportElement;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGGraphicsElement
+    --------------------------------------------------------------------}
+  TJSSVGGraphicsElement = class external name 'SVGGraphicsElement' (TJSSVGElement)
+  private
+    Ftransform: TJSSVGAnimatedTransformList; external name 'transform';
+    FnearestViewportElement: TJSSVGElement; external name 'nearestViewportElement';
+    FfarthestViewportElement: TJSSVGElement; external name
+      'farthestViewportElement';
+  public
+    function getBBox: TJSSVGRect;
+    function getCTM: TJSSVGMatrix;
+    function getScreenCTM: TJSSVGMatrix;
+    property transform: TJSSVGAnimatedTransformList read Ftransform;
+    property nearestViewportElement: TJSSVGElement read FnearestViewportElement;
+    property farthestViewportElement: TJSSVGElement read FfarthestViewportElement;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGSVGElement
+    --------------------------------------------------------------------}
+  TJSSVGSVGElement = class external name 'SVGSVGElement' (TJSSVGGraphicsElement)
+  private
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+    FcurrentTranslate: TJSSVGPoint; external name 'currentTranslate';
+  public
+    currentScale: Double;
+    function getIntersectionList(rect: TJSSVGRect; referenceElement: TJSSVGElement):
+      TJSNodeList;
+    function getEnclosureList(rect: TJSSVGRect; referenceElement: TJSSVGElement):
+      TJSNodeList;
+    function checkIntersection(element: TJSSVGElement; rect: TJSSVGRect): boolean;
+    function checkEnclosure(element: TJSSVGElement; rect: TJSSVGRect): boolean;
+    procedure deselectAll;
+    function createSVGNumber: TJSSVGNumber;
+    function createSVGLength: TJSSVGLength;
+    function createSVGAngle: TJSSVGAngle;
+    function createSVGPoint: TJSSVGPoint;
+    function createSVGMatrix: TJSSVGMatrix;
+    function createSVGRect: TJSSVGRect;
+    function createSVGTransform: TJSSVGTransform;
+    function createSVGTransformFromMatrix(matrix: TJSSVGMatrix): TJSSVGTransform;
+    function getElementById(elementId: string): TJSElement;
+    function suspendRedraw(maxWaitMilliseconds: NativeInt): NativeInt;
+    procedure unsuspendRedraw(suspendHandleId: NativeInt);
+    procedure unsuspendRedrawAll;
+    procedure forceRedraw;
+    procedure pauseAnimations;
+    procedure unpauseAnimations;
+    function animationsPaused: boolean;
+    function getCurrentTime: Double;
+    procedure setCurrentTime(seconds: Double);
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+    property currentTranslate: TJSSVGPoint read FcurrentTranslate;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAElement
+    --------------------------------------------------------------------}
+  TJSSVGAElement = class external name 'SVGAElement' (TJSSVGGraphicsElement)
+  private
+    Ftarget: TJSSVGAnimatedString; external name 'target';
+  public
+    property target: TJSSVGAnimatedString read Ftarget;
+  end;
+
+  { --------------------------------------------------------------------
+  TJSSVGAngle
+  --------------------------------------------------------------------}
+  TJSSVGAngle = class external name 'SVGAngle'
+  private
+    FunitType: Cardinal; external name 'unitType';
+  public
+  const
+    SVG_ANGLETYPE_UNKNOWN = 0;
+    SVG_ANGLETYPE_UNSPECIFIED = 1;
+    SVG_ANGLETYPE_DEG = 2;
+    SVG_ANGLETYPE_RAD = 3;
+    SVG_ANGLETYPE_GRAD = 4;
+    Public
+      value: Double;
+    valueInSpecifiedUnits: Double;
+    valueAsString: string;
+    procedure newValueSpecifiedUnits(unitType: Cardinal; valueInSpecifiedUnits: Double);
+    procedure convertToSpecifiedUnits(unitType: Cardinal);
+    property unitType: Cardinal read FunitType;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedAngle
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedAngle = class external name 'SVGAnimatedAngle'
+  private
+    FbaseVal: TJSSVGAngle; external name 'baseVal';
+    FanimVal: TJSSVGAngle; external name 'animVal';
+  public
+    property baseVal: TJSSVGAngle read FbaseVal;
+    property animVal: TJSSVGAngle read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedBoolean
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedBoolean = class external name 'SVGAnimatedBoolean'
+  private
+    FanimVal: boolean; external name 'animVal';
+  public
+    baseVal: boolean;
+    property animVal: boolean read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedEnumeration
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedEnumeration = class external name 'SVGAnimatedEnumeration'
+  private
+    FanimVal: Cardinal; external name 'animVal';
+  public
+    baseVal: Cardinal;
+    property animVal: Cardinal read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedInteger
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedInteger = class external name 'SVGAnimatedInteger'
+  private
+    FanimVal: Integer; external name 'animVal';
+  public
+    baseVal: Integer;
+    property animVal: Integer read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedLength
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedLength = class external name 'SVGAnimatedLength'
+  private
+    FbaseVal: TJSSVGLength; external name 'baseVal';
+    FanimVal: TJSSVGLength; external name 'animVal';
+  public
+    property baseVal: TJSSVGLength read FbaseVal;
+    property animVal: TJSSVGLength read FanimVal;
+  end;
+
+{ --------------------------------------------------------------------
+  TJSSVGLengthList
+  --------------------------------------------------------------------}
+  TJSSVGLengthList = class external name 'SVGLengthList'
+  public
+    numberOfItems: Integer;
+    procedure clear;
+    function initialize(newItem: TJSSVGLength): TJSSVGLength;
+    function getItem(&index: Integer): TJSSVGLength;
+    function insertItemBefore(newItem: TJSSVGLength; &index: Integer): TJSSVGLength;
+    function replaceItem(newItem: TJSSVGLength; &index: Integer): TJSSVGLength;
+    function removeItem(&index: Integer): TJSSVGLength;
+    function appendItem(newItem: TJSSVGLength): TJSSVGLength;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedLengthList
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedLengthList = class external name 'SVGAnimatedLengthList'
+  private
+    FbaseVal: TJSSVGLengthList; external name 'baseVal';
+    FanimVal: TJSSVGLengthList; external name 'animVal';
+  public
+    property baseVal: TJSSVGLengthList read FbaseVal;
+    property animVal: TJSSVGLengthList read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedNumber
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedNumber = class external name 'SVGAnimatedNumber'
+  private
+    FanimVal: Double; external name 'animVal';
+  public
+    baseVal: Double;
+    property animVal: Double read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGNumberList
+  --------------------------------------------------------------------}
+  TJSSVGNumberList = class external name 'SVGNumberList'
+  public
+    numberOfItems: Integer;
+    procedure clear;
+    function initialize(newItem: TJSSVGNumber): TJSSVGNumber;
+    function getItem(&index: Integer): TJSSVGNumber;
+    function insertItemBefore(newItem: TJSSVGNumber; &index: Integer): TJSSVGNumber;
+    function replaceItem(newItem: TJSSVGNumber; &index: Integer): TJSSVGNumber;
+    function removeItem(&index: Integer): TJSSVGNumber;
+    function appendItem(newItem: TJSSVGNumber): TJSSVGNumber;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedNumberList
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedNumberList = class external name 'SVGAnimatedNumberList'
+  private
+    FbaseVal: TJSSVGNumberList; external name 'baseVal';
+    FanimVal: TJSSVGNumberList; external name 'animVal';
+  public
+    property baseVal: TJSSVGNumberList read FbaseVal;
+    property animVal: TJSSVGNumberList read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedPreserveAspectRatio
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedPreserveAspectRatio = class external name
+    'SVGAnimatedPreserveAspectRatio'
+    private
+    FbaseVal: TJSSVGPreserveAspectRatio; external name 'baseVal';
+    FanimVal: TJSSVGPreserveAspectRatio; external name 'animVal';
+  public
+    property baseVal: TJSSVGPreserveAspectRatio read FbaseVal;
+    property animVal: TJSSVGPreserveAspectRatio read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedRect
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedRect = class external name 'SVGAnimatedRect'
+  private
+    FbaseVal: TJSSVGRect; external name 'baseVal';
+    FanimVal: TJSSVGRect; external name 'animVal';
+  public
+    property baseVal: TJSSVGRect read FbaseVal;
+    property animVal: TJSSVGRect read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedString
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedString = class external name 'SVGAnimatedString'
+  private
+    FanimVal: string; external name 'animVal';
+  public
+    baseVal: string;
+    property animVal: string read FanimVal;
+  end;
+
+ { --------------------------------------------------------------------
+  TJSSVGTransformList
+  --------------------------------------------------------------------}
+  TJSSVGTransformList = class external name 'SVGTransformList'
+  public
+    numberOfItems: Integer;
+    procedure clear;
+    function initialize(newItem: TJSSVGTransform): TJSSVGTransform;
+    function getItem(&index: Integer): TJSSVGTransform;
+    function insertItemBefore(newItem: TJSSVGTransform; &index: Integer): TJSSVGTransform;
+    function replaceItem(newItem: TJSSVGTransform; &index: Integer): TJSSVGTransform;
+    function removeItem(&index: Integer): TJSSVGTransform;
+    function appendItem(newItem: TJSSVGTransform): TJSSVGTransform;
+    function createSVGTransformFromMatrix(matrix: TJSSVGMatrix): TJSSVGTransform;
+    function consolidate: TJSSVGTransform;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimatedTransformList
+    --------------------------------------------------------------------}
+  TJSSVGAnimatedTransformList = class external name 'SVGAnimatedTransformList'
+  private
+    FbaseVal: TJSSVGTransformList; external name 'baseVal';
+    FanimVal: TJSSVGTransformList; external name 'animVal';
+  public
+    property baseVal: TJSSVGTransformList read FbaseVal;
+    property animVal: TJSSVGTransformList read FanimVal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimationElement
+    --------------------------------------------------------------------}
+  TJSSVGAnimationElement = class external name 'SVGAnimationElement' (TJSSVGElement)
+  private
+    FtargetElement: TJSSVGElement; external name 'targetElement';
+  public
+    onbegin: TJSEventHandler;
+    onend: TJSEventHandler;
+    onrepeat: TJSEventHandler;
+    function getStartTime: Double;
+    function getCurrentTime: Double;
+    function getSimpleDuration: Double;
+    procedure beginElement;
+    procedure beginElementAt(offset: Double);
+    procedure endElement;
+    procedure endElementAt(offset: Double);
+    property targetElement: TJSSVGElement read FtargetElement;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimateElement
+    --------------------------------------------------------------------}
+  TJSSVGAnimateElement = class external name 'SVGAnimateElement' (TJSSVGAnimationElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimateMotionElement
+    --------------------------------------------------------------------}
+  TJSSVGAnimateMotionElement = class external name 'SVGAnimateMotionElement' (TJSSVGAnimationElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGAnimateTransformElement
+    --------------------------------------------------------------------}
+  TJSSVGAnimateTransformElement = class external name
+    'SVGAnimateTransformElement' (TJSSVGAnimationElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGGeometryElement
+    --------------------------------------------------------------------}
+  TJSSVGGeometryElement = class external name 'SVGGeometryElement' (TJSSVGGraphicsElement)
+    private
+    FpathLength: TJSSVGAnimatedNumber; external name 'pathLength';
+  public
+    function isPointInFill(point: TJSSVGPoint): boolean;
+    function isPointInStroke(point: TJSSVGPoint): boolean;
+    function getTotalLength: Double;
+    function getPointAtLength(distance: Double): TJSSVGPoint;
+    property pathLength: TJSSVGAnimatedNumber read FpathLength;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGCircleElement
+    --------------------------------------------------------------------}
+  TJSSVGCircleElement = class external name 'SVGCircleElement' (TJSSVGGeometryElement)
+    private
+    Fcx: TJSSVGAnimatedLength; external name 'cx';
+    Fcy: TJSSVGAnimatedLength; external name 'cy';
+    Fr: TJSSVGAnimatedLength; external name 'r';
+  public
+    property cx: TJSSVGAnimatedLength read Fcx;
+    property cy: TJSSVGAnimatedLength read Fcy;
+    property r: TJSSVGAnimatedLength read Fr;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGClipPathElement
+    --------------------------------------------------------------------}
+  TJSSVGClipPathElement = class external name
+    'SVGClipPathElement' (TJSSVGGraphicsElement)
+    private
+    FclipPathUnits: TJSSVGAnimatedEnumeration; external name 'clipPathUnits';
+  public
+    property clipPathUnits: TJSSVGAnimatedEnumeration read FclipPathUnits;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGComponentTransferFunctionElement
+    --------------------------------------------------------------------}
+  TJSSVGComponentTransferFunctionElement = class external name
+    'SVGComponentTransferFunctionElement' (TJSSVGElement)
+    private
+    Ftype_: TJSSVGAnimatedEnumeration; external name 'type';
+    FtableValues: TJSSVGAnimatedNumberList; external name 'tableValues';
+    Fslope: TJSSVGAnimatedNumber; external name 'slope';
+    Fintercept: TJSSVGAnimatedNumber; external name 'intercept';
+    Famplitude: TJSSVGAnimatedNumber; external name 'amplitude';
+    Fexponent: TJSSVGAnimatedNumber; external name 'exponent';
+    Foffset: TJSSVGAnimatedNumber; external name 'offset';
+  public
+  const
+    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;
+  Public
+    property type_: TJSSVGAnimatedEnumeration read Ftype_;
+    property tableValues: TJSSVGAnimatedNumberList read FtableValues;
+    property slope: TJSSVGAnimatedNumber read Fslope;
+    property intercept: TJSSVGAnimatedNumber read Fintercept;
+    property amplitude: TJSSVGAnimatedNumber read Famplitude;
+    property exponent: TJSSVGAnimatedNumber read Fexponent;
+    property offset: TJSSVGAnimatedNumber read Foffset;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGDefsElement
+    --------------------------------------------------------------------}
+  TJSSVGDefsElement = class external name 'SVGDefsElement' (TJSSVGGraphicsElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGDescElement
+    --------------------------------------------------------------------}
+  TJSSVGDescElement = class external name 'SVGDescElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGDocument
+    --------------------------------------------------------------------}
+  TJSSVGDocument = class external name 'SVGDocument' (TJSDocument)
+  public
+    Ftitle: String; external name 'tile';
+    Freferrer: String; external name 'referrer';
+    Fdomain: String; external name 'domain';
+    fURL: String; external name 'URL';
+    rootElement: TJSSVGSVGElement;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGDiscardElement
+    --------------------------------------------------------------------}
+  TJSSVGDiscardElement = class external name 'SVGDiscardElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSDocument
+    --------------------------------------------------------------------}
+  TJSDocument = class external name 'Document'
+  private
+    FrootElement: TJSSVGSVGElement; external name 'rootElement';
+  public
+    property rootElement: TJSSVGSVGElement read FrootElement;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGEllipseElement
+    --------------------------------------------------------------------}
+  TJSSVGEllipseElement = class external name
+    'SVGEllipseElement' (TJSSVGGeometryElement)
+    private
+    Fcx: TJSSVGAnimatedLength; external name 'cx';
+    Fcy: TJSSVGAnimatedLength; external name 'cy';
+    Frx: TJSSVGAnimatedLength; external name 'rx';
+    Fry: TJSSVGAnimatedLength; external name 'ry';
+  public
+    property cx: TJSSVGAnimatedLength read Fcx;
+    property cy: TJSSVGAnimatedLength read Fcy;
+    property rx: TJSSVGAnimatedLength read Frx;
+    property ry: TJSSVGAnimatedLength read Fry;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEBlendElement
+    --------------------------------------------------------------------}
+  TJSSVGFEBlendElement = class external name 'SVGFEBlendElement' (TJSSVGElement)
+  private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Fin2: TJSSVGAnimatedString; external name 'in2';
+    Fmode: TJSSVGAnimatedEnumeration; external name 'mode';
+  public
+  const
+    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;
+  Public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property in2: TJSSVGAnimatedString read Fin2;
+    property mode: TJSSVGAnimatedEnumeration read Fmode;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEColorMatrixElement
+    --------------------------------------------------------------------}
+  TJSSVGFEColorMatrixElement = class external name
+    'SVGFEColorMatrixElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Ftype_: TJSSVGAnimatedEnumeration; external name 'type';
+    Fvalues: TJSSVGAnimatedNumberList; external name 'values';
+  public
+  const
+    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;
+  Public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property type_: TJSSVGAnimatedEnumeration read Ftype_;
+    property values: TJSSVGAnimatedNumberList read Fvalues;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEComponentTransferElement
+    --------------------------------------------------------------------}
+  TJSSVGFEComponentTransferElement = class external name
+    'SVGFEComponentTransferElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+  public
+    property in1: TJSSVGAnimatedString read Fin1;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFECompositeElement
+    --------------------------------------------------------------------}
+  TJSSVGFECompositeElement = class external name
+    'SVGFECompositeElement' (TJSSVGElement)
+    private
+    Fin2: TJSSVGAnimatedString; external name 'in2';
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Foperator_: TJSSVGAnimatedEnumeration; external name 'operator';
+    Fk1: TJSSVGAnimatedNumber; external name 'k1';
+    Fk2: TJSSVGAnimatedNumber; external name 'k2';
+    Fk3: TJSSVGAnimatedNumber; external name 'k3';
+    Fk4: TJSSVGAnimatedNumber; external name 'k4';
+  public
+  const
+    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;
+  Public
+    property in2: TJSSVGAnimatedString read Fin2;
+    property in1: TJSSVGAnimatedString read Fin1;
+    property operator_: TJSSVGAnimatedEnumeration read Foperator_;
+    property k1: TJSSVGAnimatedNumber read Fk1;
+    property k2: TJSSVGAnimatedNumber read Fk2;
+    property k3: TJSSVGAnimatedNumber read Fk3;
+    property k4: TJSSVGAnimatedNumber read Fk4;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEConvolveMatrixElement
+    --------------------------------------------------------------------}
+  TJSSVGFEConvolveMatrixElement = class external name
+    'SVGFEConvolveMatrixElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    ForderX: TJSSVGAnimatedInteger; external name 'orderX';
+    ForderY: TJSSVGAnimatedInteger; external name 'orderY';
+    FkernelMatrix: TJSSVGAnimatedNumberList; external name 'kernelMatrix';
+    Fdivisor: TJSSVGAnimatedNumber; external name 'divisor';
+    Fbias: TJSSVGAnimatedNumber; external name 'bias';
+    FtargetX: TJSSVGAnimatedInteger; external name 'targetX';
+    FtargetY: TJSSVGAnimatedInteger; external name 'targetY';
+    FedgeMode: TJSSVGAnimatedEnumeration; external name 'edgeMode';
+    FkernelUnitLengthX: TJSSVGAnimatedNumber; external name 'kernelUnitLengthX';
+    FkernelUnitLengthY: TJSSVGAnimatedNumber; external name 'kernelUnitLengthY';
+    FpreserveAlpha: TJSSVGAnimatedBoolean; external name 'preserveAlpha';
+  public
+  const
+    SVG_EDGEMODE_UNKNOWN = 0;
+    SVG_EDGEMODE_DUPLICATE = 1;
+    SVG_EDGEMODE_WRAP = 2;
+    SVG_EDGEMODE_NONE = 3;
+  Public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property orderX: TJSSVGAnimatedInteger read ForderX;
+    property orderY: TJSSVGAnimatedInteger read ForderY;
+    property kernelMatrix: TJSSVGAnimatedNumberList read FkernelMatrix;
+    property divisor: TJSSVGAnimatedNumber read Fdivisor;
+    property bias: TJSSVGAnimatedNumber read Fbias;
+    property targetX: TJSSVGAnimatedInteger read FtargetX;
+    property targetY: TJSSVGAnimatedInteger read FtargetY;
+    property edgeMode: TJSSVGAnimatedEnumeration read FedgeMode;
+    property kernelUnitLengthX: TJSSVGAnimatedNumber read FkernelUnitLengthX;
+    property kernelUnitLengthY: TJSSVGAnimatedNumber read FkernelUnitLengthY;
+    property preserveAlpha: TJSSVGAnimatedBoolean read FpreserveAlpha;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEDiffuseLightingElement
+    --------------------------------------------------------------------}
+  TJSSVGFEDiffuseLightingElement = class external name
+    'SVGFEDiffuseLightingElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    FsurfaceScale: TJSSVGAnimatedNumber; external name 'surfaceScale';
+    FdiffuseConstant: TJSSVGAnimatedNumber; external name 'diffuseConstant';
+    FkernelUnitLengthX: TJSSVGAnimatedNumber; external name 'kernelUnitLengthX';
+    FkernelUnitLengthY: TJSSVGAnimatedNumber; external name 'kernelUnitLengthY';
+  public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property surfaceScale: TJSSVGAnimatedNumber read FsurfaceScale;
+    property diffuseConstant: TJSSVGAnimatedNumber read FdiffuseConstant;
+    property kernelUnitLengthX: TJSSVGAnimatedNumber read FkernelUnitLengthX;
+    property kernelUnitLengthY: TJSSVGAnimatedNumber read FkernelUnitLengthY;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEDisplacementMapElement
+    --------------------------------------------------------------------}
+  TJSSVGFEDisplacementMapElement = class external name
+    'SVGFEDisplacementMapElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Fin2: TJSSVGAnimatedString; external name 'in2';
+    Fscale: TJSSVGAnimatedNumber; external name 'scale';
+    FxChannelSelector: TJSSVGAnimatedEnumeration; external name 'xChannelSelector';
+    FyChannelSelector: TJSSVGAnimatedEnumeration; external name 'yChannelSelector';
+  public
+  const
+    SVG_CHANNEL_UNKNOWN = 0;
+    SVG_CHANNEL_R = 1;
+    SVG_CHANNEL_G = 2;
+    SVG_CHANNEL_B = 3;
+    SVG_CHANNEL_A = 4;
+  Public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property in2: TJSSVGAnimatedString read Fin2;
+    property scale: TJSSVGAnimatedNumber read Fscale;
+    property xChannelSelector: TJSSVGAnimatedEnumeration read FxChannelSelector;
+    property yChannelSelector: TJSSVGAnimatedEnumeration read FyChannelSelector;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEDistantLightElement
+    --------------------------------------------------------------------}
+  TJSSVGFEDistantLightElement = class external name
+    'SVGFEDistantLightElement' (TJSSVGElement)
+    private
+    Fazimuth: TJSSVGAnimatedNumber; external name 'azimuth';
+    Felevation: TJSSVGAnimatedNumber; external name 'elevation';
+  public
+    property azimuth: TJSSVGAnimatedNumber read Fazimuth;
+    property elevation: TJSSVGAnimatedNumber read Felevation;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEDropShadowElement
+    --------------------------------------------------------------------}
+  TJSSVGFEDropShadowElement = class external name
+    'SVGFEDropShadowElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Fdx: TJSSVGAnimatedNumber; external name 'dx';
+    Fdy: TJSSVGAnimatedNumber; external name 'dy';
+    FstdDeviationX: TJSSVGAnimatedNumber; external name 'stdDeviationX';
+    FstdDeviationY: TJSSVGAnimatedNumber; external name 'stdDeviationY';
+  public
+    procedure setStdDeviation(stdDeviationX: Double; stdDeviationY: Double);
+    property in1: TJSSVGAnimatedString read Fin1;
+    property dx: TJSSVGAnimatedNumber read Fdx;
+    property dy: TJSSVGAnimatedNumber read Fdy;
+    property stdDeviationX: TJSSVGAnimatedNumber read FstdDeviationX;
+    property stdDeviationY: TJSSVGAnimatedNumber read FstdDeviationY;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEFloodElement
+    --------------------------------------------------------------------}
+  TJSSVGFEFloodElement = class external name 'SVGFEFloodElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEFuncAElement
+    --------------------------------------------------------------------}
+  TJSSVGFEFuncAElement = class external name
+    'SVGFEFuncAElement' (TJSSVGComponentTransferFunctionElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEFuncBElement
+    --------------------------------------------------------------------}
+  TJSSVGFEFuncBElement = class external name
+    'SVGFEFuncBElement' (TJSSVGComponentTransferFunctionElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEFuncGElement
+    --------------------------------------------------------------------}
+  TJSSVGFEFuncGElement = class external name
+    'SVGFEFuncGElement' (TJSSVGComponentTransferFunctionElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEFuncRElement
+    --------------------------------------------------------------------}
+  TJSSVGFEFuncRElement = class external name
+    'SVGFEFuncRElement' (TJSSVGComponentTransferFunctionElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEGaussianBlurElement
+    --------------------------------------------------------------------}
+  TJSSVGFEGaussianBlurElement = class external name
+    'SVGFEGaussianBlurElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    FstdDeviationX: TJSSVGAnimatedNumber; external name 'stdDeviationX';
+    FstdDeviationY: TJSSVGAnimatedNumber; external name 'stdDeviationY';
+  public
+    procedure setStdDeviation(stdDeviationX: Double; stdDeviationY: Double);
+    property in1: TJSSVGAnimatedString read Fin1;
+    property stdDeviationX: TJSSVGAnimatedNumber read FstdDeviationX;
+    property stdDeviationY: TJSSVGAnimatedNumber read FstdDeviationY;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEImageElement
+    --------------------------------------------------------------------}
+  TJSSVGFEImageElement = class external name 'SVGFEImageElement' (TJSSVGElement)
+  private
+    FpreserveAspectRatio: TJSSVGAnimatedPreserveAspectRatio; external name
+      'preserveAspectRatio';
+  public
+    property preserveAspectRatio: TJSSVGAnimatedPreserveAspectRatio read
+      FpreserveAspectRatio;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEMergeElement
+    --------------------------------------------------------------------}
+  TJSSVGFEMergeElement = class external name 'SVGFEMergeElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEMergeNodeElement
+    --------------------------------------------------------------------}
+  TJSSVGFEMergeNodeElement = class external name
+    'SVGFEMergeNodeElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+  public
+    property in1: TJSSVGAnimatedString read Fin1;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEMorphologyElement
+    --------------------------------------------------------------------}
+  TJSSVGFEMorphologyElement = class external name
+    'SVGFEMorphologyElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Foperator_: TJSSVGAnimatedEnumeration; external name 'operator';
+    FradiusX: TJSSVGAnimatedNumber; external name 'radiusX';
+    FradiusY: TJSSVGAnimatedNumber; external name 'radiusY';
+  public
+  const
+    SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
+    SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
+    SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
+  Public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property operator_: TJSSVGAnimatedEnumeration read Foperator_;
+    property radiusX: TJSSVGAnimatedNumber read FradiusX;
+    property radiusY: TJSSVGAnimatedNumber read FradiusY;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEOffsetElement
+    --------------------------------------------------------------------}
+  TJSSVGFEOffsetElement = class external name 'SVGFEOffsetElement' (TJSSVGElement)
+  private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    Fdx: TJSSVGAnimatedNumber; external name 'dx';
+    Fdy: TJSSVGAnimatedNumber; external name 'dy';
+  public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property dx: TJSSVGAnimatedNumber read Fdx;
+    property dy: TJSSVGAnimatedNumber read Fdy;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFEPointLightElement
+    --------------------------------------------------------------------}
+  TJSSVGFEPointLightElement = class external name
+    'SVGFEPointLightElement' (TJSSVGElement)
+    private
+    Fx: TJSSVGAnimatedNumber; external name 'x';
+    Fy: TJSSVGAnimatedNumber; external name 'y';
+    Fz: TJSSVGAnimatedNumber; external name 'z';
+  public
+    property x: TJSSVGAnimatedNumber read Fx;
+    property y: TJSSVGAnimatedNumber read Fy;
+    property z: TJSSVGAnimatedNumber read Fz;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFESpecularLightingElement
+    --------------------------------------------------------------------}
+  TJSSVGFESpecularLightingElement = class external name
+    'SVGFESpecularLightingElement' (TJSSVGElement)
+    private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+    FsurfaceScale: TJSSVGAnimatedNumber; external name 'surfaceScale';
+    FspecularConstant: TJSSVGAnimatedNumber; external name 'specularConstant';
+    FspecularExponent: TJSSVGAnimatedNumber; external name 'specularExponent';
+    FkernelUnitLengthX: TJSSVGAnimatedNumber; external name 'kernelUnitLengthX';
+    FkernelUnitLengthY: TJSSVGAnimatedNumber; external name 'kernelUnitLengthY';
+  public
+    property in1: TJSSVGAnimatedString read Fin1;
+    property surfaceScale: TJSSVGAnimatedNumber read FsurfaceScale;
+    property specularConstant: TJSSVGAnimatedNumber read FspecularConstant;
+    property specularExponent: TJSSVGAnimatedNumber read FspecularExponent;
+    property kernelUnitLengthX: TJSSVGAnimatedNumber read FkernelUnitLengthX;
+    property kernelUnitLengthY: TJSSVGAnimatedNumber read FkernelUnitLengthY;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFESpotLightElement
+    --------------------------------------------------------------------}
+  TJSSVGFESpotLightElement = class external name
+    'SVGFESpotLightElement' (TJSSVGElement)
+    private
+    Fx: TJSSVGAnimatedNumber; external name 'x';
+    Fy: TJSSVGAnimatedNumber; external name 'y';
+    Fz: TJSSVGAnimatedNumber; external name 'z';
+    FpointsAtX: TJSSVGAnimatedNumber; external name 'pointsAtX';
+    FpointsAtY: TJSSVGAnimatedNumber; external name 'pointsAtY';
+    FpointsAtZ: TJSSVGAnimatedNumber; external name 'pointsAtZ';
+    FspecularExponent: TJSSVGAnimatedNumber; external name 'specularExponent';
+    FlimitingConeAngle: TJSSVGAnimatedNumber; external name 'limitingConeAngle';
+  public
+    property x: TJSSVGAnimatedNumber read Fx;
+    property y: TJSSVGAnimatedNumber read Fy;
+    property z: TJSSVGAnimatedNumber read Fz;
+    property pointsAtX: TJSSVGAnimatedNumber read FpointsAtX;
+    property pointsAtY: TJSSVGAnimatedNumber read FpointsAtY;
+    property pointsAtZ: TJSSVGAnimatedNumber read FpointsAtZ;
+    property specularExponent: TJSSVGAnimatedNumber read FspecularExponent;
+    property limitingConeAngle: TJSSVGAnimatedNumber read FlimitingConeAngle;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFETileElement
+    --------------------------------------------------------------------}
+  TJSSVGFETileElement = class external name 'SVGFETileElement' (TJSSVGElement)
+  private
+    Fin1: TJSSVGAnimatedString; external name 'in1';
+  public
+    property in1: TJSSVGAnimatedString read Fin1;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFETurbulenceElement
+    --------------------------------------------------------------------}
+  TJSSVGFETurbulenceElement = class external name
+    'SVGFETurbulenceElement' (TJSSVGElement)
+    private
+    FbaseFrequencyX: TJSSVGAnimatedNumber; external name 'baseFrequencyX';
+    FbaseFrequencyY: TJSSVGAnimatedNumber; external name 'baseFrequencyY';
+    FnumOctaves: TJSSVGAnimatedInteger; external name 'numOctaves';
+    Fseed: TJSSVGAnimatedNumber; external name 'seed';
+    FstitchTiles: TJSSVGAnimatedEnumeration; external name 'stitchTiles';
+    Ftype_: TJSSVGAnimatedEnumeration; external name 'type';
+  public
+  const
+    SVG_TURBULENCE_TYPE_UNKNOWN = 0;
+    SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
+    SVG_TURBULENCE_TYPE_TURBULENCE = 2;
+    SVG_STITCHTYPE_UNKNOWN = 0;
+    SVG_STITCHTYPE_STITCH = 1;
+    SVG_STITCHTYPE_NOSTITCH = 2;
+  Public
+    property baseFrequencyX: TJSSVGAnimatedNumber read FbaseFrequencyX;
+    property baseFrequencyY: TJSSVGAnimatedNumber read FbaseFrequencyY;
+    property numOctaves: TJSSVGAnimatedInteger read FnumOctaves;
+    property seed: TJSSVGAnimatedNumber read Fseed;
+    property stitchTiles: TJSSVGAnimatedEnumeration read FstitchTiles;
+    property type_: TJSSVGAnimatedEnumeration read Ftype_;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFilterElement
+    --------------------------------------------------------------------}
+  TJSSVGFilterElement = class external name 'SVGFilterElement' (TJSSVGElement)
+  private
+    FfilterUnits: TJSSVGAnimatedEnumeration; external name 'filterUnits';
+    FprimitiveUnits: TJSSVGAnimatedEnumeration; external name 'primitiveUnits';
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+  public
+    property filterUnits: TJSSVGAnimatedEnumeration read FfilterUnits;
+    property primitiveUnits: TJSSVGAnimatedEnumeration read FprimitiveUnits;
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFilterPrimitiveStandardAttributes
+    --------------------------------------------------------------------}
+  TJSSVGFilterPrimitiveStandardAttributes = class external name
+    'SVGFilterPrimitiveStandardAttributes'
+    private
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+    Fresult: TJSSVGAnimatedString; external name 'result';
+  public
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+    property result: TJSSVGAnimatedString read Fresult;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGFitToViewBox
+    --------------------------------------------------------------------}
+  TJSSVGFitToViewBox = class external name 'SVGFitToViewBox'
+  private
+    FviewBox: TJSSVGAnimatedRect; external name 'viewBox';
+    FpreserveAspectRatio: TJSSVGAnimatedPreserveAspectRatio; external name
+      'preserveAspectRatio';
+  public
+    property viewBox: TJSSVGAnimatedRect read FviewBox;
+    property preserveAspectRatio: TJSSVGAnimatedPreserveAspectRatio read
+      FpreserveAspectRatio;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGForeignObjectElement
+    --------------------------------------------------------------------}
+  TJSSVGForeignObjectElement = class external name
+    'SVGForeignObjectElement' (TJSSVGGraphicsElement)
+    private
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+  public
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGGElement
+    --------------------------------------------------------------------}
+  TJSSVGGElement = class external name 'SVGGElement' (TJSSVGGraphicsElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGGradientElement
+    --------------------------------------------------------------------}
+  TJSSVGGradientElement = class external name 'SVGGradientElement' (TJSSVGElement)
+  private
+    FgradientUnits: TJSSVGAnimatedEnumeration; external name 'gradientUnits';
+    FgradientTransform: TJSSVGAnimatedTransformList; external name
+      'gradientTransform';
+    FspreadMethod: TJSSVGAnimatedEnumeration; external name 'spreadMethod';
+  public
+  const
+    SVG_SPREADMETHOD_UNKNOWN = 0;
+    SVG_SPREADMETHOD_PAD = 1;
+    SVG_SPREADMETHOD_REFLECT = 2;
+    SVG_SPREADMETHOD_REPEAT = 3;
+  Public
+    property gradientUnits: TJSSVGAnimatedEnumeration read FgradientUnits;
+    property gradientTransform: TJSSVGAnimatedTransformList read FgradientTransform;
+    property spreadMethod: TJSSVGAnimatedEnumeration read FspreadMethod;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGImageElement
+    --------------------------------------------------------------------}
+  TJSSVGImageElement = class external name 'SVGImageElement' (TJSSVGGraphicsElement)
+  private
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+    FpreserveAspectRatio: TJSSVGAnimatedPreserveAspectRatio; external name
+      'preserveAspectRatio';
+  public
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+    property preserveAspectRatio: TJSSVGAnimatedPreserveAspectRatio read
+      FpreserveAspectRatio;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGLength
+    --------------------------------------------------------------------}
+  TJSSVGLength = class external name 'SVGLength'
+  private
+    FunitType: Cardinal; external name 'unitType';
+  public
+  const
+    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;
+  Public
+    value: Double;
+    valueInSpecifiedUnits: Double;
+    valueAsString: string;
+    procedure newValueSpecifiedUnits(unitType: Cardinal; valueInSpecifiedUnits: Double);
+    procedure convertToSpecifiedUnits(unitType: Cardinal);
+    property unitType: Cardinal read FunitType;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGLinearGradientElement
+    --------------------------------------------------------------------}
+  TJSSVGLinearGradientElement = class external name
+    'SVGLinearGradientElement' (TJSSVGGradientElement)
+    private
+    Fx1: TJSSVGAnimatedLength; external name 'x1';
+    Fy1: TJSSVGAnimatedLength; external name 'y1';
+    Fx2: TJSSVGAnimatedLength; external name 'x2';
+    Fy2: TJSSVGAnimatedLength; external name 'y2';
+  public
+    property x1: TJSSVGAnimatedLength read Fx1;
+    property y1: TJSSVGAnimatedLength read Fy1;
+    property x2: TJSSVGAnimatedLength read Fx2;
+    property y2: TJSSVGAnimatedLength read Fy2;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGLineElement
+    --------------------------------------------------------------------}
+  TJSSVGLineElement = class external name 'SVGLineElement' (TJSSVGGeometryElement)
+  private
+    Fx1: TJSSVGAnimatedLength; external name 'x1';
+    Fy1: TJSSVGAnimatedLength; external name 'y1';
+    Fx2: TJSSVGAnimatedLength; external name 'x2';
+    Fy2: TJSSVGAnimatedLength; external name 'y2';
+  public
+    property x1: TJSSVGAnimatedLength read Fx1;
+    property y1: TJSSVGAnimatedLength read Fy1;
+    property x2: TJSSVGAnimatedLength read Fx2;
+    property y2: TJSSVGAnimatedLength read Fy2;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGMarkerElement
+    --------------------------------------------------------------------}
+  TJSSVGMarkerElement = class external name 'SVGMarkerElement' (TJSSVGElement)
+  private
+    FrefX: TJSSVGAnimatedLength; external name 'refX';
+    FrefY: TJSSVGAnimatedLength; external name 'refY';
+    FmarkerUnits: TJSSVGAnimatedEnumeration; external name 'markerUnits';
+    FmarkerWidth: TJSSVGAnimatedLength; external name 'markerWidth';
+    FmarkerHeight: TJSSVGAnimatedLength; external name 'markerHeight';
+    ForientType: TJSSVGAnimatedEnumeration; external name 'orientType';
+    ForientAngle: TJSSVGAnimatedAngle; external name 'orientAngle';
+  public
+  const
+    SVG_MARKERUNITS_UNKNOWN = 0;
+    SVG_MARKERUNITS_USERSPACEONUSE = 1;
+    SVG_MARKERUNITS_STROKEWIDTH = 2;
+    SVG_MARKER_ORIENT_UNKNOWN = 0;
+    SVG_MARKER_ORIENT_AUTO = 1;
+    SVG_MARKER_ORIENT_ANGLE = 2;
+  Public
+    procedure setOrientToAuto;
+    procedure setOrientToAngle(angle: TJSSVGAngle);
+    property refX: TJSSVGAnimatedLength read FrefX;
+    property refY: TJSSVGAnimatedLength read FrefY;
+    property markerUnits: TJSSVGAnimatedEnumeration read FmarkerUnits;
+    property markerWidth: TJSSVGAnimatedLength read FmarkerWidth;
+    property markerHeight: TJSSVGAnimatedLength read FmarkerHeight;
+    property orientType: TJSSVGAnimatedEnumeration read ForientType;
+    property orientAngle: TJSSVGAnimatedAngle read ForientAngle;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGMaskElement
+    --------------------------------------------------------------------}
+  TJSSVGMaskElement = class external name 'SVGMaskElement' (TJSSVGElement)
+  private
+    FmaskUnits: TJSSVGAnimatedEnumeration; external name 'maskUnits';
+    FmaskContentUnits: TJSSVGAnimatedEnumeration; external name 'maskContentUnits';
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+  public
+    property maskUnits: TJSSVGAnimatedEnumeration read FmaskUnits;
+    property maskContentUnits: TJSSVGAnimatedEnumeration read FmaskContentUnits;
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGMatrix
+    --------------------------------------------------------------------}
+  TJSSVGMatrix = class external name 'SVGMatrix'
+  private
+  public
+    a: double;
+    b: double;
+    c: double;
+    d: double;
+    e: double;
+    f: double;
+    function multiply(secondMatrix: TJSSVGMatrix): TJSSVGMatrix;
+    function inverse: TJSSVGMatrix;
+    function translate(x: Double; y: Double): TJSSVGMatrix;
+    function scale(scaleFactor: Double): TJSSVGMatrix;
+    function scaleNonUniform(scaleFactorX: Double; scaleFactorY: Double):
+      TJSSVGMatrix;
+    function rotate(angle: Double): TJSSVGMatrix;
+    function rotateFromVector(x: Double; y: Double): TJSSVGMatrix;
+    function flipX: TJSSVGMatrix;
+    function flipY: TJSSVGMatrix;
+    function skewX(angle: Double): TJSSVGMatrix;
+    function skewY(angle: Double): TJSSVGMatrix;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGMetadataElement
+    --------------------------------------------------------------------}
+  TJSSVGMetadataElement = class external name 'SVGMetadataElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGMPathElement
+    --------------------------------------------------------------------}
+  TJSSVGMPathElement = class external name 'SVGMPathElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGNumber
+    --------------------------------------------------------------------}
+  TJSSVGNumber = class external name 'SVGNumber'
+  private
+  public
+    value: Double;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPathElement
+    --------------------------------------------------------------------}
+  TJSSVGPathElement = class external name 'SVGPathElement' (TJSSVGGeometryElement)
+  private
+  public
+    function getPathSegAtLength(distance: Double): NativeInt;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPatternElement
+    --------------------------------------------------------------------}
+  TJSSVGPatternElement = class external name 'SVGPatternElement' (TJSSVGElement)
+  private
+    FpatternUnits: TJSSVGAnimatedEnumeration; external name 'patternUnits';
+    FpatternContentUnits: TJSSVGAnimatedEnumeration; external name
+      'patternContentUnits';
+    FpatternTransform: TJSSVGAnimatedTransformList; external name
+      'patternTransform';
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+  public
+    property patternUnits: TJSSVGAnimatedEnumeration read FpatternUnits;
+    property patternContentUnits: TJSSVGAnimatedEnumeration read
+      FpatternContentUnits;
+    property patternTransform: TJSSVGAnimatedTransformList read FpatternTransform;
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPoint
+    --------------------------------------------------------------------}
+  TJSSVGPoint = class external name 'SVGPoint'
+  private
+  public
+    x: Double;
+    y: Double;
+    function matrixTransform(matrix: TJSSVGMatrix): TJSSVGPoint;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPointList
+    --------------------------------------------------------------------}
+  TJSSVGPointList = class external name 'SVGPointList'
+  public
+    numberOfItems: Integer;
+    procedure clear;
+    function initialize(newItem: TJSSVGPoint): TJSSVGPoint;
+    function getItem(&index: Integer): TJSSVGPoint;
+    function insertItemBefore(newItem: TJSSVGPoint; &index: Integer): TJSSVGPoint;
+    function replaceItem(newItem: TJSSVGPoint; &index: Integer): TJSSVGPoint;
+    function removeItem(&index: Integer): TJSSVGPoint;
+    function appendItem(newItem: TJSSVGPoint): TJSSVGPoint;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPolygonElement
+    --------------------------------------------------------------------}
+  TJSSVGPolygonElement = class external name
+    'SVGPolygonElement' (TJSSVGGeometryElement)
+    private
+    Fpoints: TJSSVGPointList; external name 'points';
+    FanimatedPoints: TJSSVGPointList; external name 'animatedPoints';
+  public
+    property points: TJSSVGPointList read Fpoints;
+    property animatedPoints: TJSSVGPointList read FanimatedPoints;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPolylineElement
+    --------------------------------------------------------------------}
+  TJSSVGPolylineElement = class external name
+    'SVGPolylineElement' (TJSSVGGeometryElement)
+    private
+    Fpoints: TJSSVGPointList; external name 'points';
+    FanimatedPoints: TJSSVGPointList; external name 'animatedPoints';
+  public
+    property points: TJSSVGPointList read Fpoints;
+    property animatedPoints: TJSSVGPointList read FanimatedPoints;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGPreserveAspectRatio
+    --------------------------------------------------------------------}
+  TJSSVGPreserveAspectRatio = class external name 'SVGPreserveAspectRatio'
+  private
+  public
+  const
+    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;
+    SVG_MEETORSLICE_UNKNOWN = 0;
+    SVG_MEETORSLICE_MEET = 1;
+    SVG_MEETORSLICE_SLICE = 2;
+  Public
+    align: Cardinal;
+    meetOrSlice: Cardinal;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGRadialGradientElement
+    --------------------------------------------------------------------}
+  TJSSVGRadialGradientElement = class external name
+    'SVGRadialGradientElement' (TJSSVGGradientElement)
+    private
+    Fcx: TJSSVGAnimatedLength; external name 'cx';
+    Fcy: TJSSVGAnimatedLength; external name 'cy';
+    rFr: TJSSVGAnimatedLength; external name 'r';
+    Ffx: TJSSVGAnimatedLength; external name 'fx';
+    Ffy: TJSSVGAnimatedLength; external name 'fy';
+    Ffr: TJSSVGAnimatedLength; external name 'fr';
+  public
+    property cx: TJSSVGAnimatedLength read Fcx;
+    property cy: TJSSVGAnimatedLength read Fcy;
+    property r: TJSSVGAnimatedLength read rFr;
+    property fx: TJSSVGAnimatedLength read Ffx;
+    property fy: TJSSVGAnimatedLength read Ffy;
+    property fr: TJSSVGAnimatedLength read Ffr;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGRect
+    --------------------------------------------------------------------}
+  TJSSVGRect = class external name 'SVGRect'
+  private
+  public
+    x: Double;
+    y: Double;
+    width: Double;
+    height: Double;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGRectElement
+    --------------------------------------------------------------------}
+  TJSSVGRectElement = class external name 'SVGRectElement' (TJSSVGGeometryElement)
+  private
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+    Frx: TJSSVGAnimatedLength; external name 'rx';
+    Fry: TJSSVGAnimatedLength; external name 'ry';
+  public
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+    property rx: TJSSVGAnimatedLength read Frx;
+    property ry: TJSSVGAnimatedLength read Fry;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGScriptElement
+    --------------------------------------------------------------------}
+  TJSSVGScriptElement = class external name 'SVGScriptElement' (TJSSVGElement)
+  private
+  public
+    type_: string; external name 'type';
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGSetElement
+    --------------------------------------------------------------------}
+  TJSSVGSetElement = class external name 'SVGSetElement' (TJSSVGAnimationElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGStopElement
+    --------------------------------------------------------------------}
+  TJSSVGStopElement = class external name 'SVGStopElement' (TJSSVGElement)
+  private
+    Foffset: TJSSVGAnimatedNumber; external name 'offset';
+  public
+    property offset: TJSSVGAnimatedNumber read Foffset;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGStyleElement
+    --------------------------------------------------------------------}
+  TJSSVGStyleElement = class external name 'SVGStyleElement' (TJSSVGElement)
+  private
+    Fsheet: TJSStyleSheet; external name 'sheet';
+  public
+    type_: string; external name 'type';
+    media: string;
+    title: string;
+    disabled: boolean;
+    property sheet: TJSStyleSheet read Fsheet;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGSwitchElement
+    --------------------------------------------------------------------}
+  TJSSVGSwitchElement = class external name
+    'SVGSwitchElement' (TJSSVGGraphicsElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGSymbolElement
+    --------------------------------------------------------------------}
+  TJSSVGSymbolElement = class external name 'SVGSymbolElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGStringList
+    --------------------------------------------------------------------}
+  TJSSVGStringList = class external name 'SVGStringList'
+  public
+    numberOfItems: Integer;
+    procedure clear;
+    function initialize(newItem: String): String;
+    function getItem(&index: Integer): String;
+    function insertItemBefore(newItem: String; &index: Integer): String;
+    function replaceItem(newItem: String; &index: Integer): String;
+    function removeItem(&index: Integer): String;
+    function appendItem(newItem: String): String;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTests
+    --------------------------------------------------------------------}
+  TJSSVGTests = class external name 'SVGTests'
+  private
+    FrequiredExtensions: TJSSVGStringList; external name 'requiredExtensions';
+    FsystemLanguage: TJSSVGStringList; external name 'systemLanguage';
+  public
+    property requiredExtensions: TJSSVGStringList read FrequiredExtensions;
+    property systemLanguage: TJSSVGStringList read FsystemLanguage;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTextContentElement
+    --------------------------------------------------------------------}
+  TJSSVGTextContentElement = class external name
+    'SVGTextContentElement' (TJSSVGGraphicsElement)
+    private
+    FtextLength: TJSSVGAnimatedLength; external name 'textLength';
+    FlengthAdjust: TJSSVGAnimatedEnumeration; external name 'lengthAdjust';
+  public
+  const
+    LENGTHADJUST_UNKNOWN = 0;
+    LENGTHADJUST_SPACING = 1;
+    LENGTHADJUST_SPACINGANDGLYPHS = 2;
+  Public
+    function getNumberOfChars: Integer;
+    function getComputedTextLength: Double;
+    function getSubStringLength(charnum: NativeInt; nchars: NativeInt): Double;
+    function getStartPositionOfChar(charnum: NativeInt): TJSSVGPoint;
+    function getEndPositionOfChar(charnum: NativeInt): TJSSVGPoint;
+    function getExtentOfChar(charnum: NativeInt): TJSSVGRect;
+    function getRotationOfChar(charnum: NativeInt): Double;
+    function getCharNumAtPosition(point: TJSSVGPoint): Integer;
+    procedure selectSubString(charnum: NativeInt; nchars: NativeInt);
+    property textLength: TJSSVGAnimatedLength read FtextLength;
+    property lengthAdjust: TJSSVGAnimatedEnumeration read FlengthAdjust;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTextPositioningElement
+    --------------------------------------------------------------------}
+  TJSSVGTextPositioningElement = class external name
+    'SVGTextPositioningElement' (TJSSVGTextContentElement)
+    private
+    Fx: TJSSVGAnimatedLengthList; external name 'x';
+    Fy: TJSSVGAnimatedLengthList; external name 'y';
+    Fdx: TJSSVGAnimatedLengthList; external name 'dx';
+    Fdy: TJSSVGAnimatedLengthList; external name 'dy';
+    Frotate: TJSSVGAnimatedNumberList; external name 'rotate';
+  public
+    property x: TJSSVGAnimatedLengthList read Fx;
+    property y: TJSSVGAnimatedLengthList read Fy;
+    property dx: TJSSVGAnimatedLengthList read Fdx;
+    property dy: TJSSVGAnimatedLengthList read Fdy;
+    property rotate: TJSSVGAnimatedNumberList read Frotate;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTextElement
+    --------------------------------------------------------------------}
+  TJSSVGTextElement = class external name 'SVGTextElement' (TJSSVGTextPositioningElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTextPathElement
+    --------------------------------------------------------------------}
+  TJSSVGTextPathElement = class external name
+    'SVGTextPathElement' (TJSSVGTextContentElement)
+    private
+    FstartOffset: TJSSVGAnimatedLength; external name 'startOffset';
+    Fmethod: TJSSVGAnimatedEnumeration; external name 'method';
+    Fspacing: TJSSVGAnimatedEnumeration; external name 'spacing';
+  public
+  const
+    TEXTPATH_METHODTYPE_UNKNOWN = 0;
+    TEXTPATH_METHODTYPE_ALIGN = 1;
+    TEXTPATH_METHODTYPE_STRETCH = 2;
+    TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
+    TEXTPATH_SPACINGTYPE_AUTO = 1;
+    TEXTPATH_SPACINGTYPE_EXACT = 2;
+  Public
+    property startOffset: TJSSVGAnimatedLength read FstartOffset;
+    property method: TJSSVGAnimatedEnumeration read Fmethod;
+    property spacing: TJSSVGAnimatedEnumeration read Fspacing;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTitleElement
+    --------------------------------------------------------------------}
+  TJSSVGTitleElement = class external name 'SVGTitleElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTransform
+    --------------------------------------------------------------------}
+  TJSSVGTransform = class external name 'SVGTransform'
+  private
+    Ftype_: Cardinal; external name 'type';
+    Fmatrix: TJSSVGMatrix; external name 'matrix';
+    Fangle: Double; external name 'angle';
+  public
+  const
+    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;
+  Public
+    procedure setMatrix(matrix: TJSSVGMatrix);
+    procedure setTranslate(tx: Double; ty: Double);
+    procedure setScale(sx: Double; sy: Double);
+    procedure setRotate(angle: Double; cx: Double; cy: Double);
+    procedure setSkewX(angle: Double);
+    procedure setSkewY(angle: Double);
+    property type_: Cardinal read Ftype_;
+    property matrix: TJSSVGMatrix read Fmatrix;
+    property angle: Double read Fangle;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGTSpanElement
+    --------------------------------------------------------------------}
+  TJSSVGTSpanElement = class external name
+    'SVGTSpanElement' (TJSSVGTextPositioningElement)
+    private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGUnitTypes
+    --------------------------------------------------------------------}
+  TJSSVGUnitTypes = class external name 'SVGUnitTypes'
+  private
+  public
+    const
+      SVG_UNIT_TYPE_UNKNOWN = 0;
+      SVG_UNIT_TYPE_USERSPACEONUSE = 1;
+      SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
+  Public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGURIReference
+    --------------------------------------------------------------------}
+  TJSSVGURIReference = class external name 'SVGURIReference'
+  private
+    Fhref: TJSSVGAnimatedString; external name 'href';
+  public
+    property href: TJSSVGAnimatedString read Fhref;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGUseElement
+    --------------------------------------------------------------------}
+  TJSSVGUseElement = class external name 'SVGUseElement' (TJSSVGGraphicsElement)
+  private
+    Fx: TJSSVGAnimatedLength; external name 'x';
+    Fy: TJSSVGAnimatedLength; external name 'y';
+    Fwidth: TJSSVGAnimatedLength; external name 'width';
+    Fheight: TJSSVGAnimatedLength; external name 'height';
+  public
+    property x: TJSSVGAnimatedLength read Fx;
+    property y: TJSSVGAnimatedLength read Fy;
+    property width: TJSSVGAnimatedLength read Fwidth;
+    property height: TJSSVGAnimatedLength read Fheight;
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGViewElement
+    --------------------------------------------------------------------}
+  TJSSVGViewElement = class external name 'SVGViewElement' (TJSSVGElement)
+  private
+  public
+  end;
+
+  { --------------------------------------------------------------------
+    TJSSVGZoomAndPan
+    --------------------------------------------------------------------}
+  TJSSVGZoomAndPan = class external name 'SVGZoomAndPan'
+  private
+  public
+  const
+    SVG_ZOOMANDPAN_UNKNOWN = 0;
+    SVG_ZOOMANDPAN_DISABLE = 1;
+    SVG_ZOOMANDPAN_MAGNIFY = 2;
+  Public
+    zoomAndPan: Cardinal;
+  end;
+
+implementation
+
+end.