<html>
<head>
<meta name="generator" content="Windows Mail 17.5.9600.20605">
<style data-externalstyle="true"><!--
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
}
p.MsoNormal, li.MsoNormal, div.MsoNormal {
margin:0in;
margin-bottom:.0001pt;
}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst, 
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle, 
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
line-height:115%;
}
--></style></head>
<body dir="ltr">
<div data-externalstyle="false" dir="ltr" style="font-family: 'Calibri', 'Meiryo', 'Segoe UI', 'Microsoft YaHei UI', 'Microsoft JhengHei UI', 'Malgun Gothic', 'sans-serif';font-size:12pt;"><div>ECL version: GIT of sometime in July, 2014<br>Platform: Windows 8.1, MSVC 2010 compiler, EMACS 24.3, SLIME 2014-8-1</div><div><br></div><div>The following code converts SRT subtitle file to SAMI format.<br>It works when eval'ed as is in the REPL or C-x C-e.<br>However, when (compile 'baz), it gives STORAGE-EXHAUSTED error<br>and stops.</div><div><br></div><div>(defun baz (f &key (format :iso-8859-1) (left 29) (right 29) (size 24) (align :center) (font "Meiryo") (weight :bold) (color :white) &aux p)<br>  (labels ((tr (c &aux (b (char-code c)))<br>      (if (< b 128) c (format nil "&#x~x;" b)))<br>    (tx (s)<br>      (setq s (mapcar (lambda (s) (format nil "~{~a~}" (map 'list #'tr s))) s))<br>      (apply<br>       #'concatenate 'string<br>       (mapl (lambda (s) (if (cdr s) (rplacd s (push "<br>" (cdr s))))) s)))<br>    (foo (x) (if x (+ (car x) (* 60 (foo (cdr x)))) 0))<br>    (ms (s) (round (foo (reverse (read-from-string s))) 1/1000))<br>    (bar (r &aux b e x)<br>      (setq r (cdr (reverse r)))<br>      (setq x (tx (cdr r)))<br>      (setq b (substitute #\space #\: (car r)))<br>      (setq b (substitute #\. #\, b))<br>      (setq e (format nil "(~a)" (subseq b (1+ (position #\> b)))))<br>      (setq b (format nil "(~a)" (subseq b 0 (position #\- b))))<br>      (format nil "<SYNC START=~a>~%<P CLASS=SUBTTL>~a~%<SYNC START=~a>~%" (ms b) x (ms e))))<br>    (with-open-file (s (format nil "../../desktop/~a.srt" f))<br>      (setf (stream-external-format s) format)<br>      (do ((l (read-line s) (read-line s nil))) ((not l) (setq p (reverse p)))<br> (do ((m l (read-line s nil)) q)<br>     ((zerop (length m)) (if q (push (bar q) p)))<br>   (push m q)))))<br>  (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)<br>  (rplacd (last p) (list (format nil "</BODY>~%</SAMI>~%")))<br>  ;;(rplacd (cdddr p) nil)<br>  (with-open-file (s (format nil "../../desktop/~a.smi" f) :direction :output)<br>    ;;(setf (stream-external-format s) '(:utf-8 :crlf))<br>    (format s "~{~a~}" p)))<br></div><div data-signatureblock="true"><div><br></div><div>Sent from Windows Mail</div><div><br></div></div></div>
</body>
</html>