ノート:エクリプス系
表示
系図のマークアップ
[編集]現在の版の系図は全角空白と全角の罫線で構成されていて読みづらく編集も難しいので、ブックマークレットを書いてtemplate:tree listで整形してみようと思います。
変換スクリプト
javascript:(function () {
let tb = document.getElementById("wpTextbox1");
if (!tb || !tb.value) {
alert("Textbox Not Found.");
return;
}
let lines = tb.value.split("\n");
let newValue = "";
let inFamilyLine = false;
function isFamilyLine(aLine) {
if(!aLine) {
return false;
}
return (aLine.charAt(0) == ":");
}
function checkFamilyLine(aLine) {
let ret = [1,0];
while (ret[0] < aLine.length) {
let c = aLine.charAt(ret[0]);
switch (c) {
case ":":
case " ":
case "|":
ret[0]++;
ret[1]++;
break;
case " ":
ret[0]++;
break;
default:
return ret;
}
}
return ret;
}
function replaceFamilyLine(aLine) {
let ret = checkFamilyLine(aLine);
let depth = ret[1];
let fl = ret[0];
let newLine = "";
/* dirty hack! */
depth++;
for (let i = 0; i < depth; i++) {
newLine += "*";
}
newLine += " ";
newLine += aLine.slice(fl);
return newLine;
}
for (let i =0; i < lines.length; i++) {
let line = lines[i];
let newLine ="";
if (!isFamilyLine(line)) {
if (inFamilyLine) {
newValue += "{{tree list/end}}\n";
inFamilyLine = false;
}
newValue += line + "\n";
}
else {
if (!inFamilyLine) {
newValue += "{{tree list}}\n";
inFamilyLine = true;
}
newValue += replaceFamilyLine(line) + "\n";
}
}
tb.value = newValue;
})();
使い方は記事の編集(「ビジュアル編集」ではなく「ソースの編集」)を開いた状態でブックマークレットを実行するだけです。
ところで、このデータはどうやってソースを担保するんでしょうね。単純なデータなので、何に依拠するかさえ示しておけばWikipedia:検証可能性を満たすのは決して難しくないと思いますが……。--Askr(会話) 2022年3月22日 (火) 16:38 (UTC)
- 前のスクリプトは1号族で上手く動かなかったので、少し手直ししました。
変換スクリプト v2
javascript:(function () {
let tb = document.getElementById("wpTextbox1");
if (!tb || !tb.value) {
alert("Textbox Not Found.");
return;
}
let lines = tb.value.split("\n");
let newValue = "";
let inFamilyLine = false;
function isSection(aLine) {
if(!aLine) {
return false;
}
return (aLine.charAt(0) == "=");
}
function isFamilyLine(aLine) {
if(!aLine) {
return false;
}
return (aLine.charAt(0) == ":");
}
function checkFamilyLine(aLine) {
let ret = [1,0];
while (ret[0] < aLine.length) {
let c = aLine.charAt(ret[0]);
switch (c) {
case ":":
case " ":
case "|":
case "│":
ret[0]++;
ret[1]++;
break;
case " ":
ret[0]++;
break;
default:
return ret;
}
}
return ret;
}
function replaceFamilyLine(aLine) {
let ret = checkFamilyLine(aLine);
let depth = ret[1];
let fl = ret[0];
let newLine = "";
/* dirty hack! */
depth++;
for (let i = 0; i < depth; i++) {
newLine += "*";
}
newLine += " ";
newLine += aLine.slice(fl);
return newLine;
}
for (let i =0; i < lines.length; i++) {
let line = lines[i];
let newLine ="";
if (!isFamilyLine(line)) {
if (inFamilyLine) {
newValue += "{{tree list/end}}\n";
inFamilyLine = false;
}
newValue += line + "\n";
}
else {
if (!inFamilyLine) {
newValue += "{{tree list}}\n";
inFamilyLine = true;
}
newValue += replaceFamilyLine(line) + "\n";
}
}
tb.value = newValue;
})();