選択しているテキストを表にするText to TableというOnetasticマクロ
私が欲しくて作ろうと思って取り組んだけれど挫折していた.リンク[1]における「dkpstarkey - 2014-04-02」の要求と「Omer Atay - 2014-04-05」の反応.改行を行に変えてくれるが,TABを列に変えてくれない.テキスト読み取り時点で,行単位でTexts[i]に挿入しているのみだから,この程度止まりかなと.しかしなるほど,Insert Row, Cellで表を作れるんだなと.いや改行がParagraphの区切りらしいから,Textの区切りが何なのか判明すればあるいは.いやいや無理無理.TAB文字を探して云々というコードが必要だろう.
リンク
ソースコード
<?xml version="1.0" encoding="utf-16"?> <Macro name="Text to Table" category="Table" description="Converts selected text into table" version="6"> <ModifyVar name="i" op="set" value="0" /> <For each="Paragraph"> <That hasProp="selection" op="not" value="none" /> <ModifyVar name="Texts" op="set" prop="text"> <LeftIndex var="i" /> </ModifyVar> <ModifyProp name="text" op="set" value="" /> <ModifyVar name="i" op="add" value="1" /> </For> <ModifyVar name="Count" op="set" var="i" /> <ModifyVar name="i" op="set" value="0" /> <For each="Paragraph"> <Under directly="true" a="Outline"> <That hasProp="selection" op="eq" value="none" /> </Under> <ModifyVar name="i" op="add" value="1" /> </For> <For each="Text"> <ModifyProp name="selected" op="set" value="false" /> </For> <For first="Outline"> <Insert type="Table" atIndex="-2" var="i"> <ModifyVar name="i" op="set" var="Count" /> <ModifyProp name="bordersVisible" op="set" value="true" /> <WhileVar name="i" op="gt" value="0"> <ModifyVar name="i" op="sub" value="1" /> <Insert type="Row" atIndex="0"> <Insert type="Cell"> <Insert type="Paragraph"> <ModifyProp name="text" op="set" var="Texts"> <RightIndex var="i" /> </ModifyProp> <ModifyProp name="selection" op="set" value="all" /> </Insert> </Insert> </Insert> </WhileVar> </Insert> </For> </Macro>
スクリーンショット
fezskill/public_html/table/warrior.tsv at 1.1 · ustreamer-01647/fezskill · GitHubを使用した.
操作前
Text to Table実行後
Text to Tableの理解
マクロエディタで見た.
元データ読み取りと削除
- var i = 0;
- for each Paragraph in CurrentPage
- 処理対象は選択範囲に限る
- Texts[i] = property(text)
- property(text)
- i++
- Count = i
目的不明処理
- i = 0
- for each Paragraph in CurrentPage
- 現状はアウトラインの直下である
- 処理対象は非選択範囲に限る
- i++
- 現状はアウトラインの直下である
選択状態を解除する
- for each Text in CurrentPage
- property(selected) = false
表組みを構成する
- for first Outline in CurrentPage
- 表を挿入する.変数iの意味は不明
- i = Count
- 罫線を可視に設定する
- while ( i > 0 )
- i--
- 行を追加
- セルを追加
- 段落を追加
- Texts[i]を設定する
- 選択状態にする
- 段落を追加
- セルを追加
- 表を挿入する.変数iの意味は不明
Text to Table実行に供したデータ
idc id name initialLevel maxLevel level1 level2 level3 lower upper a normal 基本攻撃 1 1 0 b endurepain エンダーペイン 1 1 0 c sonicboom ソニックブーム 0 3 2 1 1 forceimpact,crumblestorm d forceimpact フォースインパクト 0 3 3 1 1 sonicboom crumblestorm e crumblestorm クランブルストーム 0 3 3 2 2 forceimpact f blazeslash ブレイズスラッシュ 0 3 2 1 1 slumattack,guardreinforce,earthstamp,shieldbash g slumattack スラムアタック 0 3 2 1 1 blazeslash earthstamp h earthstamp アーススタンプ 0 3 2 2 2 slumattack,blazeslash i guardreinforce ガードレインフォース 0 3 2 1 1 blazeslash shieldbash j shieldbash シールドバッシュ 0 3 2 2 2 guardreinforce,blazeslash k smash スマッシュ 0 3 2 1 1 strikesmash,behemostail,extendblade,attackreinforce,heavysmash,dragontail,swordrampage l strikesmash ストライクスマッシュ 0 3 2 1 1 smash heavysmash m heavysmash ヘビースマッシュ 0 3 2 2 2 strikesmash,smash n behemostail ベヒモステイル 0 3 2 1 1 smash dragontail o dragontail ドラゴンテイル 0 3 2 2 2 behemostail,smash p extendblade エクステンブレイド 0 3 2 1 1 smash swordrampage q swordrampage ソードランページ 0 3 2 2 2 extendblade,smash r attackreinforce アタックレインフォース 0 3 2 1 1 smashhttps://github.com/ustreamer-01647/fezskill/blob/1.1/public_html/table/warrior.tsv
Show Page XML
OnetasticのSettingsにShow Page XMLがあるけれどなんだろな~と思ってクリックしてみると素晴らしい物だった.先のデータを選択した状態で見た結果.
<one:OEChildren selected="partial"> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{103}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[idc id name initialLevel maxLevel level1 level2 level3 lower upper]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{105}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>a normal </span><span style='font-family:"MS Gothic"' lang=ja>基本攻撃</span><span style='font-family: Verdana' lang=en-US> 1 1 0 </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{107}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>b endurepain </span><span style='font-family:"MS Gothic"' lang=ja>エンダーペイン</span><span style='font-family: Verdana' lang=en-US> 1 1 0 </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{109}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>c sonicboom </span><span style='font-family:"MS Gothic"' lang=ja>ソニックブーム</span><span style='font-family: Verdana' lang=en-US> 0 3 2 1 1 forceimpact,crumblestorm</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{111}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>d forceimpact </span><span style='font-family:"MS Gothic"' lang=ja>フォースインパクト</span><span style='font-family: Verdana' lang=en-US> 0 3 3 1 1 sonicboom crumblestorm</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{113}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>e crumblestorm </span><span style='font-family:"MS Gothic"' lang=ja>クランブルストーム</span><span style='font-family: Verdana' lang=en-US> 0 3 3 2 2 forceimpact </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{115}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>f blazeslash </span><span style='font-family:"MS Gothic"' lang=ja>ブレイズスラッシュ</span><span style='font-family: Verdana' lang=en-US> 0 3 2 1 1 slumattack,guardreinforce,earthstamp,shieldbash</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{117}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>g slumattack </span><span style='font-family:"MS Gothic"' lang=ja>スラムアタック</span><span style='font-family: Verdana' lang=en-US> 0 3 2 1 1 blazeslash earthstamp</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{119}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>h earthstamp </span><span style='font-family:"MS Gothic"' lang=ja>アーススタンプ</span><span style='font-family: Verdana' lang=en-US> 0 3 2 2 2 slumattack,blazeslash </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{121}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>i guardreinforce </span><span style='font-family:"MS Gothic"' lang=ja>ガードレインフォース</span><span style='font-family:Verdana' lang=en-US> 0 3 2 1 1 blazeslash shieldbash</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{123}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>j shieldbash </span><span style='font-family:"MS Gothic"' lang=ja>シールドバッシュ</span><span style='font-family: Verdana' lang=en-US> 0 3 2 2 2 guardreinforce,blazeslash </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{125}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>k smash </span><span style='font-family:"MS Gothic"' lang=ja>スマッシュ</span><span style='font-family: Verdana' lang=en-US> 0 3 2 1 1 strikesmash,behemostail,extendblade,attackreinforce,heavysmash,dragontail,swordrampage</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{127}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>l strikesmash </span><span style='font-family:"MS Gothic"' lang=ja>ストライクスマッシュ</span><span style='font-family:Verdana' lang=en-US> 0 3 2 1 1 smash heavysmash</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{129}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>m heavysmash </span><span style='font-family:"MS Gothic"' lang=ja>ヘビースマッシュ</span><span style='font-family: Verdana' lang=en-US> 0 3 2 2 2 strikesmash,smash </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{131}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>n behemostail </span><span style='font-family:"MS Gothic"' lang=ja>ベヒモステイル</span><span style='font-family: Verdana' lang=en-US> 0 3 2 1 1 smash dragontail</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{133}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>o dragontail </span><span style='font-family:"MS Gothic"' lang=ja>ドラゴンテイル</span><span style='font-family: Verdana' lang=en-US> 0 3 2 2 2 behemostail,smash </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{135}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>p extendblade </span><span style='font-family:"MS Gothic"' lang=ja>エクステンブレイド</span><span style='font-family: Verdana' lang=en-US> 0 3 2 1 1 smash swordrampage</span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{137}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>q swordrampage </span><span style='font-family:"MS Gothic"' lang=ja>ソードランページ</span><span style='font-family: Verdana' lang=en-US> 0 3 2 2 2 extendblade,smash </span>]]></one:T> </one:OE> <one:OE selected="partial" objectID="{B58BB1CE-F55E-4959-B218-2BDBF5F32F2F}{139}{B0}" lastModifiedTime="2014-04-12T10:20:55.000Z" quickStyleIndex="1" creationTime="2014-04-12T10:20:55.000Z"> <one:T selected="all"><![CDATA[<span style='font-family:Verdana' lang=ja>r attackreinforce </span><span style='font-family:"MS Gothic"' lang=ja>アタックレインフォース</span><span style='font-family:Verdana' lang=en-US> 0 3 2 1 1 smash </span>]]></one:T> </one:OE> </one:OEChildren>
- 選択範囲はone:OEChildrenの一部であり,one:OEの一部であり,なおかつone:Tの全てである
- TABコードは 8個に置換される
が読み取れる.pre要素内のデータをコピーすると違う結果になり,Text to Tableが成立しない.テキストエディタなり何なりを経由すると回避できる.