changeset 138:b7b54906ac3b dev

add newpage.rb
author yuuji@gentei.org
date Wed, 07 Jul 2010 22:27:25 +0900
parents 7919fbbb33c0
children e9c1e80f232e
files newpage.rb yahtml.el yatexlib.el
diffstat 3 files changed, 165 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/newpage.rb	Wed Jul 07 22:27:25 2010 +0900
@@ -0,0 +1,124 @@
+#!/usr/bin/env ruby
+# THIS is very very tentative.  Insufficient examination of function.
+# Create new HTML file referring other HTML file in the same directory.
+# Example:
+#	newpage.rb		Create new index.html by copying template.
+#	newpage.rb foo.html	Create new foo.html whose by copying header
+#				and footer from index.html.
+#	newpage.rb d/sub.html	Create new directory d (if necessary) and
+#				d/sub.html by copying header/footer from
+#				index.html in a same directory or parent
+#				directory rewriting href to css file
+#				considering relative path.
+#	newpage.rb -o [file]	Forcibly overwrite existing file.
+#	newpage.rb -c cssfile	Set `cssfile' as defualt css.
+#	newpage.rb -t template	Set `template' as HTML template.
+require 'fileutils'
+
+mydir=File.dirname($0)
+myname=File.basename($0, ".rb")
+
+
+index = 'index.html'
+cssdefault = nil
+overwrite = nil
+template = __FILE__ #File.expand_path(myname+".html", mydir)
+
+def guesscss(dir)
+  
+end
+
+while ARGV[0] && /^-/ =~ (a0=ARGV[0].dup) && ARGV.shift
+  break if /^--$/ =~ a0
+  while /^-[A-Za-z]/ =~ a0
+    case a0
+    when "-c"                   # css
+      ARGV.shift; cssdefault = ARGV[0]
+    when "-t"                   # template
+      ARGV.shift; cssdefault = ARGV[0]
+    when "-o"                   # overwrite
+      overwrite = true
+    end
+    a0.sub!(/-.(.*)/, '-\\1')
+  end
+end
+
+outfile = ARGV[0]||index
+if !overwrite && test(?s, outfile) then
+  STDERR.printf("File \`%s' exists.  Use -o option to overwrite.\n", outfile)
+  exit 1
+end
+
+# set css default file
+dots = 0
+of = outfile
+dots+=1 while "." != (of=File.dirname(of))
+cssdir = "../"*dots
+
+# set copy source
+outdir = File.dirname(outfile)
+if "index.html" == File.basename(outfile)
+  src = (dots == 0 ? template : "index.html")
+elsif test(?s, outdir+"/index.html")
+  src = outdir+"/index.html"
+else
+  src = template
+end
+
+FileUtils.mkdir_p(outdir)
+
+cssfile = cssdir+"main.css"
+name = File.basename(outfile, ".html")
+begin
+  open(outfile, "w") do |out|
+    #IO.foreach(src) do |line|
+    if src == __FILE__
+      input = DATA
+    else
+      input = open(src, "r")
+    end
+    begin
+      html = input.readlines.join
+      html.sub!(%r|^<h1.*<\/h1>|i, sprintf("<h1>%s</h1>\n", name))
+      if !html.gsub!("__CSSFILE__", cssfile)
+        html.gsub!(/href=(['\"])(.*\.css)\1/, 'href="\1"')
+      end
+      html.gsub!("__TITLE__", name)
+      out.print html
+    ensure
+      input.close
+    end
+  end
+  printf(<<_EOS_, outfile, name)
+<a href="%s">%s</a>
+_EOS_
+rescue
+  p $!
+  STDERR.printf(<<'_EOS_', outfile, outfile)
+Cannot output to [%s].  Do
+  chmod +w %s
+or
+  chmod +w .
+or change output directory.
+_EOS_
+  exit 1
+end
+
+__END__
+<html>
+<head>
+<title>__TITLE__</title>
+<style type="text/css">
+<!--
+/* Local CSS here */
+-->
+</style>
+<link rel="stylesheet" type="text/css" href="__CSSFILE__">
+</head>
+
+<body>
+<h1>__TITLE__</h1>
+
+<!--#include virtual="/~yuuji/signature.html"-->
+</body>
+</html>
--- a/yahtml.el	Thu Jun 24 16:01:45 2010 +0900
+++ b/yahtml.el	Wed Jul 07 22:27:25 2010 +0900
@@ -1,6 +1,6 @@
 ;;; -*- Emacs-Lisp -*-
 ;;; (c) 1994-2010 by HIROSE Yuuji [yuuji(@)yatex.org]
-;;; Last modified Thu Jun 24 16:00:42 2010 on firestorm
+;;; Last modified Wed Jul  7 22:12:55 2010 on firestorm
 ;;; $Id$
 
 (defconst yahtml-revision-number "1.74.2"
@@ -880,6 +880,25 @@
 	"class(or class list delimited by \\[quoted-insert] SPC): "))
      nil YaTeX-minibuffer-completion-map nil)))
   
+(defvar yahtml-newpage-command "newpage.rb"
+  "*Command name to create new HTML file referring to index.html.
+This command should create new HTML file named argument 1 and
+output string like `<a href=\"newfile.html\">anchor tag</a>'.
+This program should take -o option to overwrite existing HTML file.")
+(defun yahtml-newpage (file ov)
+  "Create newpage via newpage script"
+  (interactive
+   (list
+    (let (insert-default-directory)
+      (read-file-name "New webpage file name: " ""))
+    current-prefix-arg))
+  (if (and (file-exists-p file) (not ov))
+      (error "%s already exists.  Call this with universal argument to force overwrite." file))
+  (insert (substring
+	   (YaTeX-command-to-string
+	    (concat yahtml-newpage-command " " (if ov "-o ") file))
+	   0 -1)))
+
 ;;; ---------- Add-in ----------
 (defun yahtml-addin (form)
   "Check add-in function's existence and call it if exists."
@@ -2463,9 +2482,9 @@
 ;;; ---------- Lint and Browsing ----------
 ;;; 
 (defun yahtml-browse-menu ()
-  "Browsing menu"
+  "Browsing or other external process invokation menu."
   (interactive)
-  (message "J)weblint p)Browse R)eload...")
+  (message "J)weblint p)Browse R)eload N)ewpage...")
   (let ((c (char-to-string (read-char))))
     (cond
      ((string-match "j" c)
@@ -2473,7 +2492,9 @@
      ((string-match "[bp]" c)
       (yahtml-browse-current-file))
      ((string-match "r" c)
-      (yahtml-browse-reload)))))
+      (yahtml-browse-reload))
+     ((string-match "n" c)
+      (call-interactively 'yahtml-newpage)))))
 
 (if (fboundp 'wrap-function-to-control-ime)
     (wrap-function-to-control-ime 'yahtml-browse-menu t nil))
--- a/yatexlib.el	Thu Jun 24 16:01:45 2010 +0900
+++ b/yatexlib.el	Wed Jul 07 22:27:25 2010 +0900
@@ -2,7 +2,7 @@
 ;;; YaTeX and yahtml common libraries, general functions and definitions
 ;;; yatexlib.el
 ;;; (c)1994-2009 by HIROSE Yuuji.[yuuji@yatex.org]
-;;; Last modified Thu May 27 15:09:44 2010 on firestorm
+;;; Last modified Wed Jul  7 06:48:48 2010 on firestorm
 ;;; $Id$
 
 ;; General variables
@@ -822,6 +822,21 @@
   (win-switch-to-window 1 (- last-command-char win:base-key)))
 
 ;;;###autoload
+(defun YaTeX-command-to-string (cmd)
+  (if (fboundp 'shell-command-to-string)
+      (funcall 'shell-command-to-string cmd)
+    (let ((tbuf " *tmpout*"))
+      (if (get-buffer-create tbuf) (kill-buffer tbuf))
+      (let ((standard-output (get-buffer-create tbuf)))
+	(unwind-protect
+	    (save-excursion
+	      (call-process
+	       shell-file-name nil tbuf nil YaTeX-shell-command-option cmd)
+	      (set-buffer tbuf)
+	      (buffer-string))
+	  (kill-buffer tbuf))))))
+      
+;;;###autoload
 (defun YaTeX-reindent (col)
   "Remove current indentation and reindento to COL column."
   (save-excursion

yatex.org