Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 321)
@@ -6,55 +6,40 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: plugin.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#== class ã¢ã¸ã¥ã¼ã«
-# ThroughPlugin, SignaturePlugin, CelltypePlugin ã« include ãã
+#== class モジュール
+# ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
 class Plugin < Node
-#@error_backlog:: [msg1, msg2, ... ]   @locale ãè¨­å®ãããåã«çºçããã¨ã©ã¼
+#@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
 
   PluginArgProc = {
@@ -65,10 +50,10 @@
     super
     @b_silent = false
-    @locale = nil       # set_locale ãå¼ã³åºãããã¾ã§ nil ã¨ãªã
+    @locale = nil       # set_locale が呼び出されるまで nil となる
     @error_backlog = []
   end
 
   #=== Plugin#cdl_error
-  # set_locale ãå¼ã³åºãããã¾ã§ @error_backlog ã«ä¿å­ãä¿çãã
+  # set_locale が呼び出されるまで @error_backlog に保存し保留する
   def cdl_error *arg
     if @locale then
@@ -79,8 +64,8 @@
   end
 
-  #=== locale ãè¨­å®ãã
-  # Node ã¯ initialize ã§ locale ãè¨­å®ããããplugin ã¯ parse ã¨ã¯
-  # ç°ãªãã¿ã¤ãã³ã° new ããããããlocale ãåè¨­å®ãã
-  # ãã®ã¡ã½ããã2åº¦å¼ã³åºãã¨ @error_backlog ã®ã¨ã©ã¼ã2åº¦åºåããã¦ãã¾ã
+  #=== locale を設定する
+  # Node は initialize で locale を設定するが、plugin は parse とは
+  # 異なるタイミング new されるため、locale を再設定する
+  # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
   def set_locale locale
     @locale = locale
@@ -90,30 +75,28 @@
   end
 
-### æå³è§£ææ®µéã§å¼ã³åºãããã¡ã½ãã ###
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+### 意味解析段階で呼び出されるメソッド ###
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
   def gen_cdl_file file
   end
 
 
-### ã³ã¼ãçæ®µéã§å¼ã³åºãããã¡ã½ãã ###
-  #=== ãã©ã°ã¤ã³ã¯ gen_ep_func ãæä¾ããã
-  # gen_ep_func å®ç¾©   â ãã³ãã¬ã¼ãã§ã¯ãªããã»ã«ã¿ã¤ãã³ã¼ã(tCelltype.c)ãçæ 
-  # gen_ep_func æªå®ç¾© â ãã³ãã¬ã¼ã(tCelltype_templ.c)ãçæ
+### コード生段階で呼び出されるメソッド ###
+  #=== プラグインは gen_ep_func を提供するか
+  # gen_ep_func 定義   ⇒ テンプレートではない、セルタイプコード(tCelltype.c)を生成 
+  # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
   def gen_ep_func?
     self.class.method_defined?( :gen_ep_func_body )
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã§ããã°ããã©ã°ã¤ã³ã¯ã»ã«ã¿ã¤ãã³ã¼ããçæããªã (éå¸¸éããã³ãã¬ã¼ããçæãã)
-  #      gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã« (tCelltype.c)
+  #===  受け口関数の本体(C言語)を生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #     このメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
+  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル (tCelltype.c)
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -127,55 +110,50 @@
 #  end
 
-  #===  åãå£é¢æ°ã® preamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã preamble é¨ã«åºåãã
-  #      gen_cdl_file ã®ä¸­ã§ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の preamble (C言語)を生成する
+  #     必要なら preamble 部に出力する
+  #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def gen_preamble( file, b_singleton, ct_name, global_ct_name )
-    # ããã©ã«ãã§ã¯ä½ãåºåããªã
-  end
-
-  #===  åãå£é¢æ°ã® postamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã postamble é¨ã«åºåãã
-  #      gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+    # デフォルトでは何も出力しない
+  end
+
+  #===  受け口関数の postamble (C言語)を生成する
+  #     必要なら postamble 部に出力する
+  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def gen_postamble( file, b_singleton, ct_name, global_ct_name )
-    # ããã©ã«ãã§ã¯ä½ãåºåããªã
-  end
-
-  #=== gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«æ°ããã»ã«ãçæããã
-  # ã©ã®ã»ã«ã¿ã¤ããã¯ cell.get_celltype ã§åãã
+    # デフォルトでは何も出力しない
+  end
+
+  #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
+  # どのセルタイプかは cell.get_celltype で分かる
   #
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def new_cell cell
-    # ããã©ã«ãã§ã¯ä½ãããªã
-  end
-
-### ãã©ã°ã¤ã³å¼æ°ã®è§£é ###
+    # デフォルトでは何もしない
+  end
+
+### プラグイン引数の解釈 ###
   def parse_plugin_arg
     arg = @plugin_arg_str.dup
 
-    # æ¹è¡ãæ¶ã
+    # 改行を消す
     arg.gsub!( /\\\n/, "" )
 
     while arg != ""
 
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
-      #  è­å¥å­åå¾
+      #  識別子取得
       if arg =~ /\A[a-zA-Z_]\w*/ then
         ident = $~
@@ -186,5 +164,5 @@
       end
       
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
@@ -196,37 +174,37 @@
       end
 
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
-      # å³è¾ºæå­å
-      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || ã«ã [,$] ã«ãã§ããªãã£ã
+      # 右辺文字列
+      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
         rhs = $1
         remain = $'
       # elsif arg =~ /\A(.*?)\s*$/ then
-      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || ã«ã [,$] ã«ãã§ããªãã£ã
+      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
         rhs = $1
         remain = $'
@@ -234,5 +212,5 @@
         rhs = $1
         remain = $'
-        # åã®ç©ºç½èª­ã¿é£ã°ã
+        # 前の空白読み飛ばす
         rhs.sub!( /\A\s*(.*)\s*\z/, '\1')
       elsif arg =~ /\A(.*?)\s*\z/ then
@@ -244,14 +222,14 @@
       end
 
-      # 0æå­ã®æå­åã to_sym ããã¨ä¾å¤çºçããã®ã§ç©ºç½æå­ã¨ãã
+      # 0文字の文字列を to_sym すると例外発生するので空白文字とする
       if rhs == "" then
         rhs = " "
       end
 
-      arg = remain         # arg ã®æ®ãã®é¨å
-      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # åã®ç©ºç½èª­ã¿é£ã°ã
-
-      # \ ãå¤ã
-      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ããã§ $' ãå¤ãããã¨ã«æ³¨æï¼
+      arg = remain         # arg の残りの部分
+      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
+
+      # \ を外す
+      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意！
       # print "parse_plugin_arg:  #{ident} #{rhs}\n"
       @plugin_arg_list[ ident ] = rhs
@@ -262,9 +240,9 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ°ããã§ãã¯ãã
-  # @plugin_arg_check_proc_tab ã«å¾ã£ã¦ãã©ã°ã¤ã³å¼æ°ããã§ãã¯ããã
-  # å¤ãç¨æ³ï¼å­ã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ãããå¼æ°è­å¥å­ãæ­£ããããã§ãã¯ãã
-  #ident:: string: å¼æ°è­å¥å­
-  #rhs:: string: å³è¾ºæå­å
+  #=== プラグイン引数をチェックする
+  # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
+  # 古い用法：子クラスでオーバーライドし、引数識別子が正しいかチェックする
+  #ident:: string: 引数識別子
+  #rhs:: string: 右辺文字列
   def check_plugin_arg( ident, rhs )
 
@@ -291,5 +269,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã®ã¡ãã»ã¼ã¸åºå
+  #=== プラグインのメッセージ出力
   def print_msg( msg )
     if @b_silent == true then
@@ -299,5 +277,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° silent
+  #=== プラグイン引数 silent
   def set_silent rhs
     if rhs == "true" || rhs == nil then
@@ -307,11 +285,11 @@
 end
 
-#== åºåæå­åã EUC ããåºåãã¡ã¤ã«ã« convert ãã
-# tecsgen ã®ã½ã¼ã¹ã³ã¼ãã¯ EUC ã§è¨è¿°ããã¦ãã
-# ããããåºåãã¡ã¤ã«ã®æå­ã³ã¼ãã«å¤æãã¦åºåãã
+#== 出力文字列を EUC から出力ファイルに convert する
+# tecsgen のソースコードは EUC で記述されている
+# これを、出力ファイルの文字コードに変換して出力する
 #
-# generate.rb ã§åºåãããã®ã¯ message.rb ã§å¤æãã¦ãã
-# generate.rb ã§åºåãããã®ã¯ APPFile ã¯ã©ã¹ãä½¿ç¨ãã¦ãã
-# mikan: CFile ã§åºåãããã®ã« factory ã§è¿½è¨ã§ããªã (cdl ãã¡ã¤ã«ã®å ´åãè¿½è¨ã§ãã¦ãæå³ããªã)
+# generate.rb で出力するものは message.rb で変換している
+# generate.rb で出力するものは APPFile クラスを使用している
+# mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
 class CFile
   def self.open( path, mode )
