📄 scripter.hpp
字号:
/****************License************************************************
*
* Copyright 2000-2003. ScanSoft, Inc.
*
* Use of this software is subject to notices and obligations set forth
* in the SpeechWorks Public License - Software Version 1.2 which is
* included with this software.
*
* ScanSoft is a registered trademark of ScanSoft, Inc., and OpenSpeech,
* SpeechWorks and the SpeechWorks logo are registered trademarks or
* trademarks of SpeechWorks International, Inc. in the United States
* and other countries.
*
***********************************************************************/
/***********************************************************************
*
* ECMA Script evaluation engine
*
* Using the VXIjsi interface, this layer is employed by the VoiceXML
* Interpreter to set and retrieve script variables and evaluate expressions.
*
***********************************************************************/
#ifndef _EXE_CONT
#define _EXE_CONT
#include <vxibuildopts.h>
#if P_VXI
#include "vxi/VXIvalue.h"
#include <vector>
#include <string>
extern "C" struct VXIjsiInterface;
extern "C" struct VXIjsiContext;
typedef std::basic_string<VXIchar> vxistring;
class Scripter {
// All functions, except the destructor, may throw exceptions. These fall
// into two classes. The interpreter events represent semantic errors
// which could in principal be handled by the application. And the severe
// JavaScriptErrors indicate serious errors with the VXIjsi layer.
//
// VXIException::InterpreterEvent(EV_ERROR_ECMASCRIPT)
// VXIException::JavaScriptError();
public:
Scripter(VXIjsiInterface* jsiapi);
~Scripter();
bool IsVarDefined(const vxistring & name);
// Determines whether or not the named variable is defined.
//
// Returns: true if variable has been defined
// false otherwise
bool IsVarDeclared(const vxistring & name);
// Determines whether or not the named variable is declared.
//
// Returns: true if variable has been declared
// false otherwise
void MakeVar(const vxistring & name, const vxistring & expr);
void MakeVar(const vxistring & name, const VXIValue * value);
// Creates a new variablevariable to the indicated expression.
void SetVar(const vxistring & name, const vxistring & expr);
// Sets an existing variable to the indicated expression.
void SetVarReadOnly(const vxistring & name);
void ClearVar(const vxistring & name);
// Sets a variable to 'undefined'.
void SetString(const vxistring & var, const vxistring & val);
// Creates a new variable or sets an existing variable to the indicated
// string.
void SetValue(const vxistring & var, const VXIValue * value);
// Creates a new variable or sets an existing variable to the indicated
// value type. This may be used for complex types such as Object.
VXIValue* GetValue(const vxistring & name) const;
// Retrieves a variable from ECMAScript. The conversion is as follows:
//
// Undefined, Null --> NULL pointer
// String --> VXIString
// Boolean --> VXIFloat or VXIInteger {true, false} -> {1, 0}
// Number --> VXIFloat or VXIInteger
// Object --> VXIMap
//
// NOTE: The caller must free the resulting VXIValue.
void PushScope(const vxistring & name, bool alias = false);
// Pushes a new variable scope onto the stack with the given name. New
// variables will be defined in this scope, unless they are explicitly
// referenced using <scope>.<variable_name> as in application.lastresult$.
void PopScope();
// Pops the current scope, destroying it and any associated variables.
bool CurrentScope(const vxistring & name) const;
// Checks the name of the current scope against the argument.
//
// Returns: true if the current scope matches the requested name.
// false otherwise
void EvalScript(const vxistring & script);
// Simply evaluates an ECMAScript script and returns nothing.
VXIint EvalScriptToInt(const vxistring & script);
// Evaluates an ECMAScript script, and converts the result to an integer.
void EvalScriptToString(const vxistring & script, vxistring & result);
// Evaluates an ECMAScript script, and converts the result to a string.
VXIValue * EvalScriptToValue(const vxistring & script);
// Evaluates an ECMAScript script, and converts the result to a string.
// NOTE: The caller must free the resulting VXIValue.
bool TestCondition(const vxistring & script);
// Evaluates an expression as a boolean.
private:
void maybe_throw_js_error(int err) const;
Scripter(const Scripter &); // no implementation
Scripter & operator=(const Scripter &); // no implementation
private:
typedef std::vector<vxistring> SCOPESTACK;
SCOPESTACK scopeStack;
VXIjsiInterface * jsi_api;
VXIjsiContext * jsi_context;
};
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -