[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bug#728501: w3m-el: mew-w3m-region & multiple blockquote
- From: Christophe TROESTLER <Christophe.Troestler@xxxxxxxxxxx>
- Date: Sun, 1 Dec 2013 11:34:55 +0100
- X-ml-name: emacs-w3m
- X-mail-count: 12232
- References: <20131104.235729.1314330540480451259.tats%nobody@xxxxxxxxxxxxxxx> <b4mfvrba5f3.fsf@xxxxxxx> <20131201.191345.1176061710044602483.tats%nobody@xxxxxxxxxxxxxxx>
Hi,
As an alternative solution, I have been using the replacement of
`mew-w3m-region` below. Comments are welcome. I had no time to try
the proposed patch yet.
My 0.02¤,
C.
(defun mew-w3m-insert-quote-mark ()
"We assume to be the beginning of a line. Skip any HTML tags
to the data. This is to put the quotation mark right before the
text."
(catch 'Break
(while (looking-at "[ \t\f\n]*<\\(/?[a-zA-Z]+\\)\\([ \t\f\n]+[^>]*\\)?>")
(let ((tag (buffer-substring (match-beginning 1) (match-end 1)))
(tagbeg (match-beginning 0))
(tagend (match-end 0)))
(cond
((string-equal tag "br")
(goto-char tagbeg)
(insert mew-w3m-region-cite-mark)
(goto-char tagend))
((member tag '("ul" "/ul" "ol" "/ol"))
(delete-region tagbeg tagend))
((string-equal tag "li")
;; Replace <li> to put the mark at the beginning of the line.
(delete-region tagbeg tagend)
(insert mew-w3m-region-cite-mark " * ")
(throw 'Break nil)
)
((string-equal tag "/li")
(delete-region tagbeg tagend)
(insert "<br/>")
(throw 'Break nil)
)
(t
(goto-char tagend)))))
(insert mew-w3m-region-cite-mark)))
(defun mew-w3m-region (start end &optional url charset)
"w3m-region with inserting the cite mark."
(if (null mew-w3m-region-cite-mark)
(w3m-region start end url charset)
(save-restriction
(narrow-to-region start end)
(let ((case-fold-search t)
(has-blockquote nil)
lines tagbeg0 tagend0 tagbeg1 tagend1)
(goto-char (point-min))
(while (w3m-search-tag "blockquote")
(setq has-blockquote t)
(setq tagbeg0 (match-beginning 0))
(setq tagend0 (match-end 0))
(when (w3m-end-of-tag "blockquote" t)
(setq tagend1 (point))
(re-search-backward "</ *blockquote")
(setq tagbeg1 (match-beginning 0))
(setq lines (buffer-substring tagend0 tagbeg1))
(delete-region tagbeg0 tagend1)
(insert (with-temp-buffer
(insert lines)
(goto-char (point-min))
(mew-w3m-insert-quote-mark)
;; <div> also start new lines.
(while (w3m-search-tag "br" "/div" "div")
;; <br><div>* is a single new line
(mew-w3m-insert-quote-mark))
(buffer-substring (point-min) (point-max))))
(goto-char (point-min)); deal with other <blockquote>
))
(let ((f w3m-fill-column))
(setq w3m-fill-column (if has-blockquote 8192 0))
(w3m-region (point-min) (point-max) url charset)
(setq w3m-fill-column f)))
)))