.orgを.xmlに変換するスクリプト

.orgを.xmlに変換するスクリプト

.org後でグラフィックツリーを作成できるように、ファイルに作成されたツリーをいくつかのXMLコードに変換したいです(例:www.draw.ioWebページ)。

木の例

これを行うには、次のものが必要です。バッシュスクリプト.orgこれにより、次のファイルが変換されます。

* tree_root
** root_node_1
*** subnode
** root_node_2

以下を含むファイル.xml:

<mxCell id="b1" value="tree_root" > </mxCell>
<mxCell id="b2" value="root_node_1" ></mxCell>
    <mxCell id="a1" source="b2" target="b1">
<mxCell id="b3" value="subnode" ></mxCell>
    <mxCell id="a2" source="b3" target="b2">
<mxCell id="b4" value="root_node_2" ></mxCell>
    <mxCell id="a3" source="b4" target="b1">

組織モードでは、タイトルはアスタリスク(*- 最初のレベルのタイトル、**- 2番目のレベルのタイトルなど)として表示されます。

説明する:

  • 呼び出されるフィールドは、idボックスに表示される名前です。
  • .orgb1、b2、b3 は「box」を表し、ファイルの行番号に従って名前がリストされます。
  • a1、a2、a3は「矢印」を表し、後続の自然数列挙の名前です。
  • sourceid矢印が始まる場所、矢印が指す場所targetです。id

最大深さが6つのレイヤーなど、いくつかの簡単なケースが必要です。自分で拡張したいのですが、始めるには何かが必要です。

どうすればいいですか?

答え1

たぶんこれはあなたの要件を満たしていますか?基本的なアイデアは、特定の数のアスタリスクで始まる最後の行の行番号を実際に保持する配列(ラベルと呼ばれる)を持つことです。星の数を2つ以上増やしましたが、減少した数が正しく処理されると、誤ったグラフが生成されます。もちろん、タイトルの下のテキストはまったく処理されません。

#!/bin/bash

typeset -a labels
typeset -i node=1

while read -r stars rest
do
    level=${#stars}
    labels[level]=$node
    printf '<mxCell id="b%d" value="%q" ></mxCell>\n' $node "$rest"
    case $level in
    (1) ;;
    (*) printf '    <mxCell id="a%d" source="b%d" target="b%d">\n' $((node-1)) $node ${labels[level-1]} ;;
    esac
    : $((node++))
done

関連情報