NDSでMQOビューアをつくる(1)

DSのマジコンを手に入れた。自作のプログラムを動かせるので、MQOを表示するソフトでも作ってみることにしたよ。

まずはMQOをパースしてデータを取り出してみようということで、一行取得して空白で切り出して…とかがんばってたけど、http://rainer.blog7.fc2.com/blog-entry-97.htmlこんな楽勝なコードでパースできたとは!

$fp = fopen($filename, 'r');

while ($line = fgets($fp)) {
    $match = array();
    $reg = '/(\-?\d+\.?\d*)|("[^"]+")|([_a-zA-Z][_a-zA-Z1-9]*)/i';
    if (preg_match_all($reg, $line, $match)) {
        var_dump($match[0]);
    }
}

fclose($fp);

これを実行すると

array(2) {
  [0]=>
  string(11) "Metasequoia"
  [1]=>
  string(8) "Document"
}
array(4) {
  [0]=>
  string(6) "Format"
  [1]=>
  string(4) "Text"
  [2]=>
  string(3) "Ver"
  [3]=>
  string(3) "1.0"
}
array(1) {
  [0]=>
  string(5) "Scene"
}
array(4) {
  [0]=>
  string(3) "pos"
  [1]=>
  string(6) "0.8786"
  [2]=>
  string(9) "-176.7551"
  [3]=>
  string(9) "1500.0000"
}

正規表現奥が深いよ…。

次はこのコードをNDS用に移植してみる。正規表現はBoost.Xpressiveでいけるはず。