erlang写中文注释的补丁

这段时间在整理网游的教程,在给服务器写文档的时候,发现erlang的edoc在生成文档的时候,如果使用的是中文的注释的话,就会失败,出现类似下面的错误:

       edoc: error in doclet 'edoc_doclet': {'EXIT',{no_translation,[{io,put_chars,[<0.31.0>,unicode,[[60,33,68,79,67,84,89|...],[45,47,47,87,51,67|...],[34],[],[62,10],[[[...]|...],[...]]]]},{edoc_lib,write_file,4},{edoc_doclet,source,9},{lists,foldl,3},{edoc_doclet,sources,5},{edoc_doclet,gen,6},{edoc_lib,run_plugin,5},{init,start_it,1}]}}.
{"init terminating in do_boot",error}

Crash dump was written to: erl_crash.dump
init terminating in do_boot (error)

在网上查了一下,发现也有人碰到这个问题,后来,在nabble论坛(该论坛有很多的erlang的问题及解决办法,补丁等)发现了解决办法:

1、获取erlang的源代码,ubuntu的话直接sudo apt-get install erlang-src

2、修改edoc的源代码:

修改edoc_lib:write_file/4的代码

file:open(File,[Write])

file:open(File,[Write,{encoding,utf8}])

修改edoc_tags:parse_tags/5的代码

text ->
   parse_tags(Ts,How,Env,Where,[T | Ts1]);

text ->
    Data = unicode:characters_to_list(list_to_binary(T#tag.data)),
    T2 = T#tag{data = Data},
    parse_tags(Ts, How, Env, Where, [T2 | Ts1]);

4、编译上述两个文件,然后覆盖掉原来的文件。这样就可以使用中文注释了。我一直用的是utf-8的编码,对于其他编码没有使用过

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据