svnno****@sourc*****
svnno****@sourc*****
2009年 11月 18日 (水) 20:50:14 JST
Revision: 1418
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1418
Author: dhrname
Date: 2009-11-18 20:50:14 +0900 (Wed, 18 Nov 2009)
Log Message:
-----------
Firefox以外のブラウザでも縦書きを可能にした
Modified Paths:
--------------
branches/05x/054/sie.js
Modified: branches/05x/054/sie.js
===================================================================
--- branches/05x/054/sie.js 2009-11-18 09:02:03 UTC (rev 1417)
+++ branches/05x/054/sie.js 2009-11-18 11:50:14 UTC (rev 1418)
@@ -94,8 +94,8 @@
} else {
if (/a/[-1] === 'a'){ //Firefoxだったらtrueを返す
NAIBU.STObject.ffnext();
- _noie_svgfont();
}
+ _noie_svgfont();
}
}
//他のページに移動する際に起動
@@ -1938,7 +1938,7 @@
var em = parseFloat(font.getElementsByTagName("font-face").item(0).getAttribute("units-per-em") || 0);
var advX = parseFloat( (font.getAttribute(horizOrVert) || em) ); //字幅の設定
var dx = parseFloat(tistyle.left), fontSize = parseFloat(tistyle.fontSize), dy = parseFloat(tistyle.top) - fontSize * 0.25, fe = fontSize / em; //0.25はディセンダの調整をあらかじめしているため
- while(node) {
+ while(node) {
data = node.data;
if (data !== void 0) { //dataがある場合
var advanceX = [], glyphData = [];
@@ -1978,7 +1978,7 @@
var obj = document.getElementsByTagName("object");
for (var i=0;i<obj.length;++i) {
var s, obji = obj[i];
- if (obji.getSVGDocument !== void 0 && window.opera === void 0) { //Operaでなければ、かつ、void 0はundefinedのこと
+ if (obji.getSVGDocument !== void 0) { //Operaでなければ、かつ、void 0はundefinedのこと
if (obji.contentDocument !== void 0) { //Firefoxの場合
s = obji.contentDocument;
} else {
@@ -2024,40 +2024,50 @@
var em = parseFloat(font.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face").item(0).getAttribute("units-per-em") || 0);
var advX = parseFloat( (font.getAttributeNS(null, horizOrVert) || em) ); //字幅の設定
var dx = parseFloat(ti.getAttributeNS(null, "x") || 0), fontSize = parseFloat(style.fontSize), dy = parseFloat(ti.getAttributeNS(null, "y") || 0), fe = fontSize / em;
- while(node) {
- data = node.data;
- if (data !== void 0) { //dataがある場合
- var advanceX = [], glyphData = [];
- for (var i=0,gli=glyphs.length;i<gli;++i) {
- //indexは該当する文字が何番目にあるかの数字
- var index = data.indexOf((glyphs[i].getAttributeNS(null, "unicode") || "なし")); //unicode属性に指定がない場合、処理させないようにする
- if (index > -1) {
- advanceX[index] = parseFloat(glyphs[i].getAttributeNS(null, horizOrVert) || advX); //字幅を収納
- glyphData[index] = glyphs[i].getAttributeNS(null, "d");
+ var ds = false;
+ if (/a/[-1] === 'a') { //Firefoxならば
+ ds = true;
+ } else {
+ if (isTategaki) {
+ ds = true;
+ }
+ }
+ if (ds){
+ while(node) {
+ data = node.data;
+ if (data !== void 0) { //dataがある場合
+ var advanceX = [], glyphData = [];
+ for (var i=0,gli=glyphs.length;i<gli;++i) {
+ //indexは該当する文字が何番目にあるかの数字
+ var index = data.indexOf((glyphs[i].getAttributeNS(null, "unicode") || "なし")); //unicode属性に指定がない場合、処理させないようにする
+ if (index > -1) {
+ advanceX[index] = parseFloat(glyphs[i].getAttributeNS(null, horizOrVert) || advX); //字幅を収納
+ glyphData[index] = glyphs[i].getAttributeNS(null, "d");
+ }
}
- }
- for (var i=0,adv=0;i<data.length;++i) {
- if (advanceX[i] !== void 0) { //配列に含まれていれば
- var path = ti.ownerDocument.createElementNS(NAIBU.svgNameSpace, "path");
- //advance、すなわち字幅の長さ分、ずらしていく
- if (isTategaki) {
- var y= dy + adv*fe, x = dx;
- } else {
- var x = dx + adv*fe, y= dy;
+ for (var i=0,adv=0;i<data.length;++i) {
+ if (advanceX[i] !== void 0) { //配列に含まれていれば
+ var path = ti.ownerDocument.createElementNS(NAIBU.svgNameSpace, "path");
+ //advance、すなわち字幅の長さ分、ずらしていく
+ if (isTategaki) {
+ var y= dy + adv*fe, x = dx;
+ } else {
+ var x = dx + adv*fe, y= dy;
+ }
+ ti.parentNode.insertBefore(path, ti);
+ path.style.cssText = style.cssText;
+ NAIBU.pathData(glyphData[i], path, false, 0, 0, (new Matrix(fe, 0, 0, -fe, x, y)));
+ adv += advanceX[i];
}
- ti.parentNode.insertBefore(path, ti);
- path.style.cssText = style.cssText;
- NAIBU.pathData(glyphData[i], path, false, 0, 0, (new Matrix(fe, 0, 0, -fe, x, y)));
- adv += advanceX[i];
}
+ advanceX = glyphData = null;
+ } else {
+ NAIBU._noie_createFont(node, font);
}
- advanceX = glyphData = null;
- } else {
- NAIBU._noie_createFont(node, font);
+ node = node.nextSibling;
}
- node = node.nextSibling;
+ ti.style.opacity = "0";
}
- ti.style.opacity = "0";
};
NAIBU.pathData = function(/*string*/ data, /*Element*/ p, /*boolean*/ t, /*float*/ w, h, /*Matrix*/ matrix) {
//CTMでフォントを移動させておく