--- /dev/null
+# Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
+
+require "pathname"
+require "chise/config"
+
+class String
+ def path
+ Pathname.new(self)
+ end
+end
+
+class Pathname
+ def escape # copied from cgi.rb
+ s = @path.gsub(/([\/%]+)/n){
+ "%" + $1.unpack("H2" * $1.size).join("%").upcase
+ }
+ Pathname.new(s)
+ end
+
+ def unescape # copied from cgi.rb
+ s = @path.tr("+", " ").gsub(/((?:%[0-9a-fA-F]{2})+)/n) {
+ [$1.delete("%")].pack("H*")
+ }
+ Pathname.new(s)
+ end
+
+ # translate file name for deal with the restriction of Windows file system.
+ def unix_to_win
+ win = @path.gsub(/</, "(")
+ win = win.gsub(/>/, ")")
+ win = win.gsub(/\*/, "+")
+ win = win.gsub(/\?/, "!")
+ Pathname.new(win)
+ end
+
+ def win_to_unix
+ unix = @path.gsub(/\)/, ">")
+ unix = unix.gsub(/\(/, "<")
+ unix = unix.gsub(/\!/, "?")
+ unix = unix.gsub(/\+/, "*")
+ Pathname.new(unix)
+ end
+
+ def escape_win_filename
+ return self.unix_to_win if CHISE.windows?
+ self
+ end
+
+ def unescape_win_filename
+ return self.win_to_unix if CHISE.windows?
+ self
+ end
+end