ECL version: GIT of sometime in July, 2014
Platform: Windows 8.1, MSVC 2010 compiler, EMACS 24.3, SLIME 2014-8-1
The following code converts SRT subtitle file to SAMI format.
It works when eval'ed as is in the REPL or C-x C-e.
However, when (compile 'baz), it gives STORAGE-EXHAUSTED error
and stops.
(defun baz (f &key (format :iso-8859-1) (left 29) (right 29) (size 24) (align
:center) (font "Meiryo") (weight :bold) (color :white) &aux p)
(labels ((tr (c &aux (b (char-code c)))
(if (< b 128) c (format nil "&#x~x;" b)))
(tx (s)
(setq s (mapcar (lambda (s) (format nil "~{~a~}" (map 'list #'tr s))) s))
(apply
#'concatenate 'string
(mapl (lambda (s) (if (cdr s) (rplacd s (push "<br>" (cdr s))))) s)))
(foo (x) (if x (+ (car x) (* 60 (foo (cdr x)))) 0))
(ms (s) (round (foo (reverse (read-from-string s))) 1/1000))
(bar (r &aux b e x)
(setq r (cdr (reverse r)))
(setq x (tx (cdr r)))
(setq b (substitute #\space #\: (car r)))
(setq b (substitute #\. #\, b))
(setq e (format nil "(~a)" (subseq b (1+ (position #\> b)))))
(setq b (format nil "(~a)" (subseq b 0 (position #\- b))))
(format nil "<SYNC START=~a>~%<P CLASS=SUBTTL>~a~%<SYNC START=~a>~%" (ms
b) x (ms e))))
(with-open-file (s (format nil "../../desktop/~a.srt" f))
(setf (stream-external-format s) format)
(do ((l (read-line s) (read-line s nil))) ((not l) (setq p (reverse p)))
(do ((m l (read-line s nil)) q)
((zerop (length m)) (if q (push (bar q) p)))
(push m q)))))
(push (format nil "<SAMI>~%<HEAD>~%<STYLE TYPE=\"Text/css\">~%<!--~%P
{margin-left: ~dpt; margin-right: ~dpt; font-size: ~dpt; text-align: ~a;
font-family: ~a; font-weight: ~a; color: #FFFFFF; background-color:
#000000;}~%.SUBTTL {Name: 'Subtitles'; Lang: ja; SAMIType:
CC;}~%-->~%</STYLE>~%</HEAD>~%<BODY>~%" left right size align font weight
color) p)
(rplacd (last p) (list (format nil "</BODY>~%</SAMI>~%")))
;;(rplacd (cdddr p) nil)
(with-open-file (s (format nil "../../desktop/~a.smi" f) :direction :output)
;;(setf (stream-external-format s) '(:utf-8 :crlf))
(format s "~{~a~}" p)))
Sent from Windows Mail
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Ecls-list mailing list
Ecls-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ecls-list