Changeset 318 for asp3_gr_sakura/trunk/tecsgen/tecsmerge.rb
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/tecsgen/tecsmerge.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 8 8 # Copyright (C) 2008-2015 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 # $Id : tecsmerge.rb 2224 2015-08-22 03:15:56Z okuma-top$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-2015. 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 … … 334 312 end 335 313 336 case stat # åã®ç¶æ 337 314 case stat # 前の状態 338 315 when :HEAD 339 316 @head = part … … 351 328 when :ENTRY_FUNC_COMMENT 352 329 func_name = arg.to_sym 353 if @entry_port[ port_name ] then # nil ãªãæ¢ã«ã¨ã©ã¼330 if @entry_port[ port_name ] then # nil なら既にエラー 354 331 @entry_port[ port_name ].entry_func_comment[ func_name ] = part 355 332 @entry_port[ port_name ].entry_func_array << func_name 356 333 end 357 334 when :ENTRY_FUNC_BODY, :ENTRY_FUNC_BODY2 358 if @entry_port[ port_name ] then # nil ãªãæ¢ã«ã¨ã©ã¼335 if @entry_port[ port_name ] then # nil なら既にエラー 359 336 @entry_port[ port_name ].entry_func_body[ func_name ] = part 360 337 end … … 375 352 376 353 stat = next_stat 377 arg = $1 # arg ã«åã£ã¦ãã354 arg = $1 # arg に取っておく 378 355 # p stat, arg 379 356 break … … 389 366 390 367 def check template 391 # template ã«ãªããã®ããã§ãã¯368 # template にないものをチェック 392 369 @entry_port.each{ |port_name, entry_port| 393 370 temp_entry_port = template.entry_port[port_name] … … 410 387 PortRenamer.get_list.each{ |pon,pr| 411 388 412 # 対象åãå£ãæã389 # 対象受け口を捜す 413 390 ep = @entry_port[pon] 414 391 if ep == nil then … … 417 394 end 418 395 419 # ãã¼ãã®rename420 pnn = pr.new_port_name # ç½®æå¾ã®åå396 # ポートの rename 397 pnn = pr.new_port_name # 置換後の名前 421 398 if pnn then 422 # ç½®æããååãããã°ãç»é²ããªãã399 # 置換する名前があれば、登録しなおす 423 400 renamed_entry_port[pnn] = @entry_port[pon] 424 401 @entry_port.delete pon 425 402 end 426 403 427 # æå®ãããé¢æ°ã®ç½®æ404 # 指定された関数の置換 428 405 renamed_func_comment = {} 429 406 renamed_func_body = {} … … 448 425 ep.entry_func_body.merge! renamed_func_body 449 426 450 # ãã¼ãåã®å¤æ´ã«ããé¢æ°åã®ç½®æ427 # ポート名の変更による関数名の置換 451 428 renamed_func_comment = {} 452 429 renamed_func_body = {} … … 564 541 if FileTest.file?( dst_file ) then 565 542 print( "merging #{src_file} to #{dst_file}\n" ) 566 # dst_file ã®èªè¾¼ã¿543 # dst_file の読込み 567 544 begin 568 545 dst = open( dst_file ) … … 579 556 old = CDLContents.new( old_contents ) 580 557 581 # template ã®èªè¾¼ã¿558 # template の読込み 582 559 begin 583 560 src = open( src_file ) … … 615 592 616 593 elsif $b_exist == false then 617 # src_file ã dst_file ã¸ã³ãã¼594 # src_file を dst_file へコピー 618 595 begin 619 596 src = File.open( src_file ) … … 652 629 653 630 654 #=== ãã¡ã¤ã«ã®ã¨ã³ã³ã¼ãã£ã³ã°ã ASCII-8BIT ã«å¤æ´655 # Ruby 1.9 以ä¸ã®å ´åã«å¤æ´631 #=== ファイルのエンコーディングを ASCII-8BIT に変更 632 # Ruby 1.9 以上の場合に変更 656 633 def set_encoding file 657 634 if RUBY_VERSION >= "1.9.0" then … … 661 638 662 639 #=== rename_dst 663 # dst_file ã®ããã¯ã¢ãããã¡ã¤ã«åã決å®ãããªãã¼ã ãã664 # æåããã°ããªãã¼ã å¾ã®ãã¡ã¤ã«åãè¿ã665 # dst_file ãåå¨ããªããã°ï¼ãªãã¼ã ã¯è¡ãããï¼nil ãè¿ãã640 # dst_file のバックアップファイル名を決定し、リネームする 641 # 成功すれば、リネーム後のファイル名を返す 642 # dst_file が存在しなければ(リネームは行われず)nil を返す。 666 643 def rename_dst( dst_file ) 667 644 begin … … 669 646 rescue 670 647 STDERR.puts( "info: backup not generated for #{dst_file}" ) 671 # ãªããã°çµãã648 # なければ終わり 672 649 return nil 673 650 end -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.