1db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block/*
2db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Apple Inc. All rights reserved.
3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *
4db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Redistribution and use in source and binary forms, with or without
5db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * modification, are permitted provided that the following conditions
6db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * are met:
7db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 1. Redistributions of source code must retain the above copyright
8db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *    notice, this list of conditions and the following disclaimer.
9db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 2. Redistributions in binary form must reproduce the above copyright
10db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *    notice, this list of conditions and the following disclaimer in the
11db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *    documentation and/or other materials provided with the distribution.
12db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *
13db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE POSSIBILITY OF SUCH DAMAGE.
24db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block */
25db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WKString.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WKStringPrivate.h"
29db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WKAPICast.h"
31db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebKit;
33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWKTypeID WKStringGetTypeID()
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toAPI(WebString::APIType);
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
38dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWKStringRef WKStringCreateWithUTF8CString(const char* string)
40dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebString> webString = WebString::createFromUTF8String(string);
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toAPI(webString.release().leakRef());
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
44dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WKStringIsEmpty(WKStringRef stringRef)
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toImpl(stringRef)->isEmpty();
48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
49dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochsize_t WKStringGetLength(WKStringRef stringRef)
512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return toImpl(stringRef)->length();
532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochsize_t WKStringGetCharacters(WKStringRef stringRef, WKChar* buffer, size_t bufferLength)
562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    COMPILE_ASSERT(sizeof(WKChar) == sizeof(UChar), WKStringGetCharacters_sizeof_WKChar_matches_UChar);
582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return (toImpl(stringRef)->getCharacters(static_cast<UChar*>(buffer), bufferLength));
592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochsize_t WKStringGetMaximumUTF8CStringSize(WKStringRef stringRef)
62dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toImpl(stringRef)->maximumUTF8CStringSize();
64dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
65db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochsize_t WKStringGetUTF8CString(WKStringRef stringRef, char* buffer, size_t bufferSize)
67db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toImpl(stringRef)->getUTF8CString(buffer, bufferSize);
69db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
70db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WKStringIsEqual(WKStringRef aRef, WKStringRef bRef)
72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toImpl(aRef)->equal(toImpl(bRef));
74db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
75db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WKStringIsEqualToUTF8CString(WKStringRef aRef, const char* b)
77db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toImpl(aRef)->equalToUTF8String(b);
79db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
80db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
812bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WKStringIsEqualToUTF8CStringIgnoringCase(WKStringRef aRef, const char* b)
822bde8e466a4451c7319e3a072d118917957d6554Steve Block{
832bde8e466a4451c7319e3a072d118917957d6554Steve Block    return toImpl(aRef)->equalToUTF8StringIgnoringCase(b);
842bde8e466a4451c7319e3a072d118917957d6554Steve Block}
852bde8e466a4451c7319e3a072d118917957d6554Steve Block
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWKStringRef WKStringCreateWithJSString(JSStringRef jsStringRef)
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebString> webString = WebString::create(jsStringRef);
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toAPI(webString.release().leakRef());
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochJSStringRef WKStringCopyJSString(WKStringRef stringRef)
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toImpl(stringRef)->createJSString();
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
96