[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] 59/352: Sallitaan lausekkeen täsmääminen heti edellisen perään
From: |
Stefan Monnier |
Subject: |
[elpa] 59/352: Sallitaan lausekkeen täsmääminen heti edellisen perään |
Date: |
Mon, 07 Jul 2014 14:02:01 +0000 |
monnier pushed a commit to branch master
in repository elpa.
commit 1b56b170befc762d98ecffc81cb6449e43d2441b
Author: Teemu Likonen <address@hidden>
Date: Fri May 22 11:20:27 2009 +0000
Sallitaan lausekkeen täsmääminen heti edellisen perään
Merkkijonoja etsiessään aiempi toteutus siirtyi joka kerta
automaattisesti yhden merkin verran eteenpäin ennen kuin etsii seuraavaa
merkkijonoa. Aiemmassa toteutuksessa oli se huono puoli, että puskurissa
ei voi koskaan täsmätä kaksi välittömästi peräkkäin olevaan merkkijonoa.
Esimerkiksi, jos säännöllinen lauseke on "\w\{4\}" ja puskurissa on sana
"12345678", niin aiempi toteutus täsmäsi vain sanan ensimmäiseen neljän
merkin osaan "1234", koska sen jälkeen siirryttiin yksi merkki eteenpäin
eikä loppuosa enää voinut täsmätä. Uusi toteutus täsmää sekä alkuosaan
"1234" ja loppuosaan "5678".
Uudessa toteutuksessa poistutaan silmukasta heti, jos etsimiskerralla ei
siirrytty lainkaan eteenpäin. Tällä estetään ikuinen silmukka, mikäli
lauseke täsmää aina samassa paikassa.
---
wcheck-mode.el | 42 +++++++++++++++++++++++++-----------------
1 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/wcheck-mode.el b/wcheck-mode.el
index 834e68a..91aa83e 100644
--- a/wcheck-mode.el
+++ b/wcheck-mode.el
@@ -672,27 +672,35 @@ only visible text elements; all hidden parts are omitted."
(buffer (window-buffer window))
(discard (wcheck-query-language-data language 'regexp-discard t))
(case-fold-search nil)
+ (old-point 0)
words)
-
(with-syntax-table syntax
(goto-char w-start)
- (while (re-search-forward regexp w-end t)
- (cond ((get-char-property (match-beginning 1)
- 'invisible buffer)
- ;; This point is invisible. Let's jump forward to
- ;; next change of "invisible" property.
- (goto-char (next-single-char-property-change
- (match-beginning 1) 'invisible buffer w-end)))
-
- ((or (equal discard "")
- (not (string-match discard
- (match-string-no-properties 1))))
- ;; Add the match to the word list.
- (add-to-list 'words
- (match-string-no-properties 1)
- 'append)
- (goto-char (1+ (point)))))))
+ (catch 'infinite
+ (while (re-search-forward regexp w-end t)
+ (cond ((= (point) old-point)
+ ;; Make sure we don't end up in an infinite loop
+ ;; when the regexp always matches with zero width
+ ;; in the current point position.
+ (throw 'infinite t))
+
+ ((get-char-property (match-beginning 1)
+ 'invisible buffer)
+ ;; This point is invisible. Let's jump forward to
+ ;; next change of "invisible" property.
+ (goto-char (next-single-char-property-change
+ (match-beginning 1) 'invisible buffer
+ w-end)))
+
+ ((or (equal discard "")
+ (not (string-match
+ discard (match-string-no-properties 1))))
+ ;; Add the match to the word list.
+ (add-to-list 'words
+ (match-string-no-properties 1)
+ 'append)))
+ (setq old-point (point)))))
words)))))
- [elpa] 52/352: Uusi tapa lukea tekstiä ikkunasta, (continued)
- [elpa] 52/352: Uusi tapa lukea tekstiä ikkunasta, Stefan Monnier, 2014/07/07
- [elpa] 49/352: Siirretään maalauspyyntölistan muokkaus aiemmaksi, Stefan Monnier, 2014/07/07
- [elpa] 45/352: Tarkistetaan prosessi funktion wcheck-program-executable-p avulla, Stefan Monnier, 2014/07/07
- [elpa] 47/352: Muutetaan funktion nimeä: wcheck-timer-event -> wcheck-timer-read-event, Stefan Monnier, 2014/07/07
- [elpa] 51/352: Lasketaan uuden ajastimen käynnistysviive edellisestä eteenpäin, Stefan Monnier, 2014/07/07
- [elpa] 55/352: Päivitetään myös outline-näkyvyyden muuttuessa, Stefan Monnier, 2014/07/07
- [elpa] 57/352: Maalataan vain näkyvät tekstialueet, hypätään näkymättömien yli, Stefan Monnier, 2014/07/07
- [elpa] 56/352: Muodostetaan säännöllinen lauseke valmiiksi ennen silmukkaa, Stefan Monnier, 2014/07/07
- [elpa] 53/352: Funktio wcheck-read-words englanniksi, Stefan Monnier, 2014/07/07
- [elpa] 54/352: Poistetaan globaalit koukut ajastimesta riippumatta, Stefan Monnier, 2014/07/07
- [elpa] 59/352: Sallitaan lausekkeen täsmääminen heti edellisen perään,
Stefan Monnier <=
- [elpa] 58/352: Funktio wcheck-paint-words englanniksi, Stefan Monnier, 2014/07/07
- [elpa] 63/352: Kutsutaan maalausajastinta useita kertoja peräkkäin, Stefan Monnier, 2014/07/07
- [elpa] 61/352: Lisätään ;;;###autoload -määritykset, Stefan Monnier, 2014/07/07
- [elpa] 62/352: Käsitellään oikein tilanne, jossa joutenoloaika on nolla, Stefan Monnier, 2014/07/07
- [elpa] 60/352: Lisätään ikuisen silmukan tarkistus funktioon wcheck-paint-words, Stefan Monnier, 2014/07/07
- [elpa] 64/352: Kielellistä hienosäätöä, Stefan Monnier, 2014/07/07
- [elpa] 70/352: Pienennetään wcheck-moden reagointiviivettä, Stefan Monnier, 2014/07/07
- [elpa] 69/352: Minibufferille oma virheilmoitus, Stefan Monnier, 2014/07/07
- [elpa] 65/352: Koodin väliotsikot englanniksi, Stefan Monnier, 2014/07/07
- [elpa] 66/352: Kielenvaihtotoiminnolle oma kielihistoriamuuttuja, Stefan Monnier, 2014/07/07