2011-02-01から1ヶ月間の記事一覧

Coro で Balking パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Balking パターンを実装。Balking パターン途中で止めること(Balkする=途中で止める)。この例だと「保存しようとしたけど、既に保存されていたらやめちゃおう。」 use str…

Coro で Guarded-Suspension パターン (Coro::Signal使用)

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 の Guarded-Suspension パターンを Coro で実装。前回は Coro::Channelを使ったが、Coro::Channelを使うとキューが一杯になると、ブロックしてしまう。 use strict; use warnings; use Coro…

Coro で Guarded-Suspension パターン (Coro::Channel使用)

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 の Guarded-Suspension パターンを Coro で実装。Guarded-Suspension パターンは要するにメッセージ送受信。Coro::Channel を使ったが、 Coro::Channel を使うと厳密には、Producer-Consume…

GNU PIC の出力画像を綺麗にする

GNU PIC の出力画像が綺麗でないことが不満だったが、一旦SVGファイルにしてから、png などの画像にすれば綺麗になることがわかった。 今までの画像出力 文字が滲んでいるし、曲線のギザギザも気になる。フォントを変えても文字の滲みは改善しない。 SVG に…

Streaming API で XMLの読み出し

Libxml2 の Streaming API っていうのは、 XML を頭から解析するときに役立つ API。SAXと違ってハンドラを登録する必要がないから楽。 #include <stdio.h> #include <libxml/tree.h> #include <libxml/xmlreader.h> void processNode(xmlTextReaderPtr reader) { const xmlChar *name; const xmlChar *val</libxml/xmlreader.h></libxml/tree.h></stdio.h>…

Writing API で XMLの書き出し

Libxml2 の Writing API っていうのは、 XML を頭から出力するときに役立つ API。 #include <stdio.h> #include <string.h> #include <libxml/encoding.h> #include <libxml/xmlwriter.h> #define MY_ENCODING "UTF-8" /*****************************************************************************************/ /*</libxml/xmlwriter.h></libxml/encoding.h></string.h></stdio.h>…

属性の削除

xmlHasPropで属性を持っているか確認しあと、xmlRemovePropでその属性を削除。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int del_attribute(xmlNodeSetPtr nodes) { xmlAttrPtr attr; int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

ノードの削除

xmlUnlinkNodeでノードを切り話したあと、xmlFreeで削除する。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int del_node(xmlNodeSetPtr nodes) { int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(i = 0; i < nodes->nodeNr; ++i) { xmlU</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

属性の追加

xmlNewPropで属性を追加できる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_attribute(xmlNodeSetPtr nodes) { int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(i = 0; i < nodes->nodeNr; ++i) { xmlNewProp(nodes->nodeTab[i</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

テキストの追加

テキストを追加するには、ノードを追加するのと同じようにxmlNewNodeでノードを作って、xmlAddChildで親にくっつればいい。テキストもツリーの一部に過ぎないので。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_text(xmlNodeSetPtr nodes) {</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

ノードの追加

ノードを追加するには、xmlNewNodeでノードを作って、xmlAddChildで親にくっつればいい。以下、XPathでノードを検索して、そのノードの下に新しいノードをくっけている。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_node(xmlNodeSetPtr nod</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

Libxml2 で XPath

xmlXPathEvalExpression()でXPathに一致したノードのリストを取得できる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> void trim(char *str) { int i; for (i = strlen(str) - 1; 0 <= i; i--) { if ((str[i] == '\r') || (str[i] == '\n') || (str</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

DOM で tree walk (Libxml2)

DOM で XML のツリー構造を解析する。ノードはリストになって、同じ階層のノードは node->next で、子のノードは cur_node->children で辿ることができる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> void trim(char *str) { int i; for (i = strlen(str) - </libxml/parser.h></libxml/tree.h></string.h></stdio.h>…