diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-07-26 11:21:47 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-07-26 11:34:20 +0200 |
| commit | 5e016233a9fe77258edd85a2dc746d20e6db46a0 (patch) | |
| tree | 6ad4e754aa9a3dec4ca1f8f56e5b3e86cd2d2d45 | |
| parent | 5b9b15333670e49e708c71baaa824943bc1796ba (diff) | |
| download | vis-5e016233a9fe77258edd85a2dc746d20e6db46a0.tar.gz vis-5e016233a9fe77258edd85a2dc746d20e6db46a0.tar.xz | |
text-object: add new functions to search for words
| -rw-r--r-- | text-objects.c | 31 | ||||
| -rw-r--r-- | text-objects.h | 3 |
2 files changed, 34 insertions, 0 deletions
diff --git a/text-objects.c b/text-objects.c index 815e36a..b06d680 100644 --- a/text-objects.c +++ b/text-objects.c @@ -13,6 +13,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include <string.h> #include <ctype.h> #include "text-motions.h" #include "text-objects.h" @@ -165,6 +166,36 @@ Filerange text_object_word_outer(Text *txt, size_t pos) { return r; } +Filerange text_object_word_find_next(Text *txt, size_t pos, const char *word) { + size_t len = strlen(word); + for (;;) { + size_t match_pos = text_find_next(txt, pos, word); + if (match_pos != pos) { + Filerange match_word = text_object_word(txt, match_pos); + if (text_range_size(&match_word) == len) + return match_word; + pos = match_pos; + } else { + return text_range_empty(); + } + } +} + +Filerange text_object_word_find_prev(Text *txt, size_t pos, const char *word) { + size_t len = strlen(word); + for (;;) { + size_t match_pos = text_find_prev(txt, pos, word); + if (match_pos != pos) { + Filerange match_word = text_object_word(txt, match_pos); + if (text_range_size(&match_word) == len) + return match_word; + pos = match_pos; + } else { + return text_range_empty(); + } + } +} + Filerange text_object_line(Text *txt, size_t pos) { Filerange r; r.start = text_line_begin(txt, pos); diff --git a/text-objects.h b/text-objects.h index 3e08a91..aec84b8 100644 --- a/text-objects.h +++ b/text-objects.h @@ -14,6 +14,9 @@ Filerange text_object_word(Text*, size_t pos); /* includes trailing white spaces. if at pos happens to be a white space * include all neighbouring leading white spaces and the following word. */ Filerange text_object_word_outer(Text*, size_t pos); +/* find next occurance of `word' (as word not substring) in forward/backward direction */ +Filerange text_object_word_find_next(Text*, size_t pos, const char *word); +Filerange text_object_word_find_prev(Text*, size_t pos, const char *word); /* same semantics as above but for a longword (i.e. delimited by white spaces) */ Filerange text_object_longword(Text*, size_t pos); Filerange text_object_longword_outer(Text*, size_t pos); |
