RubyでFreemindを操作するライブラリ
FreemindはXML形式のファイルなのでRubyだとNokogiriを使えば特に困らないのですが Freemindでのノード、属性、アイコン等がXMLとしての属性と混乱しやすいので Freemind用の拡張をNokogiriに加えたものを作成しました。
細かな処理は作り込んでいません。Freemindのファイルを読書きするのに必要充分な 機能はあると思いますので後は組み合わせて利用して下さい。
FreemindクラスとFreemind_Extensionモジュールから構成されています。
FreemindクラスはFreemindのファイル処理を担当しopenで開いて処理を実行し、 書込む必要があればsaveで書き込みを行ないます。
Freemind_ExtensionはNokogiriに組み込んでいます。ですから、Nokogiriのオブジェクトに対して 拡張機能で用意されたFreemind用の fme_... という手続き群が使用できるようになります。 詳細はドキュメントを参照してください。
モジュール名 | 概要 |
---|---|
freemind.rb | Freemind拡張用モジュール |
sample.rb | Freemind拡張用モジュールの使用例 |
test_freemind.rb | Freemind拡張用モジュール UNITテスト |
RDOC | Freemind拡張用モジュール ドキュメント |
Freemind の アイコン一覧表
attach | back | bell | bookmark |
broken-line | button_cancel | button_ok | calendar |
clanbomber | clock | clock2 | closed |
decrypted | desktop_new | down | edit |
encrypted | family | fema | female1 |
female2 | flag-black | flag-blue | flag-green |
flag-orange | flag-pink | flag-yellow | flag |
folder | forward | freemind_butterfly | full-0 |
full-1 | full-2 | full-3 | full-4 |
full-5 | full-6 | full-7 | full-8 |
full-9 | go | gohome | group |
help | hourglass | idea | info |
kaddressbook | kmail | knotify | korn |
ksmiletris | launch | licq | list |
male1 | male2 | messagebox_warning | |
password | pencil | penguin | prepare |
redo | smiley-angry | smiley-neutral | smiley-oh |
smily_bad | stop-sign | stop | up |
wizard | xmag | yes |
RubyでFreemindを操作するライブラリの使用例
#! ruby -EWindows-31J # -*- mode:ruby; coding:Windows-31J -*- require './freemind' def dump_node(node,level) print "#{level}node: #{node.fme_get_text} #{node.fme_get_xml_attr('id')} " print ", RichContent" if node.fme_get_richcontent('NODE') print ", NOTE" if node.fme_get_richcontent('NOTE') print "\n" level += ' ' if t = node.fme_get_remind print "#{level}Remind: #{t}\n" end node.fme_attributes.each do |name,value| case name when 'arrowlink' value.each{|dt| print "#{level}ArrowLink to #{dt[1]}, color=#{dt[2]}\n"} when 'attribute' value.each{|dt| print "#{level}Attribute [ #{dt[1]} = #{dt[2]} ]\n"} when 'icon' value.each{|dt| print "#{level}#{name} [ #{dt[1]} ]\n"} when 'hook' value.each do |dt| if dt[1] !~ /TimeManagementReminder/i print "#{level}#{name} [ #{dt[1]} ]\n" end end else print "#{level}unknown #{name}\n" end end # print node.fme_get_richcontent('NODE') # print node.fme_get_richcontent('NOTE') node.fme_children.each do |cnode| dump_node(cnode,level) end end file_name = 'sample.mm' File.delete(file_name) if File.exist?(file_name) # ファイルが無ければrootノードだけを持つ初期状態としてopenされる。 Freemind.open(file_name) do |fm,root| c1 = root.fme_add_child('Child1') c2 = root.fme_add_child('Child2') c2.fme_add_icon('idea') c2_1 = c2.fme_add_child('') c2_1.fme_set_richcontent('NODE','<html><head /><body><p>RichContent Node</p><table border="1"><tr><td><p>1</p></td><td><p>2</p></td></tr></table></body></html>') c2_1.fme_set_richcontent('NOTE','<html><head /><body><p>test code</p><table border="1"><tr><td><p>x</p></td><td><p>y</p></td></tr></table></body></html>') c2_1.fme_add_icon('button_ok') c2_1.fme_add_remind(Time.new(2012,1,1,9,0,0)) c2_1.fme_add_attribute('x','1') c1.fme_add_arrowlink(c2,'#ff0000') dump_node(root,'') root.search("//node/icon[@BUILTIN='idea']/..").each do |node| if [] == node.fme_attribute?('HasIdea') node.fme_add_attribute('HasIdea','Yes') end print "#{node.fme_get_text} has Idea icon ,HasIdea attribute = #{node.fme_attribute?('HasIdea')}\n" end fm.save end
基本事項 ← : 操作ライブラリ : → 文書生成