2 * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 #include "HTMLInterchange.h"
29 #include "CharacterNames.h"
31 #include "TextIterator.h"
37 String
convertedSpaceString()
39 static String convertedSpaceString
;
40 if (convertedSpaceString
.isNull()) {
41 convertedSpaceString
= "<span class=\"";
42 convertedSpaceString
+= AppleConvertedSpace
;
43 convertedSpaceString
+= "\">";
44 convertedSpaceString
.append(noBreakSpace
);
45 convertedSpaceString
+= "</span>";
47 return convertedSpaceString
;
50 } // end anonymous namespace
52 String
convertHTMLTextToInterchangeFormat(const String
& in
, const Text
* node
)
54 // Assume all the text comes from node.
55 if (node
->renderer() && node
->renderer()->style()->preserveNewline())
61 unsigned consumed
= 0;
62 while (i
< in
.length()) {
64 if (isCollapsibleWhitespace(in
[i
])) {
65 // count number of adjoining spaces
67 while (j
< in
.length() && isCollapsibleWhitespace(in
[j
]))
69 unsigned count
= j
- i
;
72 unsigned add
= count
% 3;
75 append(s
, convertedSpaceString());
77 append(s
, convertedSpaceString());
81 if (i
== 0 || i
+ 1 == in
.length()) // at start or end of string
82 append(s
, convertedSpaceString());
89 append(s
, convertedSpaceString());
91 } else if (i
+ 2 == in
.length()) {
93 append(s
, convertedSpaceString());
94 append(s
, convertedSpaceString());
96 append(s
, convertedSpaceString());
108 return String::adopt(s
);
111 } // namespace WebCore