root/lang/elisp/pdicv-mode/trunk/nt-string.el

Revision 71, 3.3 kB (checked in by naoya_t, 16 years ago)
Line 
1;;; nt-string.el --- NT's string utilities
2;;
3;; Copyright (C) 2005-2009 naoya_t. All Rights Reserved.
4;;
5;; Author: naoya_t <naoya.t@aqua.plala.or.jp>
6;; Maintainer: naoya_t <naoya.t@aqua.plala.or.jp>
7;; Primary distribution site:
8;;   http://lambdarepos.svnrepository.com/svn/share/lang/elisp/pdicv-mode/trunk
9;;
10;; Created: 16 Feb 2005
11;; Last modified: 15 Dec 2005
12;; Version: 1.0
13;; Keywords: replace-in-string strcmp trim
14
15(provide 'nt-string)
16
17;;; Commentary:
18;
19; (nt:strcmp S1 S2)
20; (nt:strncmp S1 S2 N)
21;   - C��� strcmp(), strncmp() �ؿ���ߥ����Ȥ�����;
22; (nt:replace-all STR REGEXP SUBST)
23; (nt:replace-in-string*DEPRECATED STR REGEXP SUBST)
24;   - ʸ��TR ��Ρ����ɽ�� REGEXP �˰�����ʬ�򤹤٤�;     ��ʸ��UBST ��ִ����롣
25;
26; (nt:rtrim STR)
27; (nt:ltrim STR)
28; (nt:trim STR)
29;   - ʸ��TR �α�¦����¦������ξ��ζ���롣
30
31;;; Code:
32(require 'nt-macros)
33
34(defmacro nt:strncmp (s1 s2 n)
35  "strncmp()"
36  `(nt:strcmp ,s1 ,s2 ,n))
37
38(defun nt:strcmp (s1 s2 &optional n)
39  "strcmp()"
40  (catch 'strcmp
41    (let* ((s1-length (length s1))
42           (s2-length (length s2))
43           (strncmp-p n) ; (not (null n))) ; t/nil
44           (i 0))
45
46      (when n
47                (when (or (> n s1-length) (> n s2-length))
48                  (setq n nil strncmp-p nil)))
49      (when (null n)
50                (setq n (min s1-length s2-length)))
51
52      (when (zerop n) (throw 'strcmp 0))
53
54      (while (< i n)
55        (let ((s1-i (aref s1 i))
56              (s2-i (aref s2 i)))
57          (when (/= s1-i s2-i) (throw 'strcmp (- s1-i s2-i))))
58        (setq i (1+ i)))
59
60      ;nʸ����1=s2
61      (if strncmp-p
62          ;; strncmp()
63          0
64        ;; strcmp()
65        (throw 'strcmp (- s1-length s2-length)))
66      );let
67    0
68    );caught
69  )
70
71(defun nt:replace-in-string*DEPRECATED (str r n)
72  "replace /r/ in str --> n"
73  (catch 'replace-in-string
74    (let* ((result "")
75           (s-len (length str))
76           (r-len (length r))
77           (till (- s-len r-len))
78           (i 0) (at 0))
79      (while (<= i till)
80        (setq at (string-match r str i))
81        (when (null at) (throw 'replace-in-string (concat result (substring str i))))
82
83        (setq result (concat result (substring str i at) n))
84        (setq i (+ at r-len)))
85      result)))
86
87(defun nt:replace-all (str regex subst)
88  "replace /regex/ in str --> subst"
89  (let ((ofs 0)
90        (last (length str))
91        (result ""))
92    (catch 'while
93      (while (< ofs last)
94        (let ((found-at nil))
95          (if (setq found-at (string-match regex str ofs))
96              (progn
97                (setq result (concat result (substring str ofs found-at) subst))
98                (setq ofs (match-end 0)))
99            (progn
100              (setq result (concat result (substring str ofs last)))
101              (throw 'while nil))))))
102    result))
103
104(defun nt:rtrim (str)
105  "rtrim"
106  (catch 'rtrim
107    (let ((i (1- (length str))))
108      (while (> i 0)
109        (when (> (aref str i) #x20) (throw 'rtrim (substring str 0 (1+ i))))
110        (-- i)))))
111
112(defun nt:ltrim (str)
113  "ltrim"
114  (catch 'ltrim
115    (let ((len (length str)) (i 0))
116      (while (< i len)
117        (when (> (aref str i) #x20) (throw 'ltrim (substring str i len)))
118        (++ i)))))
119
120;(defun nt:trim (str)
121;  "trim"
122;  (nt:ltrim (nt:rtrim str)))
123(defmacro nt:trim (str)
124  "trim"
125  `(nt:ltrim (nt:rtrim ,str)))
126
127;;; nt-string.el ends here
Note: See TracBrowser for help on using the browser.