summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/speech
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-10-15 16:08:57 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2012-10-15 16:08:57 +0200
commit5466563f4b5b6b86523e3f89bb7f77e5b5270c78 (patch)
tree8caccf7cd03a15207cde3ba282c88bf132482a91 /Source/WebCore/Modules/speech
parent33b26980cb24288b5a9f2590ccf32a949281bb79 (diff)
downloadqtwebkit-5466563f4b5b6b86523e3f89bb7f77e5b5270c78.tar.gz
Imported WebKit commit 0dc6cd75e1d4836eaffbb520be96fac4847cc9d2 (http://svn.webkit.org/repository/webkit/trunk@131300)
WebKit update which introduces the QtWebKitWidgets module that contains the WK1 widgets based API. (In fact it renames QtWebKit to QtWebKitWidgets while we're working on completing the entire split as part of https://bugs.webkit.org/show_bug.cgi?id=99314
Diffstat (limited to 'Source/WebCore/Modules/speech')
-rw-r--r--Source/WebCore/Modules/speech/DOMWindowSpeech.idl22
-rw-r--r--Source/WebCore/Modules/speech/SpeechGrammar.idl16
-rw-r--r--Source/WebCore/Modules/speech/SpeechGrammarList.idl22
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognition.cpp8
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognition.h5
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognition.idl74
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionAlternative.idl15
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionClient.h2
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionController.h4
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionError.idl34
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionEvent.cpp5
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionEvent.h1
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionEvent.idl18
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionResult.idl25
-rw-r--r--Source/WebCore/Modules/speech/SpeechRecognitionResultList.idl16
15 files changed, 119 insertions, 148 deletions
diff --git a/Source/WebCore/Modules/speech/DOMWindowSpeech.idl b/Source/WebCore/Modules/speech/DOMWindowSpeech.idl
index 0c26f03d7..8f737c949 100644
--- a/Source/WebCore/Modules/speech/DOMWindowSpeech.idl
+++ b/Source/WebCore/Modules/speech/DOMWindowSpeech.idl
@@ -23,15 +23,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module window {
- interface [
- Conditional=SCRIPTED_SPEECH,
- Supplemental=DOMWindow
- ] DOMWindowSpeech {
- attribute [V8EnabledAtRuntime] SpeechRecognitionConstructor webkitSpeechRecognition;
- attribute [V8EnabledAtRuntime] SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
- attribute [V8EnabledAtRuntime] SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
- attribute [V8EnabledAtRuntime] SpeechGrammarConstructor webkitSpeechGrammar;
- attribute [V8EnabledAtRuntime] SpeechGrammarListConstructor webkitSpeechGrammarList;
- };
-}
+[
+ Conditional=SCRIPTED_SPEECH,
+ Supplemental=DOMWindow
+] interface DOMWindowSpeech {
+ [V8EnabledAtRuntime] attribute SpeechRecognitionConstructor webkitSpeechRecognition;
+ [V8EnabledAtRuntime] attribute SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
+ [V8EnabledAtRuntime] attribute SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
+ [V8EnabledAtRuntime] attribute SpeechGrammarConstructor webkitSpeechGrammar;
+ [V8EnabledAtRuntime] attribute SpeechGrammarListConstructor webkitSpeechGrammarList;
+};
diff --git a/Source/WebCore/Modules/speech/SpeechGrammar.idl b/Source/WebCore/Modules/speech/SpeechGrammar.idl
index b793ac3ab..340cacf84 100644
--- a/Source/WebCore/Modules/speech/SpeechGrammar.idl
+++ b/Source/WebCore/Modules/speech/SpeechGrammar.idl
@@ -23,12 +23,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH,
- Constructor
- ] SpeechGrammar {
- attribute [URL,CallWith=ScriptExecutionContext] DOMString src;
- attribute float weight;
- };
-}
+[
+ Conditional=SCRIPTED_SPEECH,
+ Constructor
+] interface SpeechGrammar {
+ [URL,CallWith=ScriptExecutionContext] attribute DOMString src;
+ attribute float weight;
+};
diff --git a/Source/WebCore/Modules/speech/SpeechGrammarList.idl b/Source/WebCore/Modules/speech/SpeechGrammarList.idl
index bf4d7c69f..94941da21 100644
--- a/Source/WebCore/Modules/speech/SpeechGrammarList.idl
+++ b/Source/WebCore/Modules/speech/SpeechGrammarList.idl
@@ -23,15 +23,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH,
- IndexedGetter,
- Constructor,
- ] SpeechGrammarList {
- readonly attribute unsigned long length;
- SpeechGrammar item(in [IsIndex] unsigned long index);
- [CallWith=ScriptExecutionContext] void addFromUri(in DOMString src, in [Optional] float weight);
- void addFromString(in DOMString string, in [Optional] float weight);
- };
-}
+[
+ Conditional=SCRIPTED_SPEECH,
+ IndexedGetter,
+ Constructor,
+] interface SpeechGrammarList {
+ readonly attribute unsigned long length;
+ SpeechGrammar item(in [IsIndex] unsigned long index);
+ [CallWith=ScriptExecutionContext] void addFromUri(in DOMString src, in [Optional] float weight);
+ void addFromString(in DOMString string, in [Optional] float weight);
+};
diff --git a/Source/WebCore/Modules/speech/SpeechRecognition.cpp b/Source/WebCore/Modules/speech/SpeechRecognition.cpp
index b87419c43..41f498fa9 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognition.cpp
+++ b/Source/WebCore/Modules/speech/SpeechRecognition.cpp
@@ -54,7 +54,7 @@ void SpeechRecognition::start(ExceptionCode& ec)
}
setPendingActivity(this);
- m_controller->start(this, m_grammars.get(), m_lang, m_continuous, m_maxAlternatives);
+ m_controller->start(this, m_grammars.get(), m_lang, m_continuous, m_interimResults, m_maxAlternatives);
m_started = true;
}
@@ -110,11 +110,6 @@ void SpeechRecognition::didReceiveNoMatch(PassRefPtr<SpeechRecognitionResult> re
dispatchEvent(SpeechRecognitionEvent::createNoMatch(result));
}
-void SpeechRecognition::didDeleteResult(unsigned resultIndex, PassRefPtr<SpeechRecognitionResultList> resultHistory)
-{
- dispatchEvent(SpeechRecognitionEvent::createResultDeleted(resultIndex, resultHistory));
-}
-
void SpeechRecognition::didReceiveError(PassRefPtr<SpeechRecognitionError> error)
{
dispatchEvent(error);
@@ -155,6 +150,7 @@ SpeechRecognition::SpeechRecognition(ScriptExecutionContext* context)
: ActiveDOMObject(context, this)
, m_grammars(SpeechGrammarList::create()) // FIXME: The spec is not clear on the default value for the grammars attribute.
, m_continuous(false)
+ , m_interimResults(false)
, m_maxAlternatives(1)
, m_controller(0)
, m_stoppedByActiveDOMObject(false)
diff --git a/Source/WebCore/Modules/speech/SpeechRecognition.h b/Source/WebCore/Modules/speech/SpeechRecognition.h
index 30d33bcc8..b5ca4dd0a 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognition.h
+++ b/Source/WebCore/Modules/speech/SpeechRecognition.h
@@ -56,6 +56,8 @@ public:
void setLang(const String& lang) { m_lang = lang; }
bool continuous() { return m_continuous; }
void setContinuous(bool continuous) { m_continuous = continuous; }
+ bool interimResults() { return m_interimResults; }
+ void setInterimResults(bool interimResults) { m_interimResults = interimResults; }
unsigned long maxAlternatives() { return m_maxAlternatives; }
void setMaxAlternatives(unsigned long maxAlternatives) { m_maxAlternatives = maxAlternatives; }
@@ -73,7 +75,6 @@ public:
void didEndAudio();
void didReceiveResult(PassRefPtr<SpeechRecognitionResult>, unsigned long resultIndex, PassRefPtr<SpeechRecognitionResultList> resultHistory);
void didReceiveNoMatch(PassRefPtr<SpeechRecognitionResult>);
- void didDeleteResult(unsigned resultIndex, PassRefPtr<SpeechRecognitionResultList> resultHistory);
void didReceiveError(PassRefPtr<SpeechRecognitionError>);
void didStart();
void didEnd();
@@ -96,7 +97,6 @@ public:
DEFINE_ATTRIBUTE_EVENT_LISTENER(audioend);
DEFINE_ATTRIBUTE_EVENT_LISTENER(result);
DEFINE_ATTRIBUTE_EVENT_LISTENER(nomatch);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(resultdeleted);
DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
DEFINE_ATTRIBUTE_EVENT_LISTENER(start);
DEFINE_ATTRIBUTE_EVENT_LISTENER(end);
@@ -116,6 +116,7 @@ private:
RefPtr<SpeechGrammarList> m_grammars;
String m_lang;
bool m_continuous;
+ bool m_interimResults;
unsigned long m_maxAlternatives;
EventTargetData m_eventTargetData;
diff --git a/Source/WebCore/Modules/speech/SpeechRecognition.idl b/Source/WebCore/Modules/speech/SpeechRecognition.idl
index 6e1b55eef..1f85d35c5 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognition.idl
+++ b/Source/WebCore/Modules/speech/SpeechRecognition.idl
@@ -23,44 +23,42 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH,
- ActiveDOMObject,
- Constructor,
- CallWith=ScriptExecutionContext,
- EventTarget,
- ] SpeechRecognition {
- attribute SpeechGrammarList grammars;
- attribute DOMString lang;
- attribute boolean continuous;
- attribute unsigned long maxAlternatives;
+[
+ Conditional=SCRIPTED_SPEECH,
+ ActiveDOMObject,
+ Constructor,
+ CallWith=ScriptExecutionContext,
+ EventTarget,
+] interface SpeechRecognition {
+ attribute SpeechGrammarList grammars;
+ attribute DOMString lang;
+ attribute boolean continuous;
+ attribute boolean interimResults;
+ attribute unsigned long maxAlternatives;
- void start() raises (DOMException);
- [ImplementedAs=stopFunction] void stop();
- void abort();
+ void start() raises (DOMException);
+ [ImplementedAs=stopFunction] void stop();
+ void abort();
- attribute EventListener onaudiostart;
- attribute EventListener onsoundstart;
- attribute EventListener onspeechstart;
- attribute EventListener onspeechend;
- attribute EventListener onsoundend;
- attribute EventListener onaudioend;
- attribute EventListener onresult;
- attribute EventListener onnomatch;
- attribute EventListener onresultdeleted;
- attribute EventListener onerror;
- attribute EventListener onstart;
- attribute EventListener onend;
+ attribute EventListener onaudiostart;
+ attribute EventListener onsoundstart;
+ attribute EventListener onspeechstart;
+ attribute EventListener onspeechend;
+ attribute EventListener onsoundend;
+ attribute EventListener onaudioend;
+ attribute EventListener onresult;
+ attribute EventListener onnomatch;
+ attribute EventListener onerror;
+ attribute EventListener onstart;
+ attribute EventListener onend;
- // EventTarget interface
- void addEventListener(in DOMString type,
- in EventListener listener,
- in [Optional] boolean useCapture);
- void removeEventListener(in DOMString type,
- in EventListener listener,
- in [Optional] boolean useCapture);
- boolean dispatchEvent(in Event evt)
- raises(EventException);
- };
-}
+ // EventTarget interface
+ void addEventListener(in DOMString type,
+ in EventListener listener,
+ in [Optional] boolean useCapture);
+ void removeEventListener(in DOMString type,
+ in EventListener listener,
+ in [Optional] boolean useCapture);
+ boolean dispatchEvent(in Event evt)
+ raises(EventException);
+};
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionAlternative.idl b/Source/WebCore/Modules/speech/SpeechRecognitionAlternative.idl
index a9d4dec3d..03cec18c8 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionAlternative.idl
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionAlternative.idl
@@ -23,12 +23,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH
- ] SpeechRecognitionAlternative {
- readonly attribute DOMString transcript;
- readonly attribute float confidence;
- };
-}
-
+[
+ Conditional=SCRIPTED_SPEECH
+] interface SpeechRecognitionAlternative {
+ readonly attribute DOMString transcript;
+ readonly attribute float confidence;
+};
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionClient.h b/Source/WebCore/Modules/speech/SpeechRecognitionClient.h
index 6235bb2ba..683ae2186 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionClient.h
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionClient.h
@@ -38,7 +38,7 @@ class SpeechRecognition;
class SpeechRecognitionClient {
public:
- virtual void start(SpeechRecognition*, const SpeechGrammarList*, const String& lang, bool continuous, unsigned long maxAlternatives) = 0;
+ virtual void start(SpeechRecognition*, const SpeechGrammarList*, const String& lang, bool continuous, bool interimResults, unsigned long maxAlternatives) = 0;
virtual void stop(SpeechRecognition*) = 0;
virtual void abort(SpeechRecognition*) = 0;
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionController.h b/Source/WebCore/Modules/speech/SpeechRecognitionController.h
index 9c4a119da..b34d0feb1 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionController.h
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionController.h
@@ -38,9 +38,9 @@ class SpeechRecognitionController : public Supplement<Page> {
public:
virtual ~SpeechRecognitionController();
- void start(SpeechRecognition* recognition, const SpeechGrammarList* grammars, const String& lang, bool continuous, unsigned long maxAlternatives)
+ void start(SpeechRecognition* recognition, const SpeechGrammarList* grammars, const String& lang, bool continuous, bool interimResults, unsigned long maxAlternatives)
{
- m_client->start(recognition, grammars, lang, continuous, maxAlternatives);
+ m_client->start(recognition, grammars, lang, continuous, interimResults, maxAlternatives);
}
void stop(SpeechRecognition* recognition) { m_client->stop(recognition); }
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionError.idl b/Source/WebCore/Modules/speech/SpeechRecognitionError.idl
index f37cd1338..d42b34d10 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionError.idl
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionError.idl
@@ -23,22 +23,20 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH,
- ConstructorTemplate=Event
- ] SpeechRecognitionError : Event {
- const unsigned short OTHER = 0;
- const unsigned short NO_SPEECH = 1;
- const unsigned short ABORTED = 2;
- const unsigned short AUDIO_CAPTURE = 3;
- const unsigned short NETWORK = 4;
- const unsigned short NOT_ALLOWED = 5;
- const unsigned short SERVICE_NOT_ALLOWED = 6;
- const unsigned short BAD_GRAMMAR = 7;
- const unsigned short LANGUAGE_NOT_SUPPORTED = 8;
+[
+ Conditional=SCRIPTED_SPEECH,
+ ConstructorTemplate=Event
+] interface SpeechRecognitionError : Event {
+ const unsigned short OTHER = 0;
+ const unsigned short NO_SPEECH = 1;
+ const unsigned short ABORTED = 2;
+ const unsigned short AUDIO_CAPTURE = 3;
+ const unsigned short NETWORK = 4;
+ const unsigned short NOT_ALLOWED = 5;
+ const unsigned short SERVICE_NOT_ALLOWED = 6;
+ const unsigned short BAD_GRAMMAR = 7;
+ const unsigned short LANGUAGE_NOT_SUPPORTED = 8;
- readonly attribute [InitializedByEventConstructor] unsigned short code;
- readonly attribute [InitializedByEventConstructor] DOMString message;
- };
-}
+ [InitializedByEventConstructor] readonly attribute unsigned short code;
+ [InitializedByEventConstructor] readonly attribute DOMString message;
+};
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionEvent.cpp b/Source/WebCore/Modules/speech/SpeechRecognitionEvent.cpp
index 899d5a453..e2a8f7a1f 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionEvent.cpp
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionEvent.cpp
@@ -56,11 +56,6 @@ PassRefPtr<SpeechRecognitionEvent> SpeechRecognitionEvent::createNoMatch(PassRef
return adoptRef(new SpeechRecognitionEvent(eventNames().nomatchEvent, result, 0, 0));
}
-PassRefPtr<SpeechRecognitionEvent> SpeechRecognitionEvent::createResultDeleted(short resultIndex, PassRefPtr<SpeechRecognitionResultList> resultHistory)
-{
- return adoptRef(new SpeechRecognitionEvent(eventNames().resultdeletedEvent, 0, resultIndex, resultHistory));
-}
-
const AtomicString& SpeechRecognitionEvent::interfaceName() const
{
return eventNames().interfaceForSpeechRecognitionEvent;
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionEvent.h b/Source/WebCore/Modules/speech/SpeechRecognitionEvent.h
index fdcc93de9..d445c3a8d 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionEvent.h
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionEvent.h
@@ -55,7 +55,6 @@ public:
static PassRefPtr<SpeechRecognitionEvent> createResult(PassRefPtr<SpeechRecognitionResult>, short resultIndex, PassRefPtr<SpeechRecognitionResultList> resultHistory);
static PassRefPtr<SpeechRecognitionEvent> createNoMatch(PassRefPtr<SpeechRecognitionResult>);
- static PassRefPtr<SpeechRecognitionEvent> createResultDeleted(short resultIndex, PassRefPtr<SpeechRecognitionResultList> resultHistory);
SpeechRecognitionResult* result() const { return m_result.get(); }
short resultIndex() const { return m_resultIndex; } // FIXME: Spec says this should be short, but other indices are unsigned ints.
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionEvent.idl b/Source/WebCore/Modules/speech/SpeechRecognitionEvent.idl
index f0a981851..8eb789c0c 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionEvent.idl
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionEvent.idl
@@ -23,13 +23,11 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module events {
- interface [
- Conditional=SCRIPTED_SPEECH,
- ConstructorTemplate=Event
- ] SpeechRecognitionEvent : Event {
- readonly attribute [InitializedByEventConstructor] SpeechRecognitionResult result;
- readonly attribute [InitializedByEventConstructor] short resultIndex;
- readonly attribute [InitializedByEventConstructor] SpeechRecognitionResultList resultHistory;
- };
-}
+[
+ Conditional=SCRIPTED_SPEECH,
+ ConstructorTemplate=Event
+] interface SpeechRecognitionEvent : Event {
+ [InitializedByEventConstructor] readonly attribute SpeechRecognitionResult result;
+ [InitializedByEventConstructor] readonly attribute short resultIndex;
+ [InitializedByEventConstructor] readonly attribute SpeechRecognitionResultList resultHistory;
+};
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionResult.idl b/Source/WebCore/Modules/speech/SpeechRecognitionResult.idl
index b3356c15d..609d6ea87 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionResult.idl
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionResult.idl
@@ -23,17 +23,14 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH,
- CustomIsReachable,
- IndexedGetter,
- V8DependentLifetime
- ] SpeechRecognitionResult {
- readonly attribute unsigned long length;
- SpeechRecognitionAlternative item(in [IsIndex] unsigned long index);
- readonly attribute boolean final;
- readonly attribute Document emma;
- };
-}
-
+[
+ Conditional=SCRIPTED_SPEECH,
+ CustomIsReachable,
+ IndexedGetter,
+ V8DependentLifetime
+] interface SpeechRecognitionResult {
+ readonly attribute unsigned long length;
+ SpeechRecognitionAlternative item(in [IsIndex] unsigned long index);
+ readonly attribute boolean final;
+ readonly attribute Document emma;
+};
diff --git a/Source/WebCore/Modules/speech/SpeechRecognitionResultList.idl b/Source/WebCore/Modules/speech/SpeechRecognitionResultList.idl
index fd7be4f1c..57e31118e 100644
--- a/Source/WebCore/Modules/speech/SpeechRecognitionResultList.idl
+++ b/Source/WebCore/Modules/speech/SpeechRecognitionResultList.idl
@@ -23,12 +23,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module core {
- interface [
- Conditional=SCRIPTED_SPEECH,
- IndexedGetter
- ] SpeechRecognitionResultList {
- readonly attribute unsigned long length;
- SpeechRecognitionResult item(in [IsIndex] unsigned long index);
- };
-}
+[
+ Conditional=SCRIPTED_SPEECH,
+ IndexedGetter
+] interface SpeechRecognitionResultList {
+ readonly attribute unsigned long length;
+ SpeechRecognitionResult item(in [IsIndex] unsigned long index);
+};