2006-11-01 Zack Rusin <zack@kde.org>
[WebKit-https.git] / WebCore / platform / qt / TextBoundaries.cpp
1 /*
2  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #include "config.h"
29
30 #include "TextBoundaries.h"
31
32 #include <QString>
33 #include <QChar>
34
35 #include <QDebug>
36 #include <stdio.h>
37
38 #define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d\n", __FILE__, __LINE__); } while(0)
39
40
41 // This is very primitive. When I'll have time I'll do the "proper" implementation based on
42 // http://www.unicode.org/reports/tr29/tr29-4.html
43 namespace WebCore
44 {
45
46 int findNextSentenceFromIndex(UChar const* buffer, int len, int position, bool forward)
47 {
48     QString str(reinterpret_cast<QChar const*>(buffer), len);
49     notImplemented();
50     return 0;
51 }
52
53 void findSentenceBoundary(UChar const* buffer, int len, int position, int* start, int* end)
54 {
55     QString str(reinterpret_cast<QChar const*>(buffer), len);
56     notImplemented();
57 }
58
59 int findNextWordFromIndex(UChar const* buffer, int len, int position, bool forward)
60 {
61     QString str(reinterpret_cast<QChar const*>(buffer), len);
62     notImplemented();
63     return 0;
64 }
65
66 void findWordBoundary(UChar const* buffer, int len, int position, int* start, int* end)
67 {
68     QString str(reinterpret_cast<QChar const*>(buffer), len);
69
70     if (position > str.length()) {
71         *start = 0;
72         *end = 0;
73         return;
74     }
75
76     int currentPosition = position - 1;
77     QString foundWord;
78     while (currentPosition >= 0 &&
79            str[currentPosition].isLetter()) {
80         foundWord.prepend(str[currentPosition]);
81         --currentPosition;
82     }
83
84     // currentPosition == 0 means the first char is not letter
85     // currentPosition == -1 means we reached the beginning
86     int startPos = (currentPosition < 0) ? 0 : ++currentPosition;
87     currentPosition = position;
88     if (str[currentPosition].isLetter()) {
89             while (str[currentPosition].isLetter()) {
90                 foundWord.append(str[currentPosition]);
91                 ++currentPosition;
92             }
93     }
94
95     *start = startPos;
96     *end = currentPosition;
97 }
98
99
100 }