From mboxrd@z Thu Jan 1 00:00:00 1970 From: Uwe Brauer Subject: solved; sort of (was: Bug: can't export org file with tables to html [7.01trans]) Date: Wed, 27 Oct 2010 17:24:24 +0200 Message-ID: <878w1jzmjb.fsf_-_@gilgamesch.quim.ucm.es> References: <87wrp3ydad.fsf@gilgamesch.quim.ucm.es> <28138.1288188595@gamaville.dokosmarshall.org> <29281.1288189800@gamaville.dokosmarshall.org> Reply-To: Uwe Brauer Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=42377 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB7sc-0002x0-De for emacs-orgmode@gnu.org; Wed, 27 Oct 2010 11:26:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PB7rP-0005PC-FV for emacs-orgmode@gnu.org; Wed, 27 Oct 2010 11:25:27 -0400 Received: from mail-wy0-f169.google.com ([74.125.82.169]:44994) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PB7rP-0005Ou-54 for emacs-orgmode@gnu.org; Wed, 27 Oct 2010 11:24:19 -0400 Received: by wyf23 with SMTP id 23so899431wyf.0 for ; Wed, 27 Oct 2010 08:24:18 -0700 (PDT) In-Reply-To: <29281.1288189800@gamaville.dokosmarshall.org> (Nick Dokos's message of "Wed, 27 Oct 2010 10:30:00 -0400") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: nicholas.dokos@hp.com Cc: emacs-orgmode@gnu.org >> Regarding Re: [Orgmode] Bug: can't export org file with tables to html [7.01trans]; Nick Dokos adds: >> > C-h v replace-regexp-in-string says (among other things): I just copied the function from Xemacs 21.5 and then the export functions works again. Carsten, may I ask you to include this function, maybe we should have a xemacs-21.4-compat.el file? thanks Uwe (defun replace-regexp-in-string (regexp rep string &optional fixedcase literal subexp start) "Replace all matches for REGEXP with REP in STRING. Return a new string containing the replacements. Optional arguments FIXEDCASE and LITERAL are like the arguments with the same names of function `replace-match'. If START is non-nil, start replacements at that index in STRING. For compatibility with old XEmacs code and with recent GNU Emacs, the interpretation of SUBEXP is somewhat complicated. If SUBEXP is a buffer, it is interpreted as the buffer which provides syntax tables and case tables for the match and replacement. If it is not a buffer, the current buffer is used. If SUBEXP is an integer, it is the index of the subexpression of REGEXP which is to be replaced. REP is either a string used as the NEWTEXT arg of `replace-match' or a function. If it is a function it is applied to each match to generate the replacement passed to `replace-match'; the match-data at this point are such that `(match-string SUBEXP STRING)' is the function's argument if SUBEXP is an integer \(otherwise the whole match is passed and replaced). To replace only the first match (if any), make REGEXP match up to \\' and replace a sub-expression, e.g. (replace-regexp-in-string \"\\(foo\\).*\\'\" \"bar\" \" foo foo\" nil nil 1) => \" bar foo\" Signals `invalid-argument' if SUBEXP is not an integer, buffer, or nil; or is an integer, but the indicated subexpression was not matched. Signals `invalid-argument' if STRING is nil but the last text matched was a string, or if STRING is a string but the last text matched was a buffer." ;; To avoid excessive consing from multiple matches in long strings, ;; don't just call `replace-match' continually. Walk down the ;; string looking for matches of REGEXP and building up a (reversed) ;; list MATCHES. This comprises segments of STRING which weren't ;; matched interspersed with replacements for segments that were. ;; [For a `large' number of replacments it's more efficient to ;; operate in a temporary buffer; we can't tell from the function's ;; args whether to choose the buffer-based implementation, though it ;; might be reasonable to do so for long enough STRING.] (let ((l (length string)) (start (or start 0)) (expndx (if (integerp subexp) subexp 0)) matches str mb me) (save-match-data (while (and (< start l) (string-match regexp string start)) (setq mb (match-beginning 0) me (match-end 0)) ;; If we matched the empty string, make sure we advance by one char (when (= me mb) (setq me (min l (1+ mb)))) ;; Generate a replacement for the matched substring. ;; Operate only on the substring to minimize string consing. ;; Set up match data for the substring for replacement; ;; presumably this is likely to be faster than munging the ;; match data directly in Lisp. (string-match regexp (setq str (substring string mb me))) (setq matches (cons (replace-match (if (stringp rep) rep (funcall rep (match-string expndx str))) ;; no, this subexp shouldn't be expndx fixedcase literal str subexp) (cons (substring string start mb) ; unmatched prefix matches))) (setq start me)) ;; Reconstruct a string from the pieces. (setq matches (cons (substring string start l) matches)) ; leftover (apply #'concat (nreverse matches)))))