197x #3 LT 発表資料
長時間バージョンのようなものが btronclub/20110122/presen.html にあります。
きしもと(Internetで見かける岸本さんはひらがなの法則)
id:metanest
@metanest や @metaneet は私ではありません
gravater
ruby で新しいエンコーディングのサポート
公式には「サポートの要望を出してくださいね」ということになっている。
でも...
以下のようなスクリプトが動く。
require "troncode"
open("sample.tad", "rb:TADTextBE") {|file|
s = file.read
}
構造体
static OnigEncodingType stateless_TADTextBE = {
&stateless_TADTextBE_mbc_enc_len,
"stateless-TADTextBE", /* name */
4, /* max byte length */
4, /* min byte length */
&stateless_TADTextBE_is_mbc_newline,
&stateless_TADTextBE_mbc_to_code,
&stateless_TADTextBE_code_to_mbclen,
&stateless_TADTextBE_code_to_mbc,
&stateless_TADTextBE_mbc_case_fold,
&stateless_TADTextBE_apply_all_case_fold,
&stateless_TADTextBE_get_case_fold_codes_by_str,
&stateless_TADTextBE_property_name_to_ctype,
&stateless_TADTextBE_is_code_ctype,
&stateless_TADTextBE_get_ctype_code_range,
&stateless_TADTextBE_left_adjust_char_head,
&stateless_TADTextBE_is_allowed_reverse_match
};
登録
rb_enc_register("stateless-TADTextBE", &stateless_TADTextBE);
<%
map = {
"00{00-20}" => :func_so, # Control
"{21-7e}{21-7e}" => :func_so, # A Zone
"{80-fd}{21-7e}" => :func_so, # B Zone
"{21-7e}{80-fd}" => :func_so, # C Zone
"{80-fd}{80-fd}" => :func_so, # D Zone
"fe{21-7e,80-fd}" => :func_so, # Script/Language Change
"fefe" => :func_si, # Script/Language Escape
}
transcode_generate_node(ActionMap.parse(map), "TADTextBE_decoder")
map = {
"{00,fe}{21-7e,80-fd}" => :func_so, # Script/Language Change
}
transcode_generate_node(ActionMap.parse(map), "TADTextBE_decoder_lang_escape")
%>
<%= transcode_generated_code %>
static const rb_transcoder
rb_TADTextBE_decoder = {
"TADTextBE", "stateless-TADTextBE", TADTextBE_decoder,
TRANSCODE_TABLE_INFO,
2, /* input_unit_length */
4, /* max_input */
4, /* max_output */
incompat_converter, /* asciicompat_type */
2, tadtext_init, tadtext_init, /* state_size, state_init, state_fini */
NULL, &fun_si_TADTextBE_decoder, NULL, &fun_so_TADTextBE_decoder
};