Как мне записать в zip-файл в Common Lisp? - PullRequest
2 голосов
/ 17 ноября 2010

Я могу открыть запись zip и настроить содержимое, но не могу понять, как их сохранить.

Требуется API для CL ZIP.

Характеристики:

ZIP

Quicklisp

MacPorts CLISP 2.49

Aquamacs 2.1 (Emacs 23.2)

Mac OSX 10.6.4

MacBook Pro 5,1

<code>; Removes newlines at the beginning of PRE tags in Sigil-edited ePub files.
;
; See http://code.google.com/p/sigil/issues/detail?id=655
;
; Andrew Pennebaker
; 16 Nov 2010

; Requires Quicklisp.
; http://www.quicklisp.org/
(ql:quickload "zip")
(ql:quickload "cl-ppcre")

(defvar *epub* nil)
(defvar *epub-contents* nil)
(defvar *epub-out* nil)

(defun load-epub (filename)
  (setq *epub* (zip:open-zipfile filename)))

(defun close-epub ()
  (zip:close-zipfile *epub*)
  (setq *epub* nil)
  (setq *epub-contents* nil))

(defun gather-epub-contents ()
    (zip:do-zipfile-entries (name entry *epub*)
      (push name *epub-contents*)))

(defun is-html-file (name)
  (if (cl-ppcre:scan ".+\\.htm[l]?$" name) t nil))

(defun entry-name-to-html (name)
  (flexi-streams:octets-to-string
   (zip:zipfile-entry-contents
    (zip:get-zipfile-entry name *epub*))))

(defun clean (html)
  (values
   (cl-ppcre:regex-replace-all
    "<pre[^>]*>(\\s)*"
    (cl-ppcre:regex-replace-all "\\s+
"html"")"
")))
</code>

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Используя временный файл, вы можете разархивировать, изменить и распаковать.

См. sigil-clean.cl

0 голосов
/ 18 ноября 2010

Согласно документации ZIP-библиотеки Common Lisp, вы должны получить отдельный дескриптор для записи в zip-файл.Возможно, вы можете извлечь содержимое в папку, настроить содержимое и сжать всю папку одним вызовом (zip path-name source-folder).

...