source: webkit/trunk/JavaScriptCore/API/JSStringRef.cpp@ 27730

Last change on this file since 27730 was 27730, checked in by Darin Adler, 18 years ago

Reviewed by Geoff.

  • fix use of prefix and config.h, got rid of a few unneeded things in the PCRE code; no behavior changes
  • API/JSBase.cpp: Added include of config.h.
  • API/JSCallbackConstructor.cpp: Ditto.
  • API/JSCallbackFunction.cpp: Ditto.
  • API/JSCallbackObject.cpp: Ditto.
  • API/JSClassRef.cpp: Ditto.
  • API/JSContextRef.cpp: Ditto.
  • API/JSObjectRef.cpp: Ditto.
  • API/JSStringRef.cpp: Ditto.
  • API/JSValueRef.cpp: Ditto.
  • JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround. Moved new/delete macros after includes, as they are in WebCore's prefix. Removed "config.h".
  • pcre/dftables.cpp: (main): Changed back to not use a separate maketables function. This is needed for PCRE, but not helpful for our use. Also changed the tables to all be 128 entries long instead of 256, since only the first 128 are ever used.
  • pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab, which was only being used to check hex digits. Changed all uses of TRUE and FALSE to use the C++ true and false instead. (check_escape): Just the TRUE/FALSE thing. (is_counted_repeat): Ditto. (could_be_empty_branch): Ditto. (get_othercase_range): Ditto. (compile_branch): Ditto. (compile_regex): Ditto. (is_anchored): Ditto. (is_startline): Ditto. (find_firstassertedchar): Ditto. (jsRegExpCompile): Ditto.
  • pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and FALSE to use the C++ true and false instead. (match_ref): Just the TRUE/FALSE thing. (match): Ditto. Removed some unneeded braces. (jsRegExpExecute): Just the TRUE/FALSE thing.
  • pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top of the file instead of the bottom, so they can be used. Also changed the table sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE. Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to be a macro instead of a extern int.
  • pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
  • pcre/pcre_tables.cpp: Made table sizes explicit.
  • pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
File size: 3.5 KB
Line 
1// -*- mode: c++; c-basic-offset: 4 -*-
2/*
3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "config.h"
28#include "JSStringRef.h"
29
30#include <wtf/Platform.h>
31
32#include "APICast.h"
33#include <kjs/JSLock.h>
34#include <kjs/JSType.h>
35#include <kjs/internal.h>
36#include <kjs/operations.h>
37#include <kjs/ustring.h>
38#include <kjs/value.h>
39
40using namespace KJS;
41
42JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars)
43{
44 JSLock lock;
45 return toRef(UString(reinterpret_cast<const UChar*>(chars), static_cast<int>(numChars)).rep()->ref());
46}
47
48JSStringRef JSStringCreateWithUTF8CString(const char* string)
49{
50 JSLock lock;
51 // FIXME: <rdar://problem/4949018>
52 return toRef(UString(string).rep()->ref());
53}
54
55JSStringRef JSStringRetain(JSStringRef string)
56{
57 JSLock lock;
58 UString::Rep* rep = toJS(string);
59 return toRef(rep->ref());
60}
61
62void JSStringRelease(JSStringRef string)
63{
64 JSLock lock;
65 UString::Rep* rep = toJS(string);
66 rep->deref();
67}
68
69size_t JSStringGetLength(JSStringRef string)
70{
71 UString::Rep* rep = toJS(string);
72 return rep->size();
73}
74
75const JSChar* JSStringGetCharactersPtr(JSStringRef string)
76{
77 UString::Rep* rep = toJS(string);
78 return reinterpret_cast<const JSChar*>(rep->data());
79}
80
81size_t JSStringGetMaximumUTF8CStringSize(JSStringRef string)
82{
83 UString::Rep* rep = toJS(string);
84
85 // Any UTF8 character > 3 bytes encodes as a UTF16 surrogate pair.
86 return rep->size() * 3 + 1; // + 1 for terminating '\0'
87}
88
89size_t JSStringGetUTF8CString(JSStringRef string, char* buffer, size_t bufferSize)
90{
91 JSLock lock;
92 UString::Rep* rep = toJS(string);
93 CString cString = UString(rep).UTF8String();
94
95 size_t length = std::min(bufferSize, cString.size() + 1); // + 1 for terminating '\0'
96 memcpy(buffer, cString.c_str(), length);
97 return length;
98}
99
100bool JSStringIsEqual(JSStringRef a, JSStringRef b)
101{
102 JSLock lock;
103
104 UString::Rep* aRep = toJS(a);
105 UString::Rep* bRep = toJS(b);
106
107 return UString(aRep) == UString(bRep);
108}
109
110bool JSStringIsEqualToUTF8CString(JSStringRef a, const char* b)
111{
112 JSStringRef bBuf = JSStringCreateWithUTF8CString(b);
113 bool result = JSStringIsEqual(a, bBuf);
114 JSStringRelease(bBuf);
115
116 return result;
117}
Note: See TracBrowser for help on using the repository browser.