Develop and Download Open Source Software

Browse Subversion Repository

Contents of /script/staticLinkChecker.rb

Parent Directory Parent Directory | Revision Log Revision Log


Revision 264 - (show annotations) (download)
Tue Mar 4 04:12:52 2008 UTC (16 years, 1 month ago) by satofumi
File size: 1732 byte(s)
add link check script
1 #!/usr/bin/ruby
2 # 静的リンクが、ベース名に収まっているかを確認するスクリプト
3 # Satofumi KAMIMURA
4 #
5 # 処理概要
6 # - .html に対して以下の処理を行う
7 # - a href="(.+)" をリンクとして抜き出す
8 # - リンク先のファイルが存在しなければ、エラー表示
9 # - 存在したときに、それがベース名と一致しなければ、エラー表示
10
11 require 'find'
12 require 'fileutils'
13
14
15 # ベース名の指定がなければ、使い方を表示して終了
16 if ARGV.size < 1
17 print "usage:\n\t" + __FILE__ + "/path/of/base/dir/\n\n"
18 exit
19 end
20 base_dir = ARGV[0]
21
22
23 # 拡張子が html のファイル一覧を取得
24 check_links = {}
25 Find.find(base_dir) { |fname|
26 if File.extname(fname) != '.html'
27 next
28 end
29 # 対象ファイルから、リンク先文字列を抽出
30 File.open(fname) { |io|
31 line_count = 0
32 while line = io.gets
33 if line =~ /a href="(.+?)"/
34 # '#' 以降を除去。空になった場合は登録しない
35 link_name = $1.gsub(/[#&](.*)/, '');
36 if ! link_name.empty?
37 check_links[link_name] = fname + ':' + line_count.to_s + ':'
38 end
39 end
40 line_count += 1
41 end
42 }
43 }
44 # !!! base_dir が存在しないときのチェックをするべき
45
46
47 # ファイルのパス名がベースディレクトリと同じかを確認
48 check_links.each { |key, value|
49
50 # 'http' から始まるリンク先はチェックしない
51 if key[0, 4].downcase == 'http'
52 next
53 end
54 check_name = base_dir + key
55
56 # ファイルの存在確認
57 if ! FileTest.exist?(check_name)
58 print value + ' ' + key + ": No such file\n"
59 next
60 end
61
62 # 絶対パス名が、base_dir を含むかを確認
63 absolute_path = File.expand_path(check_name)
64 if absolute_path.match(base_dir) == nil
65 print value + ' ' + key + ": No match file on absolute path\n"
66 end
67
68 #print key, ' ', value, "\n"
69 }
70
71
72 # ベースディレクトリとの比較に失敗したファイル名を出力
73 # !!!

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26