Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsmerge.rb
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsmerge.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 8 8 # Copyright (C) 2008-2017 by TOPPERS Project 9 9 #-- 10 # ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 # å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 # ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 # è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 # ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 # ã¨ï¼ 29 # (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 # (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 # å ±åãããã¨ï¼ 37 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 # 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 # å 45 責ãããã¨ï¼ 10 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 11 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 # スコード中に含まれていること. 16 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 # の無保証規定を掲載すること. 20 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 # と. 23 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 # 報告すること. 27 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 # 免責すること. 46 32 # 47 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 # ã®è²¬ä»»ãè² ããªãï¼ 33 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 # の責任を負わない. 53 38 # 54 39 # $Id$ 55 40 #++ 56 41 57 #= tecsgen : TECS ã®ãã¼ã¸ã£42 #= tecsgen : TECS のマージャ 58 43 # 59 #Authors:: 大山 åå¸44 #Authors:: 大山 博司 60 45 #Version:: 61 46 #Copyright:: Copyright (C) TOPPERS Project, 2008-2017. All rights reserved. 62 #License:: TOPPERS ã©ã¤ã»ã³ã¹ã«æºæ47 #License:: TOPPERS ライセンスに準拠 63 48 64 49 =begin 65 tecsmerge ã¯ãã³ãã¬ã¼ããã¡ã¤ã«ãå 66 ã«ä½æãããã»ã«ã¿ã¤ãã³ã¼ãï¼å«ã¤ã³ã©ã¤ã³é¢æ°ãè¨è¿°ããã»ã«ã¿ã¤ãã¤ã³ã©ã¤ã³ãããï¼ãä¿å®ãããã®ã§ããã 67 ã»ã«ã¿ã¤ãã«ä»¥ä¸ã®æ¹å¤ãå ããããå ´åã«å¯¾å¿ããã 68 ã»åãå£é¢æ°ãå¢ãã 69 ã»åãå£ã®ååãå¤æ´ããã 70 ã»åãå£é¢æ°ã®ååãå¤æ´ããã 50 tecsmerge はテンプレートファイルを元に作成されたセルタイプコード(含インライン関数を記述したセルタイプインラインヘッダ)を保守するものである。 51 セルタイプに以下の改変が加えられた場合に対応する。 52 ・受け口関数が増えた 53 ・受け口の名前が変更された 54 ・受け口関数の名前が変更された 71 55 72 56 % tecsmerge source_dir dest_dir … … 76 60 % tecsmerge -p old_name:new_name source_file dest_dir 77 61 78 source_file ã®åå㯠_teml.c, _templ.h ã§çµãã£ã¦ããªãã¦ã¯ãªããªã 79 dest_file 㯠source_file ã® _templ ãåãé¤ããååã§ãªãã¦ã¯ãªããªã 80 dest_file ãåå¨ããªãå ´åã_templ ãåãé¤ããååã§ã³ãã¼ããã ãã§ãã 81 82 以ä¸ã®ãã¼ã¯ã¼ãã å«ãè¡ãæ¢ã 83 84 0) å 85 é 62 source_file の名前は _teml.c, _templ.h で終わっていなくてはならない 63 dest_file は source_file の _templ を取り除いた名前でなくてはならない 64 dest_file が存在しない場合、_templ を取り除いた名前でコピーするだけである 65 66 以下のキーワードを 含む行を探す 67 68 0) 先頭 86 69 1) /* #[<PREAMBLE>]#, 87 70 2) * #[</PREAMBLE>]# … … 94 77 7) /* #[<POSTAMBLE>]# 95 78 8) * #[</POSTAMBLE>]# 96 9) çµãã97 98 ä¸è¨ã®ãã¡ 1), 3), 5), 7) ãéå§ãã¼ã¯ã¼ãã¨å¼ã¶ã 99 ãªããç¹ã«æãã®ãªãå ´åã9) ãéå§ãã¼ã¯ã¼ãã«å«ãã 100 101 ååã®å¤æ´ 102 103 a) åãå£åã®å¤æ´79 9) 終わり 80 81 上記のうち 1), 3), 5), 7) を開始キーワードと呼ぶ。 82 なお、特に断りのない場合、9) も開始キーワードに含む。 83 84 名前の変更 85 86 a) 受け口名の変更 104 87 105 88 -p old_port_name:new_port_name 106 89 107 b) åãå£é¢æ°åã®å¤æ´90 b) 受け口関数名の変更 108 91 109 92 -f old_port_name:new_port_name 110 93 111 old_port_name, new_port_name ã¯ã次ã®å½¢å¼ã§ãªãã¦ã¯ãªããªãã 112 113 åãå£å + '_' + é¢æ°å 114 115 116 i) ãããï¼ 117 118 0) ã¨éå§ãã¼ã¯ã¼ãã®é 119 120 ii) ãããï¼ 121 122 1) ã¨éå§ãã¼ã¯ã¼ãã®é 123 124 é常ããããè¤æ°åå¨ãããã¨ã¯ãªãããè¤æ°åå¨ããå ´åããã¹ã¦ãã¡ã¤ã« 125 ã®å 126 é ã«åºåãããã 127 128 iii) åãå£ããã 129 130 3) ã¨éå§ãã¼ã¯ã¼ãã®é 131 132 åãå£ãããã¯ãå¾ç¶ã®åãå£é¢æ°ã®åãå£ã表ããã®ã¨ä»®å®ãããã 133 åãå£ãããã¯ãéè¦ã§ã¯ãªãã 134 135 iv) åãå£é¢æ° 136 137 5) ã¨éå§ãã¼ã¯ã¼ãã®é 94 old_port_name, new_port_name は、次の形式でなくてはならない。 95 96 受け口名 + '_' + 関数名 97 98 99 i) ヘッダ1 100 101 0) と開始キーワードの間 102 103 ii) ヘッダ2 104 105 1) と開始キーワードの間 106 107 通常、これが複数存在することはないが、複数存在した場合、すべてファイル 108 の先頭に出力される。 109 110 iii) 受け口ヘッダ 111 112 3) と開始キーワードの間 113 114 受け口ヘッダは、後続の受け口関数の受け口を表すものと仮定される。 115 受け口ヘッダは、重要ではない。 116 117 iv) 受け口関数 118 119 5) と開始キーワードの間 138 120 139 121 =end … … 142 124 $n_err = 0 143 125 $b_show = false 144 $b_exist = false # ã³ãã¼å 145 ã«ãã¡ã¤ã«ãããå ´åã®ã¿ãã¼ã¸ 146 $old_mode = false # old_mode (é¢æ°æ¬ä½ã¨ã㦠/<ENTRY_FUNC> ã®ä»£ããã« '{' ã使ã 126 $b_exist = false # コピー先にファイルがある場合のみマージ 127 $old_mode = false # old_mode (関数本体として /<ENTRY_FUNC> の代わりに '{' を使う 147 128 148 129 #2.0 … … 254 235 def self.rewrite_DELIMITERS delimiters 255 236 delimiters.each{ |stat, stat_info| 256 s = stat_info[0].gsub( /([\*\[\]])/, "\\\\\\1" ) # *, [, ] ã®åã« \\ ãæ¿å 257 ¥ 258 s.gsub!( /\s*\w*_NAME/, "\\s*(\\w*)" ) # ..._NAME ã (w*) ã«å¤æ´ 259 s = "^" + s # ^ ãå 260 é ã«æ¿å 261 ¥ 237 s = stat_info[0].gsub( /([\*\[\]])/, "\\\\\\1" ) # *, [, ] の前に \\ を挿入 238 s.gsub!( /\s*\w*_NAME/, "\\s*(\\w*)" ) # ..._NAME を (w*) に変更 239 s = "^" + s # ^ を先頭に挿入 262 240 stat_info[2] = Regexp.new( s ) 263 241 # p stat_info[2] … … 269 247 rewrite_DELIMITERS @@DELIMITERS_FUNC_BY_BRACKET 270 248 271 #=== ã¢ã¼ãã«å¾ã DELIMITERS ã« DELIMITERS_FUNC_BY_* ããã¼ã¸ãã249 #=== モードに従い DELIMITERS に DELIMITERS_FUNC_BY_* をマージする 272 250 # mode :OLD_FUNC_BODY, :NEW_FUNC_BODY 273 251 def self.merge_DELIMITERS mode … … 303 281 line_no += 1 304 282 # p "L: #{line}" 305 b_delim = false # ããªãã¿ãã¼ã¯ã¼ãã®è¡283 b_delim = false # デリミタキーワードの行 306 284 @@DELIMITERS.each { |next_stat,stat_info| 307 285 308 286 next if next_stat == :HEAD || ( next_stat == :EOF && line != nil ) 309 # #1002 tecsmerge ã®éåãå£é¢æ° (POSTAMBLEé¨) ã®è¡é ã« '{' ãããã¨ã¨ã©ã¼ã«ãªã287 # #1002 tecsmerge の非受け口関数 (POSTAMBLE部) の行頭に '{' があるとエラーになる 310 288 if (! $old_mode) && ( /^\{/ =~ line ) && ( stat == :PREAMBLE_BODY || stat == :POSTAMBLE_BODY ) 311 289 p line + " next_stat=" + next_stat.to_s + "stat=" + stat.to_s … … 339 317 end 340 318 341 case stat # åã®ç¶æ 342 319 case stat # 前の状態 343 320 when :HEAD 344 321 @head = part … … 356 333 when :ENTRY_FUNC_COMMENT 357 334 func_name = arg.to_sym 358 if @entry_port[ port_name ] then # nil ãªãæ¢ã«ã¨ã©ã¼335 if @entry_port[ port_name ] then # nil なら既にエラー 359 336 @entry_port[ port_name ].entry_func_comment[ func_name ] = part 360 337 @entry_port[ port_name ].entry_func_array << func_name 361 338 end 362 339 when :ENTRY_FUNC_BODY, :ENTRY_FUNC_BODY2 363 if @entry_port[ port_name ] then # nil ãªãæ¢ã«ã¨ã©ã¼340 if @entry_port[ port_name ] then # nil なら既にエラー 364 341 @entry_port[ port_name ].entry_func_body[ func_name ] = part 365 342 end … … 380 357 381 358 stat = next_stat 382 arg = $1 # arg ã«åã£ã¦ãã359 arg = $1 # arg に取っておく 383 360 # p stat, arg 384 361 break … … 394 371 395 372 def check template 396 # template ã«ãªããã®ããã§ãã¯373 # template にないものをチェック 397 374 @entry_port.each{ |port_name, entry_port| 398 375 temp_entry_port = template.entry_port[port_name] … … 415 392 PortRenamer.get_list.each{ |pon,pr| 416 393 417 # 対象åãå£ãæã394 # 対象受け口を捜す 418 395 ep = @entry_port[pon] 419 396 if ep == nil then … … 422 399 end 423 400 424 # ãã¼ãã®rename425 pnn = pr.new_port_name # ç½®æå¾ã®åå401 # ポートの rename 402 pnn = pr.new_port_name # 置換後の名前 426 403 if pnn then 427 # ç½®æããååãããã°ãç»é²ããªãã404 # 置換する名前があれば、登録しなおす 428 405 renamed_entry_port[pnn] = @entry_port[pon] 429 406 @entry_port.delete pon 430 407 end 431 408 432 # æå®ãããé¢æ°ã®ç½®æ409 # 指定された関数の置換 433 410 renamed_func_comment = {} 434 411 renamed_func_body = {} … … 453 430 ep.entry_func_body.merge! renamed_func_body 454 431 455 # ãã¼ãåã®å¤æ´ã«ããé¢æ°åã®ç½®æ432 # ポート名の変更による関数名の置換 456 433 renamed_func_comment = {} 457 434 renamed_func_body = {} … … 569 546 if FileTest.file?( dst_file ) then 570 547 print( "merging #{src_file} to #{dst_file}\n" ) 571 # dst_file ã®èªè¾¼ã¿548 # dst_file の読込み 572 549 begin 573 550 dst = open( dst_file ) … … 584 561 old = CDLContents.new( old_contents ) 585 562 586 # template ã®èªè¾¼ã¿563 # template の読込み 587 564 begin 588 565 src = open( src_file ) … … 620 597 621 598 elsif $b_exist == false then 622 # src_file ã dst_file ã¸ã³ãã¼599 # src_file を dst_file へコピー 623 600 begin 624 601 src = File.open( src_file ) … … 657 634 658 635 659 #=== ãã¡ã¤ã«ã®ã¨ã³ã³ã¼ãã£ã³ã°ã ASCII-8BIT ã«å¤æ´660 # Ruby 1.9 以ä¸ã®å ´åã«å¤æ´636 #=== ファイルのエンコーディングを ASCII-8BIT に変更 637 # Ruby 1.9 以上の場合に変更 661 638 def set_encoding file 662 639 if RUBY_VERSION >= "1.9.0" then … … 666 643 667 644 #=== rename_dst 668 # dst_file ã®ããã¯ã¢ãããã¡ã¤ã«åã決å®ãããªãã¼ã ãã669 # æåããã°ããªãã¼ã å¾ã®ãã¡ã¤ã«åãè¿ã670 # dst_file ãåå¨ããªããã°ï¼ãªãã¼ã ã¯è¡ãããï¼nil ãè¿ãã645 # dst_file のバックアップファイル名を決定し、リネームする 646 # 成功すれば、リネーム後のファイル名を返す 647 # dst_file が存在しなければ(リネームは行われず)nil を返す。 671 648 def rename_dst( dst_file ) 672 649 begin … … 674 651 rescue 675 652 STDERR.puts( "info: backup not generated for #{dst_file}" ) 676 # ãªããã°çµãã653 # なければ終わり 677 654 return nil 678 655 end -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.