Memo‎ > ‎

iPad 上で html ファイルをオフラインで閲覧する方法

iPad で html ファイルをオフラインで見るためには、 PDF に変換する方法の他にも、以下の手順を行う方法があります。
  1. iPad に FileApp をインストール
  2. PC に DiskAid をインストール
  3. DiskAid を用いて、 iPad の FileApp ディレクトリ内に html ファイルをコピー
  4. FileApp で閲覧
htmlファイルは適当なディレクトリにまとめておき、FileApp のルートディレクトリにエイリアスや転送をするだけのhtmlファイルを置くと便利かもしれません。
FileApp で見るときには戻るボタン等が無く不便なため、html ファイルに"戻る"や"進む"リンクを挿入する ruby スクリプトを書いてみました。


使用方法:
  •  (コマンド名) [オプション] [ファイル名またはディレクトリ名]
ファイル名を指定した場合そのファイルの <body> の後および </body> の前にリンクを挿入します。
ディレクトリ名を指定した場合そのディレクトリ内の .html, .htm ファイルにリンクを挿入します。
どちらも指定しない場合はカレントディレクトリを指定したとします

オプションは以下の通りです。
  • -s : 挿入するリンクを変更
  • -e : 挿入対象となる拡張子を変更
  • -a, -b : 挿入場所の基準 (標準で <body>, </body>) を変更 (正規表現で指定)
  • -R : ディレクトリを再帰的に探索
注意事項:
入力ファイルをそのまま上書きします。必要ならば複製を作成しておいて下さい。
オプションはテストしていないので、うまく動かないかもしれません。

Ruby のスクリプト

require 'optparse'

Version = "alpha"
$recursive = false
$regexset = false
$ahead = []
$behined = []
$DefaultAhead = [/<¥s*[bB][oO][dD][yY].*?>¥s*/]
$DefaultBehined = [/¥s*<¥s*¥/[bB][oO][dD][yY]¥s*>/]
$target = ["."]
$ext = []
$DefaultExt = [/¥.html$/, /¥.htm$/]
$str = '<p> <a href="#" onClick="history.back(); return false;">Back</a> | <a href="./" >Home</a> | <a href="#" onClick="history.forward(); return false;">Forward</a> </p>'
$opt = OptionParser.new("Usage: #{$0} [options] [target_files | target_directories]¥n")

$opt.on('--str=STRING', 'insert STRING to TARGETS') do 
  |str| 
  $str = str
end

$opt.on('-a', '--lookahead[=REGEX]', 'set REGEX as lookahead') do 
  |reg| 
  $regexset = true
  return if !reg
  $ahead += reg.gsub(/;/,",").split(',') 
end

$opt.on('-b', '--lookbehined[=REGEX]', 'set REGEX as lookbehined') do 
  |reg|
  $regexset = true
  return if !reg
  $behined += reg.gsub(/;/,",").split(',')
end

$opt.on('-e', '--ext=EXTENTIONS', 'set EXTENTIONS of target files') do
  |ext| $ext += ext.gsub(/;/,",").split(',').map do
    |e|
  /¥.#{e}$/
  end 
end

$opt.on('-R', '--recursive', 'recursively search directories') do
  $recursive = true
end

def execinsert filename
  begin
    file = open filename
    filestr = file.read
    file.close
    
    aheadset = (($regexset) ? $ahead : $DefaultAhead)
    aheadset.each do |ahead|
      count = 0
      while(filestr[count..(filestr.size)] =‾ ahead)
        count += filestr[count..(filestr.size)] =‾ ahead
        filestr.insert(count + $‾[0].size,  $str)
        count += $‾[0].size+$str.size
        end
    end
    
    behinedset = (($regexset)  ? $behined : $DefaultBehined )
    behinedset.each do |behined|
      count = 0
      while(filestr[count..(filestr.size)] =‾ behined)
        count += filestr[count..(filestr.size)] =‾ behined
        filestr.insert(count ,  $str)
        count += $‾[0].size+$str.size
      end
    end
    
    file = open(filename,"w")
    file.write filestr
    file.close
    
  rescue
    STDERR.puts "Cannot open " + filename
  end
end

def execopen files, isfirst
  return if !files
  files.each do |filename|
    begin
      case File.ftype filename
      when "file"
        execinsert filename if isfirst or $ext.any? do 
          |e|
          filename =‾ e
        end 
      when "directory"
        if isfirst or $recursive
          dirs = Dir.entries(filename)[2..Dir.entries(filename).size]
          dirs.map! do  |e|   Dir.open(filename).path+'/'+e  end
          execopen dirs, false
        end
      else
      end
    rescue
      STDERR.puts "No such file or directory - " + filename
    end
  end
end

$ext = $DefaultExt if $ext.size == 0

begin
  t = $opt.parse ARGV
  $target = t if(t.size != 0)
rescue
  STDERR.puts $opt.help
  exit 1
end

execopen $target, true


Comments