svnno****@sourc*****
svnno****@sourc*****
2010年 1月 5日 (火) 23:05:32 JST
Revision: 1537
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1537
Author: dhrname
Date: 2010-01-05 23:05:32 +0900 (Tue, 05 Jan 2010)
Log Message:
-----------
余分なコードの削除
Modified Paths:
--------------
branches/DOM/org/w3c/dom/svg.js
Modified: branches/DOM/org/w3c/dom/svg.js
===================================================================
--- branches/DOM/org/w3c/dom/svg.js 2010-01-05 13:34:20 UTC (rev 1536)
+++ branches/DOM/org/w3c/dom/svg.js 2010-01-05 14:05:32 UTC (rev 1537)
@@ -59,62 +59,7 @@
var NAIBU = {};
//documentを速くするために
/*@cc_on _d=document;eval('var document=_d')@*/
-//svgtovml load時に、最初に起動する関数
-function svgtovml() {
- var isMSIE = /*@cc_on!@*/false; //IEだったらtrueを返す
- var ary = document.getElementsByTagName("script");
- for (var i=0; i < ary.length; i++) {//全script要素をチェックして、type属性がimage/svg+xmlならば、中身をSVGとして処理する
- var hoge = ary[i].type;
- if (ary[i].type == "image/svg+xml") {
- var ait = ary[i].text;
- if (ait.match(/lt;/)) {
- ait = ait.replace(/<.+?>/g,''); //ソース内のタグを除去
- };
- //エンティティを文字に戻す
- ait = ait.replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
- if (isMSIE) {
- setVMLNameSpace();
- var da = {};
- da.obj = new Array(i); da.obj[i] = ary[i]; da.num = i + 1; da.content = ait; da.success = true;
- ca(da);
- } else{
- var s = textToSVG(ait,ary[i].getAttribute("width"),ary[i].getAttribute("height"));
- ary[i].parentNode.insertBefore(s,ary[i]);
- }
- }
- }
- if (isMSIE) {
- var st = setVMLNameSpace();
- st.addRule("object","display: none;");
- st.addRule("embed","display: none;");
- var obj = document.getElementsByTagName("object");
- var emd = document.getElementsByTagName("embed");
- docme = new Array(obj.length+emd.length);
- getObject(obj,0);
- getEmbed(emd,0);
- success = true;
- }
-}
-//vmlの名前空間をセット(必須)
-function setVMLNameSpace() {
- document.namespaces.add("v","urn:schemas-microsoft-com:vml");
- document.namespaces.add("o","urn:schemas-microsoft-com:office:office");
- var st = document.createStyleSheet();
- st.addRule("v\\:*","behavior: url(#default#VML);display:inline-block;font-size:12px;");//inline-blockはIEのバグ対策
- st.addRule("o\\:*","behavior: url(#default#VML);display:inline-block");
- return st;
-}
-
-//loadイベントに関数を追加
-if (window.addEventListener) {
- window.addEventListener('load', svgtovml, false);
-} else if (window.attachEvent) {
- window.attachEvent('onload', svgtovml);
-} else {
- window.onload = svgtovml;
-}
-
//以下は例外処理のログをとるためのもの。開発者以外は削除すること
var stlog = new STLog(true);
function STLog(jou) {
@@ -131,926 +76,6 @@
this.p.innerHTML += "<p>"+code+":"+e.message+"</p>";
}
}
-
-//DOMツリーを参照して新たなドキュメントを作成していく
-//ele 参照DOMツリー
-//paren 実際のHTMLツリー
-//elem 新規XMLツリー
-SVGtoVML.prototype.chset = function( /*element*/ ele, /*element*/ paren, /*element*/ elem){
- var nods = ele.childNodes;
- for (var i=0,nodesli=nods.length;i<nodesli;i++) {
- var te = nods[i], s = null, t = null;
- if (te.nodeType == 1) {
- t = this.createElementNS(te.namespaceURI, te.nodeName);
- if (te.namespaceURI == "http://www.w3.org/2000/svg") {
- var q = true; //q=trueはHTMLで要素を無視したいとき
- switch (te.localName) {
- case "g":
- s = document.createElement("v:group"); q = false; t.tar = s;
- break;
- case "linearGradient":
- s = document.createElement("v:fill"); q = false; t.tar = s;
- break;
- case "radialGradient":
- s = document.createElement("v:fill"); q = false; t.tar = s;
- break;
- case "stop":
- s = document.createElement("stop"); q = false; t.tar = s;
- break;
- case "a":
- s = document.createElement("a");
- break;
- case "text":
- s = document.createElement("div");
- break;
- case "image":
- s = document.createElement("v:image");
- break;
- default:
- s = document.createElement("v:shape");
- break;
- }
- switch (te.localName) {
- case "path":
- t = this.path[this.path.length] = new STPath(te,s);
- break;
- case "rect":
- t = this.rect[this.rect.length] = new STRectElement(te,s);
- break;
- case "circle":
- t = this.circle[this.circle.length] = new STCircle(te,s);
- break;
- case "ellipse":
- t = this.ellipse[this.ellipse.length] = new STEllipse(te,s);
- break;
- case "polyline":
- t = this.polyline[this.polyline.length] = new STPolyline(te,s);
- break;
- case "polygon":
- t = this.polygon[this.polygon.length] = new STPolygon(te,s);
- break;
- case "line":
- t = this.line[this.line.length] = new STLine(te,s);
- break;
- case "a":
- this.a[this.a.length] = new STAElement(te,s);
- break;
- case "text":
- t = this.text[this.text.length] = new STText(te,s);
- break;
- case "image":
- t = this.image[this.image.length] = new STImage(te,s);
- break;
- default: if (q) {s = null;} break;
- }
- }
- } else {
- t = new Node();
- t.nodeType = te.nodeType; t.nodeValue = te.nodeValue; t.nodeName = te.nodeName; t.namespaceURI = te.namespaceURI; t.localName = te.localName; t.prefix = te.prefix;
- }
- if (s && paren) {paren.appendChild(s);}
- elem.appendChild(t);
- this.chset(te, s, t);
- }
-}
-
-//getObject object要素を取得して、data属性のファイルをロード
-function getObject( /*Array*/ obb, /*int*/ n) {
- if (n < obb.length) {
- if (!"getSVGDocument" in obb[n]) {obb[n].getSVGDocument = function() {return STdocument[n];}}//object要素にgetSVGDocumentメソッドをつける(for IE)
- try {
- getURL(obb[n].getAttribute("data"),object_ca,obb,n+1);
- } catch(e) {stlog.add(e,177);getObject(obb,n+1);}
- }
-}
-
-//getObject embed要素を取得して、data属性のファイルをロード
-function getEmbed(obb,n) {
- if (n < obb.length) {
- if (!"getSVGDocument" in obb[n]) {obb[n].getSVGDocument = function() {return STdocument[n];}}
- try {
- getURL(obb[n].src,embed_ca,obb,n+1);
- } catch(e) {stlog.add(e,185);getEmbed(obb,n+1);}
- } else{
- }
-}
-
-//a要素の処理
-function STAElement( /*element*/ a) {
- SVGElement.call(this, arguments);
- this.xlink = new NAIBU.XLink(a);
- this.target = a.getAttribute("target");
- return this;
-}
-STAElement.prototype.set = function aset() {
- try {
- var t = this.target;
- var st = "replace";
- if (t == "_blank") {
- st = "new";
- }
- this.xlink.tar.setAttribute("xlink:show",st);
- this.xlink.set();
- var txts = this.xlink.tar.style;
- txts.cursor = "hand";
- txts.left = 0;
- txts.top = 0;
- } catch(e) {stlog.add(e,204);}
-}
-
-//text要素の処理
-function STText( /*element*/ te) {
- SVGElement.call(this, arguments);
- this.tar = te;
- var x = te.getAttribute("x");
- var y = te.getAttribute("y");
- this.fs = te.style.fontSize || te.getAttribute("fontSize");
- this.fs = this.fs || te.currentStyle.fontSize;
- this.paint = new NAIBU.PaintColor(te);
- this.transformable = new TransformList(te);
- try { //子要素のtspan要素を処理
- var li = this.tar.getElementsByTagName("SPAN");
- var lli = li.length;
- var l = new Array(lli);
- for (var i=0,lli=li.length;i<lli;i++) {
- l[i] = new STTSpanElement(li[i],x,y);
- }
- this.tspan = l;
- this.x = x || 0; this.y = y || 0;
- } catch(e) {stlog.add(e,129264);}
- return this;
-}
-STText.prototype.set = function textset( /*float*/ w, /*float*/ h, /*Matrix*/ matrix) {
- try {
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- var p = new Point(parseFloat(this.x),parseFloat(this.y));
- var ptm = p.matrixTransform(ttm);
- var tts = this.tar.style;
- tts.position = "absolute";
- var backr = document.createElement("v:rect");
- var backrs = backr.style; //ずれを修正するためのもの
- backrs.width = 1;
- backrs.height = 1;
- backrs.left = 0;
- backrs.top = 0;
- backr.setAttribute("stroked", "false");
- backr.setAttribute("filled", "false");
- var ttp = this.tar.parentNode;
- if (ttp.lastChild.nodeName != "rect") {
- ttp.appendChild(backr);
- }
- tts.left = ptm.x;
- tts.top = ptm.y;
- tts.width = 0;
- tts.height = 0;
- tts.whiteSpace = "nowrap";
- tts.color = this.paint.fill == "none" ? "transparent" : this.paint.fill;
- tts.fontSize = fontset(this.fs,w,h,ttm);
- tts.marginTop = -parseFloat(tts.fontSize);
- } catch(e) {stlog.add(e,236);}
- try {
- var arr = this.tspan;
- for (var i=0,arri=arr.length;i<arri;i++) {
- arr[i].set(ttm);
- }
- } catch(e) {stlog.add(e,2831);}
-}
-//fontset フォントの大きさを幅と高さを使ってpx単位に変換
-function fontset( /*float*/ f, /*float*/ w, /*float*/ h, /*Matrix*/ ttm) {
- try {
- var sw = new STLength(f, Math.sqrt((w*w + h*h) / 2));
- var swx = sw.value * Math.sqrt(Math.abs(ttm.a * ttm.d - ttm.b * ttm.c));
- } catch(e) {stlog.add(e,282);swx=f;}
- return swx;
-}
-
-//span要素の処理
-function STTSpanElement( /*element*/ ele, /*float*/ x, /*float*/ y) {
- SVGElement.call(this, arguments);
- this.tar = ele;
- this.x = parseFloat(ele.getAttribute("x") || x || 0);
- this.y = parseFloat(ele.getAttribute("y") || y || 0);
- this.fs = ele.getAttribute("fontSize") || ele.style.fontSize || ele.currentStyle.fontSize;
- this.paint = new NAIBU.PaintColor(ele);
- this.transformable = new TransformList(ele);
- return this;
-}
-STTSpanElement.prototype.set = function( /*Matrix*/ matrix) {
- try {
- var p = new Point(this.x, this.y);
- var ptm = p.matrixTransform(matrix);
- var tts = this.tar.style;
- tts.position = "absolute";
- tts.left = ptm.x - parseFloat(this.tar.parentNode.style.left);
- tts.top = ptm.y - parseFloat(this.tar.parentNode.style.top);// - parseFloat(this.fs);
- tts.whiteSpace = "nowrap";
- tts.color = this.paint.fill;
- } catch(e) {stlog.add(e,304);}
-}
-
-//line要素の処理
-function STLine( /*element*/ li) {
- SVGElement.call(this, arguments);
- this.tar = li;
- this.x1 = parseFloat(li.getAttribute("x1") || 0);
- this.y1 = parseFloat(li.getAttribute("y1") || 0);
- this.x2 = parseFloat(li.getAttribute("x2") || 0);
- this.y2 = parseFloat(li.getAttribute("y2") || 0);
- this.paint = new NAIBU.PaintColor(li);
- this.transformable = new TransformList(li);
- return this;
-}
-STLine.prototype.set = function lineset(w,h,matrix) {
- try {
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- var list = ["m", this.x1, this.y1, "l", this.x2, this.y2];
- var pl = new PList(list);
- var plm = pl.matrixTransform(ttm);
- var dat = plm.list.join(" ");
- var ele = this.tar;
- ele.setAttribute("path", dat);
- ele.setAttribute("coordsize", w + " " + h);
- this.paint.set(ele, w, h, ttm);
- } catch(e) {stlog.add(e,257);}
-}
-
-//path要素の処理
-
-//QからCに変換
-NAIBU.qtoc = function (/*float*/ x, /*float*/ y, /*Array*/ F) {
- F[0] = "c";
- for (var i = 1; i < F.length; i += 6) {
- var x1 = F[i], y1 = F[i+1], x2 = F[i+2], y2 = F[i+3];
- F.splice(i, 2, (x + 2 * x1) / 3, (y + 2 * y1) / 3, (2 * x1 + x2) / 3, (2 * y1 + y2) / 3);
- x = x2; y = y2;
- }
- return F;
-}
-
-//前回の座標を反転させる。それを挿入
-NAIBU.nst = function ( /*int*/ skip, /*Array*/ F, /*float*/ x1, /*float*/ y1) {
- F.splice(1, 0, x1, y1);
- for (var i = skip+1; i < F.length; i += skip) {
- x1 = 2 * F[i-2] - F[i-4];
- y1 = 2 * F[i-1] - F[i-3];
- F.splice(i, 0, x1, y1);
- }
- return F;
-}
-
-//相対座標を絶対座標に変換
-NAIBU.reltoabs = function (/*float*/ x, /*float*/ y, /*Array*/ F) {
- var skip = 2;
- if (F[0] == "c") {
- skip = 6;
- } else if (F[0] == "q") {
- skip = 4;
- }
- for (var i = 1, Fli = F.length; i < Fli; i += 2) {
- F[i] += x; F[i+1] += y;
- if ((i+1) % skip == 0) {
- x = F[i]; y = F[i+1];
- }
- }
- return F;
-}
-
-//配列の座標値すべてに、minxとminy分を引く
-Array.prototype._minm = function( /*float*/ minx, /*float*/ miny) {
- var self = this;
- var g = new Array();
- try {
- for (var i=0, ili=self.length; i<ili; i++) {
- var ar = self[i];
- for (var j=1, ari=ar.length; j<ari; j+=2) {
- if (isNaN(ar[j])) {
- j--;
- } else {
- ar[j] -= minx;
- ar[j+1] -= miny;
- }
- }
- g[i] = ar.join(" ");
- }
- } catch(e) {stlog.add(e,4472);}
- return g;
-}
-
-//polygon要素を処理
-function STPolygon( /*element*/ ele) {
- SVGElement.call(this, arguments);
- this.tar = ele;
- this.points = ele.attributes["points"].nodeValue;
- this.paint = new NAIBU.PaintColor(ele);
- this.transformable = new TransformList(ele);
- return this;
-}
-STPolygon.prototype.set = function polygonset(w,h,matrix) {
- var dat;
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- try {
- var F = this.points.replace(/^\s+|\s+$/g, "").split(/[\s,]+/);
- var pl = new PList(F);
- var plm = pl.matrixTransform(ttm);
- plm.list.splice(2, 0, "l");
- dat = "m" + plm.list.join(" ") + "x e";
- } catch(e) {stlog.add(e,395);}
- try {
- var ele = this.tar;
- ele.setAttribute("path", dat);
- ele.setAttribute("coordsize", w + " " + h);
- this.paint.set(ele, w, h, ttm);
- } catch(e) {stlog.add(e,406);}
-}
-
-//polyline要素を処理
-function STPolyline( /*element*/ ele) {
- SVGElement.call(this, arguments);
- this.tar = ele;
- this.points = ele.attributes["points"].nodeValue;
- this.paint = new NAIBU.PaintColor(ele);
- this.transformable = new TransformList(ele);
- return this;
-}
-STPolyline.prototype.set = function polylineset(w,h,matrix) {
- var dat;
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- try {
- var F = this.points.replace(/^\s+|\s+$/g, "").split(/[\s,]+/);
- var pl = new PList(F);
- var plm = pl.matrixTransform(ttm);
- plm.list.splice(2, 0, "l");
- dat = "m" + plm.list.join(" ") + "e";
- } catch(e) {stlog.add(e,429);}
- try {
- var ele = this.tar;
- ele.setAttribute("path", dat);
- ele.setAttribute("coordsize", w + " " + h);
- this.paint.set(ele, w, h, ttm);
- } catch(e) {stlog.add(e,440);}
-}
-
-//circle要素を処理
-function STCircle( /*element*/ ele) {
- SVGElement.call(this, arguments);
- this.tar = ele;
- try {
- this.cx = parseFloat(ele.getAttribute("cx") || 0);
- this.cy = parseFloat(ele.getAttribute("cy") || 0);
- this.r = parseFloat(ele.getAttribute("r"));
- this.paint = new NAIBU.PaintColor(ele);
- this.transformable = new TransformList(ele);
- } catch(e) {stlog.add(e,450);}
- return this;
-}
-//ベジェ曲線で円を表現する
-STCircle.prototype.set = function ovalset(w,h,matrix) {
- var cx = this.cx, cy = this.cy, rx = ry = this.r;
- var top = cy - ry, left = cx - rx, bottom = cy + ry, right = cx + rx;
- try {
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- var rrx = rx * 0.55228, rry = ry * 0.55228;
- var list = ["m", cx,top, "c", cx-rrx,top, left,cy-rry, left,cy, left,cy+rry, cx-rrx,bottom, cx,bottom, cx+rrx,bottom, right,cy+rry, right,cy, right,cy-rry, cx+rrx,top, cx,top, "x e"];
- var pl = new PList(list);
- var plm = pl.matrixTransform(ttm);
- var dat = plm.list.join(" ");
- } catch(e) {stlog.add(e,468);}
- try {
- var ele = this.tar;
- ele.setAttribute("path", dat);
- ele.setAttribute("coordsize", w + " " + h);
- this.paint.set(ele, w, h, ttm);
- } catch(e) {stlog.add(e,479);}
-}
-
-//ellipse要素を処理
-function STEllipse( /*element*/ ele) {
- SVGElement.call(this, arguments);
- this.tar = ele;
- try {
- this.cx = parseFloat(ele.getAttribute("cx") || 0);
- this.cy = parseFloat(ele.getAttribute("cy") || 0);
- this.rx = parseFloat(ele.getAttribute("rx"));
- this.ry = parseFloat(ele.getAttribute("ry"));
- this.paint = new NAIBU.PaintColor(ele);
- this.transformable = new TransformList(ele);
- } catch(e) {stlog.add(e,490);}
- return this;
-}
-STEllipse.prototype.set = function elliset(w,h,matrix) {
- var cx = this.cx, cy = this.cy, rx = this.rx, ry = this.ry;
- var top = cy - ry, left = cx - rx, bottom = cy + ry, right = cx + rx;
- try {
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- var rrx = rx * 0.55228, rry = ry * 0.55228;
- var list = ["m", cx,top, "c", cx-rrx,top, left,cy-rry, left,cy, left,cy+rry, cx-rrx,bottom, cx,bottom, cx+rrx,bottom, right,cy+rry, right,cy, right,cy-rry, cx+rrx,top, cx,top, "x e"];
- var pl = new PList(list);
- var plm = pl.matrixTransform(ttm);
- var dat = plm.list.join(" ");
- } catch(e) {stlog.add(e,508);}
- try {
- var ele = this.tar;
- ele.setAttribute("path", dat);
- ele.setAttribute("coordsize", w + " " + h);
- this.paint.set(ele, w, h, ttm);
- } catch(e) {stlog.add(e,519);}
-}
-
-//rect要素を処理
-function STRectElement( /*element*/ rect) {
- SVGElement.call(this, arguments);
- this.tar = rect;
- try {
- this.x = parseFloat(rect.getAttribute("x") || 0);
- this.y = parseFloat(rect.getAttribute("y") || 0);
- this.width = parseFloat(rect.getAttribute("svgwidth"));
- this.height = parseFloat(rect.getAttribute("svgheight"));
- if (rect.getAttribute("rx") || rect.getAttribute("ry")) {
- this.rx = parseFloat(rect.getAttribute("rx") || rect.getAttribute("ry"));
- this.ry = parseFloat(rect.getAttribute("ry") || rect.getAttribute("rx"));
- if (this.rx > this.width / 2) { //rx属性が幅より大きければ、幅の半分を属性に設定
- this.rx = this.width / 2;
- }
- if (this.ry > this.height / 2) {
- this.ry = this.height / 2;
- }
- }
- } catch(oe) {stlog.add(oe,541);}
- try {
- this.paint = new NAIBU.PaintColor(rect);
- this.transformable = new TransformList(rect);
- } catch(ee) {stlog.add(ee,545);}
- return this;
-}
-STRectElement.prototype.set = function rectset(w,h,matrix) {
- try {
- var x = this.x, y = this.y, xw = x + this.width, yh = y + this.height;
- var list;
- if (this.rx) {
- var rx = this.rx, ry = this.ry;
- var rrx = rx * 0.55228, rry = ry * 0.55228;
- var a = xw - rx, b = x + rx, c = y + ry, d = yh - ry;
- list = ["m",b,y, "l",a,y, "c",a+rrx,y,xw,c-rry,xw,c, "l",xw,d, "c",xw,d+rry,a+rrx,yh,a,yh, "l",b,yh, "c",b-rrx,yh,x,d+rry,x,d, "l",x,c, "c",x,c-rry,b-rrx,y,b,y];
- } else {
- list = ["m",x,y, "l",x,yh, xw,yh, xw,y, "x e"];
- }
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- var pl = new PList(list);
- var plm = pl.matrixTransform(ttm);
- var dat = plm.list.join(" ");
- } catch(e) {stlog.add(e,564);}
- try {
- var ele = this.tar;
- ele.setAttribute("path", dat);
- ele.setAttribute("coordsize", w + " " + h);
- this.paint.set(ele, w, h, ttm);
- } catch(ee) {stlog.add(ee,576);}
-}
-
-//image要素の処理
-function STImage( /*element*/ ele){
- SVGElement.call(this, arguments);
- this.tar = ele;
- this.x = parseFloat(ele.getAttribute("x") || 0);
- this.y = parseFloat(ele.getAttribute("y") || 0);
- this.width = parseFloat(ele.getAttribute("svgwidth"));
- this.height = parseFloat(ele.getAttribute("svgheight"));
- ele.setAttribute("xlink:show", "embed");
- this.xlink = new NAIBU.XLink(ele);
- this.paint = new NAIBU.PaintColor(ele, this.width, this.height);
- this.transformable = new TransformList(ele);
- return this;
-}
-STImage.prototype.set = function imagesets(w,h,matrix){
- try {
- var ttm = matrix.multiply(this.transformable.tr.matrix);
- var ts = this.tar.style;
- ts.position = "absolute";
- var pt = new Point(this.x, this.y);
- var ptt = pt.matrixTransform(ttm);
- ts.left = ptt.x;
- ts.top = ptt.y;
- ts.width = this.width * ttm.a;
- ts.height = this.height * ttm.d;
- if (ttm.b != 0 || ttm.c != 0 || this.paint.fillopacity) {//フィルター プロパティを使うと、PNGの透過性がなくなるので注意
- ts.filter = "progid:DXImageTransform.Microsoft.Matrix progid:DXImageTransform.Microsoft.Alpha";
- var ttfi = this.tar.filters.item('DXImageTransform.Microsoft.Matrix');
- ttfi.M11 = 1;
- ttfi.M12 = ttm.b;
- ttfi.M21 = ttm.c;
- ttfi.M22 = 1;
- ttfi.sizingMethod = "auto expand";
- var ttfia = this.tar.filters.item('DXImageTransform.Microsoft.Alpha');
- ttfia.Style = 0;
- ttfia.Opacity = parseFloat(this.paint.fillopacity)*100;
- }
- this.xlink.set();
- } catch(e) {stlog.set(e,21896);}
-}
-
-/*use要素の処理*/
-function STUseElement( /*element*/ ele){
- SVGElement.call(this, arguments);
- this.tar = ele;
- this.x = parseFloat(ele.getAttribute("x") || 0);
- this.y = parseFloat(ele.getAttribute("y") || 0);
- this.width = ele.getAttribute("svgwidth");
- this.height = ele.getAttribute("svgheight");
- ele.setAttribute("xlink:show", "embed")
- this.xlink = new NAIBU.XLink(ele);
- return this;
-}
-STUseElement.prototype.set = function(/*float*/ w, /*float*/ h){
- try {
- var ts = this.tar.getAttribute("transform") || "";
- var s = this.xlink.set();
- var sd = s.rootElement;
- sd.setAttribute("transform", ts+ "matrix(1,0,0,1," +this.x+ "," +this.y+ ") ");
- sd.firstChild.setAttribute("id","");
- var regw = new STLength(w); regw.value = w; var regh = new STLength(h); regh.value = h;
- s.set(w,h,regw,regh);
- sd.setAttribute("coordorgin","0 0");
- } catch(e) {stlog.set(e,85436);}
-}
-
-//PaintColor 色、線などをすべてコントロール
-NAIBU.PaintColor = function( /*element*/ ele, /*float*/ w, /*float*/ h) {
- this.tar = ele;
- this.fill = "black";
- this.stroke = "none";
- this.fillon = true;
- this.strokeon = true;
- this.strokeweight = "1";
-if (ele) { //親要素の値を継承
- var elpn = ele.parentNode;
- if (elpn.tagName == "group") {
- var pnp = new NAIBU.PaintColor(elpn);
- for (var p in pnp) {
- if (p == "tar" || p == "fillon" || p == "strokeon") {
- } else {
- this[p] = pnp[p];
- }
- }
- }
- var f = this.getAttribute("fill");
- if (f) {
- this.fill = colorsname[f] ? colorsname[f] : f;
- }
- var s = this.getAttribute("stroke");
- if (s) {
- this.stroke = colorsname[s] ? colorsname[s] : s;
- }
- if (this.fill == "none") {
- this.fillon = false;
- }
- if (this.stroke == "none") {
- this.strokeon = false;
- }
- this.opacity = this.getAttribute("opacity");
- this.fillopacity = this.getAttribute("fillopacity");
- this.strokeopacity = this.getAttribute("strokeopacity");
- var sw = this.getAttribute("strokewidth") || this.getAttribute("strokesvgwidth");
- if (sw) {
- this.strokeweight = sw;
- }
- this.strokejoin = this.getAttribute("strokelinejoin") || "miter";
- this.strokemiterlimit = this.getAttribute("strokemiterlimit") || "4";
- this.strokeendcap = this.getAttribute("strokelinecap") || "butt";
- if (this.strokeendcap == "butt") { this.strokeendcap = "flat"; }
- var sdash = this.getAttribute("strokedasharray");
- if (sdash) {
- if (sdash == "none") { sdash = "solid"; }
- var strs = sdash.split(",");
- for (var i=0,sli=strs.length;i<sli;i++) {
- strs[i] = Math.ceil(parseFloat(strs[i]) / parseFloat(this.strokeweight)); //精密ではないので注意
- }
- this.strokedashstyle = strs.join(" ");
- if (strs.length % 2 == 1) { this.strokedashstyle += " " +this.strokedashstyle;}
- }
-}
- return this;
-}
-NAIBU.PaintColor.prototype.getAttribute = function pcgetAttribute( /*string*/ name) {
- try {
- var element = this.tar;
- var style = element.style[name];
- if (style) {
- return style;
- }
- var attribute = element.attributes[name];
- var s = attribute ? attribute.nodeValue : null;
- return s;
- } catch(e) {stlog.add(e,659); return null;}
-}
-NAIBU.PaintColor.prototype.set = function pcset( /*element*/ el, /*float*/ w, /*float*/ h, /*Matrix*/ matrix) {
- var fillElement = document.createElement("v:fill");
- var strokeElement = document.createElement("v:stroke");
- var rgrad = false;
- if (this.fillon) {
- try {
- if (this.fillopacity) {
- fillElement.setAttribute("opacity", this.fillopacity);
- }
- if (this.fill.match(/url\(#(\w+)/)) { //fill属性の値がurl(#id)ならば、idを設定したグラデーション関連要素を呼び出す
- var gradfill = document.getElementById(RegExp.$1);
- var ftype = gradfill.getAttribute("type");
- rgrad = this.gradient(gradfill,fillElement,ftype);
- } else{
- fillElement.setAttribute("color",this.fill);
- }
- } catch(e) {stlog.add(e,682); fillElement.setAttribute("on","true");
- fillElement.setAttribute("color","black");}
- } else{
- fillElement.setAttribute("on","false");
- }
- if (this.strokeon) {
- try {
- strokeElement.setAttribute("joinstyle",this.strokejoin);
- if (this.strokedashstyle) {
- strokeElement.setAttribute("dashstyle",this.strokedashstyle);
- }
- strokeElement.setAttribute("miterlimit",this.strokemiterlimit);
- strokeElement.setAttribute("endcap",this.strokeendcap);
- var sw = new STLength(this.strokeweight, Math.sqrt((w*w + h*h) / 2));
- var swx = sw.value * Math.sqrt(Math.abs(matrix.a * matrix.d - matrix.b * matrix.c));
- strokeElement.setAttribute("weight", swx + "px");
- if (swx < 1) {
- this.strokeopacity = this.strokeopacity ? this.strokeopacity * swx : swx;
- }
- if (this.strokeopacity) {
- strokeElement.setAttribute("opacity", this.strokeopacity);
- }
- if (this.stroke.match(/url\(#(\w+)/)) {
- var gradstroke = document.getElementById(RegExp.$1);
- var stype = gradstroke.getAttribute("type");
- this.gradient(gradstroke,strokeElement,stype);
- } else{
- strokeElement.setAttribute("color",this.stroke);
- }
- } catch(e) {stlog.add(e,720); strokeElement.setAttribute("on","false"); }
- } else{
- strokeElement.setAttribute("on","false");
- }
- if (this.opacity) {
- fillElement.setAttribute("opacity", this.opacity);
- }
- if (rgrad) { //gradientradialならば、背景を作っておく
- try{
- var s = this.tar.cloneNode(false);
- this.tar.parentNode.insertBefore(s, this.tar);
- s.setAttribute("path", this.tar.getAttribute("path"));
- s.setAttribute("fillcolor", this.color2);
- var fillElement2 = document.createElement("v:fill");
- fillElement2.setAttribute("opacity", this.stopopacity2);
- s.appendChild(fillElement2);
- s.appendChild(strokeElement);
- this.tar.setAttribute("fillcolor", this.color1);
- this.tar.style.filter = "progid:DXImageTransform.Microsoft.Alpha";
- var ttfia = this.tar.filters.item("DXImageTransform.Microsoft.Alpha");
- ttfia.style = 2;
- ttfia.opacity = 100 * parseFloat(this.stopopacity1);
- ttfia.finishopacity = 0;
- } catch(e) {stlog.add(e,9522);}
- } else {
- el.appendChild(fillElement);
- el.appendChild(strokeElement);
- }
-}
-
-//linearGradient、radialGradient要素を処理
-NAIBU.PaintColor.prototype.gradient = function pcgradient( /*element*/ gel, /*element*/ ele, /*string*/ type) {
- var tgc = gel;
- var pgs;
- var grad = false;
- ele.setAttribute("method","sigma");
- try {
- if (type == "gradient") {
- var ang;
- var x1 = parseFloat(gel.getAttribute("x1").replace(/%/,"")), y1 = parseFloat(gel.getAttribute("y1").replace(/%/,""));
- var x2 = parseFloat(gel.getAttribute("x2").replace(/%/,"")), y2= parseFloat(gel.getAttribute("y2").replace(/%/,""));
- ang = 270 - Math.atan2(y2-y1,x2-x1)*180/Math.PI; if (ang>=360) {ang = ang-360;}
- ele.setAttribute("angle",ang+"");
- ele.setAttribute("focus","0%");
- } else if (type == "gradientRadial") {
- grad = true;
- }
- } catch(e) {stlog.add(e,749);if (ele) {ele.setAttribute("angle","270");}}
- try {
- ele.setAttribute("type",type);
- if (gel.getAttribute("xlink:href")) {
- pgs = document.getElementById(gel.getAttribute("xlink:href").match(/\w+/));
- } else {
- pgs = tgc;
- }
- var tc = pgs.getElementsByTagName("stop");
- var ttc = new Array(), ttco = new Array();
- for (var i=0,tci=tc.length;i<tci;i++) {
- var tcp = new NAIBU.PaintColor(tc[i]);
- ttc[i] = tcp.getAttribute("stopcolor") || "black";
- ttco[i] = tcp.getAttribute("stopopacity") || "1";
- }
- if (ttco[0]) {ele.setAttribute("o:opacity2",ttco[0]);}
- if (ttco[ttco.length-1]) {ele.setAttribute("opacity",ttco[ttco.length-1]);}
- if (ttc.length > 2) {
- var tgoff = tc[0].getAttribute("offset");
- if (!tgoff.match(/%/)) {tgoff = Math.round(parseFloat(tgoff)*100);}
- var cst = "";
- for (var i=0;i<ttc.length;i++) {
- var tgoff = tc[i].getAttribute("offset");
- if (!tgoff.match(/%/)) {tgoff = Math.round(parseFloat(tgoff)*100);}
- cst = cst +tgoff+ "% " +ttc[i]+ ",";
- }
- ele.setAttribute("colors",cst);
- } else{
- ele.setAttribute("color",ttc[0]);
- ele.setAttribute("color2",ttc[ttc.length-1]);
- }
- } catch(e) {stlog.add(e,784);}
- this.color1 = ttc[0];
- this.color2 = ttc[ttc.length-1];
- this.stopopacity1 = ttco[0];
- this.stopopacity2 = ttco[ttco.length-1];
- return grad;
-}
-
-//path要素のd属性で使われるA(rcTo)コマンドを処理
-function STArc() {
- return this;
-}
-STArc.prototype.matrixTransform = function arcmatrixTransform( /*Matrix*/ matrix) {
- var plst = new PList(this.D);
- var s = new STArc();
- s.D = plst.matrixTransform(matrix).list;
- plst = null;
- return s;
-}
-//2つの点から角度を算出
-STArc.prototype.CVAngle = function starccvangle(ux,uy,vx,vy) {
- var rad = Math.atan2(vy, vx) - Math.atan2(uy, ux);
- return (rad >= 0) ? rad : 2 * Math.PI + rad;
-}
-//弧をベジェ曲線に変換
-STArc.prototype.set = function starcset(x1,y1,rx,ry,psai,fA,fS,x4,y4) {
- var fS = parseFloat(fS), rx = parseFloat(rx), ry = parseFloat(ry), psai = parseFloat(psai), x1 = parseFloat(x1), x4 = parseFloat(x4), y1 = parseFloat(y1), y4 = parseFloat(y4);
- if (rx == 0 || ry == 0) {throw "line";}
- rx = Math.abs(rx); ry = Math.abs(ry);
- var ccx = (x1 - x4) / 2, ccy = (y1 - y4) / 2;
- var cpsi = Math.cos(psai*Math.PI/180), spsi = Math.sin(psai*Math.PI/180);
- var x1d = cpsi*ccx + spsi*ccy, y1d = -1*spsi*ccx + cpsi*ccy;
- var x1dd = x1d * x1d, y1dd = y1d * y1d;
- var rxx = rx * rx, ryy = ry * ry;
- var lamda = x1dd/rxx + y1dd/ryy;
- var sds;
- if (lamda > 1) {
- rx = Math.sqrt(lamda) * rx;
- ry = Math.sqrt(lamda) * ry;
- sds = 0;
- } else{
- var seif = 1;
- if (fA == fS) {
- seif = -1;
- }
- sds = seif * Math.sqrt((rxx*ryy - rxx*y1dd - ryy*x1dd) / (rxx*y1dd + ryy*x1dd));
- }
- var cxd = sds*rx*y1d / ry, cyd = -1 * sds*ry*x1d / rx;
- var cx = cpsi*cxd - spsi*cyd + (x1+x4)/2, cy = spsi*cxd + cpsi*cyd + (y1+y4)/2;
- var s1 = this.CVAngle(1,0,(x1d-cxd)/rx,(y1d-cyd)/ry);
- var dr = this.CVAngle((x1d-cxd)/rx,(y1d-cyd)/ry,(-x1d-cxd)/rx,(-y1d-cyd)/ry);
- if (!fS && dr > 0) {
- dr -= 2*Math.PI;
- } else if (fS && dr < 0) {
- dr += 2*Math.PI;
- }
- var sse = dr * 2 / Math.PI;
- var seg = Math.ceil(sse<0 ? -1*sse : sse);
- var segr = dr / seg;
- var nea = new Array();
- var t = 8/3 * Math.sin(segr/4) * Math.sin(segr/4) / Math.sin(segr/2);
- var cpsirx = cpsi * rx;
- var cpsiry = cpsi * ry;
- var spsirx = spsi * rx;
- var spsiry = spsi * ry;
- var mc = Math.cos(s1);
- var ms = Math.sin(s1);
- var x2 = x1 - t * (cpsirx * ms + spsiry * mc);
- var y2 = y1 - t * (spsirx * ms - cpsiry * mc);
- for (var i = 0; i < seg; i++) {
- s1 += segr;
- mc = Math.cos(s1);
- ms = Math.sin(s1);
- var x3 = cpsirx * mc - spsiry * ms + cx;
- var y3 = spsirx * mc + cpsiry * ms + cy;
- var dx = -t * (cpsirx * ms + spsiry * mc);
- var dy = -t * (spsirx * ms - cpsiry * mc);
- nea = nea.concat([x2, y2, x3 - dx, y3 - dy, x3, y3]);
- x2 = x3 + dx;
- y2 = y3 + dy;
- }
- this.D = (this.D ? this.D.concat(nea) : nea);
- nea = null;
- return true;
-}
-//setをできるだけ繰り返す
-STArc.prototype.sset = function starcsset( /*float*/ nox, /*float*/ noy, /*array*/ f, /*float*/ rx, /*float*/ ry) {
- for (var i=1,fli=f.length;i<fli+1;i+=7){
- this.set(nox,noy,f[i],f[i+1],f[i+2],f[i+3],f[i+4],f[i+5]+rx,f[i+6]+ry);
- nox = f[i+5]+rx; noy = f[i+6]+ry;
- }
-}
-
-function utf16( /*string*/ s) {
- return unescape(s);
-}
-function unescapeUTF16( /*string*/ s) {
- return s.replace(/%u\w\w\w\w/g, utf16);
-}
-
-//Text2SVG機能。SVGのソース(文章)をSVG画像に変換できる。(必須ではない)
-function textToSVG( /*string*/ source, /*float*/ w, /*float*/ h) {
- var data = 'data:image/svg+xml,' + unescapeUTF16(escape(source));
- var ob = document.createElement("object");
- ob.setAttribute("data",data);
- ob.setAttribute("width",w);
- ob.setAttribute("height",h);
- ob.setAttribute("type","image/svg+xml");
- return ob;
-}
-
-//XMLHttpRequestオブジェクトの作成
-function HTTP() {
- var xmlhttp;
- try {
- xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
- } catch (E) {
- xmlhttp = false;
- }
- }
- if (!xmlhttp) {
- try {
- xmlhttp = new XMLHttpRequest();
- } catch (e) {
- xmlhttp = false;
- }
- }
- return xmlhttp;
-}
-var success = true;
-//SVGDocumentを収納しておく
-var STdocument = new Array();
-
-//次のembed,object要素を読み込む処理
-function embed_ca( /*object*/ data) {
- ca(data);
- getEmbed(data.obj,data.num);
-}
-function object_ca( /*object*/ data) {
- ca(data);
- getObject(data.obj,data.num);
-}
-
-//IE用。object要素のデータからVMLを作成
-function ca( /*object*/ data) {
-if (success && data.success) {
- var dn = data.num-1;
- try {
- var obj = data.obj[dn];
- var obw = new STLength(obj.getAttribute("width"),obj.clientWidth), obh = new STLength(obj.getAttribute("height"),obj.clientHeight);
- var obwidth = obw.value, obheight = obh.value;
- } catch(e) {stlog.add(e,1209);}
-try{ //DOMのためのパーサ
- var dp = new DOMParser();
- var doc = dp.parseFromString(data.content,"image/svg+xml");
- var svgdoc = DOMImplementation.createDocument("svg","http://www.w3.org/2000/svg");
- alert(svgdoc.documentElement.childNodes[0].nodeName);
-}catch(e){stlog.add(e,2003);}
- //正規表現でソースをVML用に書き換え
- var dc = data.content.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->").replace(/<script.+>/g,"").replace(/<\?.+\?>/g,"").replace(/xmlns="[^"]+"/,"").replace(/<svg/,"<v:group style='position:relative;top:0;left:0;width:100%;height:100%'").replace(/<\/svg/,"</v:group").replace(/<path\s/g,"<v:shape tag='path' ").replace(/<\/path/g,"</v:shape").replace(/<rect/g,"<v:shape tag='rect'").replace(/<text/g,"<div").replace(/<\/text/g,"</div").replace(/<\/rect/g,"</v:shape").replace(/<line\s/g,"<v:shape tag='line' ").replace(/<\/line>/g,"</v:shape>").replace(/<circle\s/g,"<v:shape tag='circle' ").replace(/<\/circle/g,"</v:shape").replace(/<ellipse\s/g,"<v:shape tag='ellipse' ").replace(/<\/ellipse/g,"</v:shape").replace(/<g(\s|>)/g,"<v:group style='top:0;left:0;position:relative;width:100%;height:100%'$1").replace(/<\/g>/g,"</v:group>").replace(/<polyline\s/g,"<v:shape tag='polyline' ").replace(/<\/polyline/g,"</v:shape").replace(/<polygon\s/g,"<v:shape tag='polygon' ").replace(/<\/polygon/g,"</v:shape").replace(/<linearGradient/g,"<v:fill type='gradient'").replace(/<\/linearGradient/g,"</v:fill").replace(/<radialGradient/g,"<v:fill type='gradientRadial'").replace(/<\/radialGradient/g,"</v:fill").replace(/width="/g,'svgwidth="').replace(/height="/g,'svgheight="').replace(/stroke-/g,"stroke").replace(/(<[^<]+)\sfont-size=/g,'$1 fontSize=').replace(/(<[^<]+)\swriting-mode=/g,'$1 writingMode=').replace(/stop-/g,"stop").replace(/fill-/g,"fill").replace(/<tspan\s/g,"<span ").replace(/<\/tspan>/g,"</span>").replace(/<image/g,"<v:image").replace(/<\/image>/g,"</v:image>").replace(/<use\s/g,"<v:group style='position:relative;top:0;left:0;width:100%;height:100%'></v:group><use ");
- var ob = document.createElement("v:group");
- var obst = ob.style;
- obst.position = "relative";
- obst.overflow = "hidden";
- ob.innerHTML = dc;
- var obc = ob.getElementsByTagName("group").item(0);
- var regaw = obc.getAttribute("svgwidth");
- if (!regaw) {regaw = obwidth;}
- var regah = obc.getAttribute("svgheight");
- if (!regah) {regah = obheight;}
- regw = new STLength(regaw,obwidth);
- regh = new STLength(regah,obheight);
- var regwv = regw.value, reghv = regh.value;
- obst.width = regwv;
- obst.height = reghv;
- ob.setAttribute("coordsize",regwv +" "+ reghv);
- obj.parentNode.insertBefore(ob,obj);
- var d = (new Date()).getTime();STdocument[dn] = new SVGtoVML();
- STdocument[dn].read(obc,doc);
- STdocument[dn].set(obwidth,obheight,regw,regh);
- dc = null;var s = (new Date()).getTime() - d;alert(s);
-}
-}
if (typeof DOMParser == "undefined") {
DOMParser = function () {}
@@ -1075,26 +100,6 @@
}
}
-//指定したURLの文章データを取得
-function getURL( /*string*/ url, /*function*/ fn, /*Array*/ ob, /*int*/ n) {
- var xmlhttp= new HTTP();
- if (xmlhttp) {
- xmlhttp.open("GET",url,true);
- xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
- xmlhttp.onreadystatechange = function() {
- if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
-fn({success:true,status:xmlhttp.status,content:xmlhttp.responseText,contentType:xmlhttp.getResponseHeader("Content-Type"),obj:ob,num:n});
- }
- }
- xmlhttp.send(null);
- } else {
- fn({success:false});
- }
-}
-
-//Sieb用
-try{if (sieb_s) {svgtovml();}} catch(e) {}
-
if((typeof SVGElement) === "function" && /*@cc_on!@*/false){//IE7以降
/*
// File: svg.idl
@@ -1146,11 +151,11 @@
*/
function SVGException(code) {
/*unsigned short*/ this.code = code;
+ return this;
};
-SVGException.counstructor = Error;
+SVGException.constructor = Error;
SVGException.prototype = new Error();
-*/
-with (SVGException) {
+with(SVGException) {
// SVGExceptionCode
/*const unsigned short*/ SVG_WRONG_TYPE_ERR = 0;
/*const unsigned short*/ SVG_INVALID_VALUE_ERR = 1;