Bug 704525 - When you have a mix of chart types (bar charts and pie charts)

Add new procedure gnc:substring-replace-from-to

Similar to gnc:substring-replace, but offers the possibility to replace substrings in a range of occurances.
Author:    Carsten Rinke <carsten.rinke@gmx.de>

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23143 57a11ea4-9604-0410-9ed3-97b8803252fd
pull/2/head
Geert Janssens 13 years ago
parent 299b6c4b4d
commit cc51bcf7c0

@ -94,6 +94,82 @@
(substring s1 start1)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; gnc:substring-replace-from-to
;; same as gnc:substring-replace extended by:
;; start: from which occurrance onwards the replacement shall start
;; end-after: max. number times the replacement should executed
;;
;; Example: (gnc:substring-replace-from-to "foobarfoobarfoobar" "bar" "xyz" 2 2)
;; returns "foobarfooxyzfoobar".
;;
;; start=1 and end-after<=0 will call gnc:substring-replace (replace all)
;; start>1 and end-after<=0 will the replace from "start" until end of file
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (gnc:substring-replace-from-to s1 s2 s3 start end-after)
(let (
(s2len (string-length s2))
)
;; if start<=0 and end<=0 => don't do anything
(if (and
(<= start 0)
(<= end-after 0)
)
s1
)
;; else
(begin
;; normalize start
(if (= start 0)
(set! start 1)
)
;; start=1 and end<=0 => replace all
;; call gnc:substring-replace for that
(if (and (= start 1) (<= end-after 0))
(gnc:substring-replace s1 s2 s3)
;; else
(begin
(let loop (
(start1 0)
(i (string-contains s1 s2))
)
(if i
(begin
(set! start (- start 1))
(if (or
(> start 0)
(and (> end-after 0)
(<= (+ end-after start) 0)
)
)
(string-append
(substring s1 start1 i)
s2 ;; means: do not change anything
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len)))
)
(string-append
(substring s1 start1 i)
s3
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len)))
)
)
)
;; else
(substring s1 start1)
)
)
)
)
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; gnc:string-replace-char
;;

Loading…
Cancel
Save