Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    66#   Copyright (C) 2008-2014 by TOPPERS Project
    77#--
    8 #   ä¸Šè¨˜è‘—作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    10 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    11 #   å¤‰ãƒ»å†é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    15 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    16 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20 #       è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    23 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24 #       ç”¨ã§ããªã„形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26 #       ã¨ï¼Ž
    27 #     (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    31 #     (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34 #         å ±å‘Šã™ã‚‹ã“と.
    35 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    40 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42 #       å
    43 è²¬ã™ã‚‹ã“と.
     8#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     9#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13#       スコード中に含まれていること.
     14#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17#       の無保証規定を掲載すること.
     18#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20#       と.
     21#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     23#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24#         報告すること.
     25#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29#       免責すること.
    4430
    45 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    46 ãŠ
    47 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    49 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    50 #   ã®è²¬ä»»ã‚’負わない.
     31#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35#   の責任を負わない.
    5136
    52 #   $Id: plugin.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     37#   $Id$
    5338#++
    5439
    55 #== class モジュール
    56 # ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
     40#== class モジュール
     41# ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
    5742class Plugin < Node
    58 #@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
     43#@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
    5944
    6045  PluginArgProc = {
     
    6550    super
    6651    @b_silent = false
    67     @locale = nil       # set_locale が呼び出されるまで nil となる
     52    @locale = nil       # set_locale が呼び出されるまで nil となる
    6853    @error_backlog = []
    6954  end
    7055
    7156  #=== Plugin#cdl_error
    72   # set_locale が呼び出されるまで @error_backlog に保存し保留する
     57  # set_locale が呼び出されるまで @error_backlog に保存し保留する
    7358  def cdl_error *arg
    7459    if @locale then
     
    7964  end
    8065
    81   #=== locale を設定する
    82   # Node は initialize で locale を設定するが、plugin は parse とは
    83   # 異なるタイミング new されるため、locale を再設定する
    84   # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
     66  #=== locale を設定する
     67  # Node は initialize で locale を設定するが、plugin は parse とは
     68  # 異なるタイミング new されるため、locale を再設定する
     69  # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
    8570  def set_locale locale
    8671    @locale = locale
     
    9075  end
    9176
    92 ### 意味解析段階で呼び出されるメソッド ###
    93   #===  CDL ファイルの生成
    94   #      typedef, signature, celltype, cell のコードを生成
    95   #      重複して生成してはならない
    96   #      すでに生成されている場合は出力しないこと。
    97   #      もしくは同名の import により、重複を避けること。
    98   #file::        FILE       ç”Ÿæˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«
     77### 意味解析段階で呼び出されるメソッド ###
     78  #===  CDL ファイルの生成
     79  #      typedef, signature, celltype, cell のコードを生成
     80  #      重複して生成してはならない
     81  #      すでに生成されている場合は出力しないこと。
     82  #      もしくは同名の import により、重複を避けること。
     83  #file::        FILE       生成するファイル
    9984  def gen_cdl_file file
    10085  end
    10186
    10287
    103 ### コード生段階で呼び出されるメソッド ###
    104   #=== プラグインは gen_ep_func を提供するか
    105   # gen_ep_func 定義   â‡’ テンプレートではない、セルタイプコード(tCelltype.c)を生成
    106   # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
     88### コード生段階で呼び出されるメソッド ###
     89  #=== プラグインは gen_ep_func を提供するか
     90  # gen_ep_func 定義   ⇒ テンプレートではない、セルタイプコード(tCelltype.c)を生成
     91  # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
    10792  def gen_ep_func?
    10893    self.class.method_defined?( :gen_ep_func_body )
    10994  end
    11095
    111   #===  受け口関数の本体(C言語)を生成する
    112   #     ãƒ—ラグインの場合、変更するå¿
    113 è¦ã®ãªã„セルタイプコードを生成する
    114   #     ã“のメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
    115   #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
    116   #file::           FILE        出力å
    117 ˆãƒ•ã‚¡ã‚¤ãƒ« (tCelltype.c)
     96  #===  受け口関数の本体(C言語)を生成する
     97  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     98  #     このメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
     99  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
     100  #file::           FILE        出力先ファイル (tCelltype.c)
    118101  #b_singleton::    bool        true if singleton
    119102  #ct_name::        Symbol
     
    127110#  end
    128111
    129   #===  受け口関数の preamble (C言語)を生成する
    130   #     å¿
    131 è¦ãªã‚‰ preamble 部に出力する
    132   #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
    133   #file::           FILE        出力å
    134 ˆãƒ•ã‚¡ã‚¤ãƒ«
     112  #===  受け口関数の preamble (C言語)を生成する
     113  #     必要なら preamble 部に出力する
     114  #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
     115  #file::           FILE        出力先ファイル
    135116  #b_singleton::    bool        true if singleton
    136117  #ct_name::        Symbol
    137118  #global_ct_name:: string
    138119  def gen_preamble( file, b_singleton, ct_name, global_ct_name )
    139     # デフォルトでは何も出力しない
    140   end
    141 
    142   #===  受け口関数の postamble (C言語)を生成する
    143   #     å¿
    144 è¦ãªã‚‰ postamble 部に出力する
    145   #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
    146   #file::           FILE        出力å
    147 ˆãƒ•ã‚¡ã‚¤ãƒ«
     120    # デフォルトでは何も出力しない
     121  end
     122
     123  #===  受け口関数の postamble (C言語)を生成する
     124  #     必要なら postamble 部に出力する
     125  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
     126  #file::           FILE        出力先ファイル
    148127  #b_singleton::    bool        true if singleton
    149128  #ct_name::        Symbol
    150129  #global_ct_name:: string
    151130  def gen_postamble( file, b_singleton, ct_name, global_ct_name )
    152     # デフォルトでは何も出力しない
    153   end
    154 
    155   #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
    156   # どのセルタイプかは cell.get_celltype で分かる
     131    # デフォルトでは何も出力しない
     132  end
     133
     134  #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
     135  # どのセルタイプかは cell.get_celltype で分かる
    157136  #
    158   #file::           FILE        出力å
    159 ˆãƒ•ã‚¡ã‚¤ãƒ«
     137  #file::           FILE        出力先ファイル
    160138  #b_singleton::    bool        true if singleton
    161139  #ct_name::        Symbol
    162140  #global_ct_name:: string
    163141  def new_cell cell
    164     # デフォルトでは何もしない
    165   end
    166 
    167 ### プラグイン引数の解釈 ###
     142    # デフォルトでは何もしない
     143  end
     144
     145### プラグイン引数の解釈 ###
    168146  def parse_plugin_arg
    169147    arg = @plugin_arg_str.dup
    170148
    171     # 改行を消す
     149    # 改行を消す
    172150    arg.gsub!( /\\\n/, "" )
    173151
    174152    while arg != ""
    175153
    176       # 前の空白読み飛ばす
     154      # 前の空白読み飛ばす
    177155      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    178156
    179       #  識別子取得
     157      #  識別子取得
    180158      if arg =~ /\A[a-zA-Z_]\w*/ then
    181159        ident = $~
     
    186164      end
    187165     
    188       # 前の空白読み飛ばす
     166      # 前の空白読み飛ばす
    189167      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    190168
     
    196174      end
    197175
    198       # 前の空白読み飛ばす
     176      # 前の空白読み飛ばす
    199177      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
    200178
    201       # 右辺文字列
    202       if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
    203         rhs = $1
    204         remain = $'
    205       elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
    206         rhs = $1
    207         remain = $'
    208       elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
    209         rhs = $1
    210         remain = $'
    211       elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
    212         rhs = $1
    213         remain = $'
    214       elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
     179      # 右辺文字列
     180      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
     181        rhs = $1
     182        remain = $'
     183      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
     184        rhs = $1
     185        remain = $'
     186      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
     187        rhs = $1
     188        remain = $'
     189      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
     190        rhs = $1
     191        remain = $'
     192      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
    215193        rhs = $1
    216194        remain = $'
    217195      # elsif arg =~ /\A(.*?)\s*$/ then
    218       elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
    219         rhs = $1
    220         remain = $'
    221       elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
    222         rhs = $1
    223         remain = $'
    224       elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
    225         rhs = $1
    226         remain = $'
    227       elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
    228         rhs = $1
    229         remain = $'
    230       elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
     196      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
     197        rhs = $1
     198        remain = $'
     199      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
     200        rhs = $1
     201        remain = $'
     202      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
     203        rhs = $1
     204        remain = $'
     205      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
     206        rhs = $1
     207        remain = $'
     208      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
    231209        rhs = $1
    232210        remain = $'
     
    234212        rhs = $1
    235213        remain = $'
    236         # 前の空白読み飛ばす
     214        # 前の空白読み飛ばす
    237215        rhs.sub!( /\A\s*(.*)\s*\z/, '\1')
    238216      elsif arg =~ /\A(.*?)\s*\z/ then
     
    244222      end
    245223
    246       # 0文字の文字列を to_sym すると例外発生するので空白文字とする
     224      # 0文字の文字列を to_sym すると例外発生するので空白文字とする
    247225      if rhs == "" then
    248226        rhs = " "
    249227      end
    250228
    251       arg = remain         # arg の残りの部分
    252       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
    253 
    254       # \ を外す
    255       rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意!
     229      arg = remain         # arg の残りの部分
     230      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
     231
     232      # \ を外す
     233      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意!
    256234      # print "parse_plugin_arg:  #{ident} #{rhs}\n"
    257235      @plugin_arg_list[ ident ] = rhs
     
    262240  end
    263241
    264   #=== プラグイン引数をチェックする
    265   # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
    266   # 古い用法:子クラスでオーバーライドし、引数識別子が正しいかチェックする
    267   #ident:: string: 引数識別子
    268   #rhs:: string: 右辺文字列
     242  #=== プラグイン引数をチェックする
     243  # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
     244  # 古い用法:子クラスでオーバーライドし、引数識別子が正しいかチェックする
     245  #ident:: string: 引数識別子
     246  #rhs:: string: 右辺文字列
    269247  def check_plugin_arg( ident, rhs )
    270248
     
    291269  end
    292270
    293   #=== プラグインのメッセージ出力
     271  #=== プラグインのメッセージ出力
    294272  def print_msg( msg )
    295273    if @b_silent == true then
     
    299277  end
    300278
    301   #=== プラグイン引数 silent
     279  #=== プラグイン引数 silent
    302280  def set_silent rhs
    303281    if rhs == "true" || rhs == nil then
     
    307285end
    308286
    309 #== 出力文字列を EUC から出力ファイルに convert する
    310 # tecsgen のソースコードは EUC で記述されている
    311 # これを、出力ファイルの文字コードに変換して出力する
     287#== 出力文字列を EUC から出力ファイルに convert する
     288# tecsgen のソースコードは EUC で記述されている
     289# これを、出力ファイルの文字コードに変換して出力する
    312290#
    313 # generate.rb で出力するものは message.rb で変換している
    314 # generate.rb で出力するものは APPFile クラスを使用している
    315 # mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
     291# generate.rb で出力するものは message.rb で変換している
     292# generate.rb で出力するものは APPFile クラスを使用している
     293# mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
    316294class CFile
    317295  def self.open( path, mode )
Note: See TracChangeset for help on using the changeset viewer.