SBjsiAPI.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:13k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  *****************************************************************************
  3.  *
  4.  * SBjsi JavaScript (ECMAScript) Engine API
  5.  *
  6.  * SBjsi API, a function library implementation of the VXIjsi abstract
  7.  * interface for interacting with a JavaScript (ECMAScript) engine.
  8.  * This provides functionality for creating JavaScript execution
  9.  * contexts, manipulating JavaScript scopes, manipulating variables
  10.  * within those scopes, and evaluating JavaScript expressions/scripts.
  11.  *
  12.  * There is one JavaScript interface per thread/line.
  13.  *
  14.  *****************************************************************************
  15.  ****************************************************************************/
  16. /****************License************************************************
  17.  * Vocalocity OpenVXI
  18.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  19.  * This program is free software; you can redistribute it and/or
  20.  * modify it under the terms of the GNU General Public License
  21.  * as published by the Free Software Foundation; either version 2
  22.  * of the License, or (at your option) any later version.
  23.  *  
  24.  * This program is distributed in the hope that it will be useful,
  25.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.  * GNU General Public License for more details.
  28.  *
  29.  * You should have received a copy of the GNU General Public License
  30.  * along with this program; if not, write to the Free Software
  31.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  32.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  33.  * registered trademarks of Vocalocity, Inc. 
  34.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  35.  * by Vocalocity.
  36.  ***********************************************************************/
  37. #ifndef _SBJSIAPI_H
  38. #define _SBJSIAPI_H
  39. #include "VXIjsi.h"                    /* For VXIjsi base interface */
  40. #include "VXIheaderPrefix.h"
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44. /**
  45.  * Return the version
  46.  */
  47. VXIint32 SBjsiGetVersion(void);
  48. VXIint32 SBjsiSeGetVersion(void);
  49. /**
  50.  * Return the implementation name
  51.  */
  52. const VXIchar* SBjsiGetImplementationName(void);
  53. const VXIchar* SBjsiSeGetImplementationName(void);
  54. /**
  55.  * Create and initialize a new script context
  56.  *
  57.  * This creates a new context. Currently one context is created per
  58.  * thread, but the implementation must support the ability to have
  59.  * multiple contexts per thread.
  60.  *
  61.  * @param context  [OUT] Newly created context
  62.  *
  63.  * @result VXIjsiResult 0 on success 
  64.  */
  65. VXIjsiResult SBjsiCreateContext(VXIjsiInterface        *pThis,
  66. VXIjsiContext         **context);
  67. VXIjsiResult SBjsiSeCreateContext(VXIjsiInterface        *pThis,
  68.   VXIjsiContext         **context);
  69. /**
  70.  * Destroy a script context, clean up storage if required
  71.  *
  72.  * @param context  [IN] Context to destroy
  73.  *
  74.  * @result VXIjsiResult 0 on success
  75.  */
  76. VXIjsiResult SBjsiDestroyContext(VXIjsiInterface        *pThis,
  77.  VXIjsiContext         **context);
  78. VXIjsiResult SBjsiSeDestroyContext(VXIjsiInterface        *pThis,
  79.    VXIjsiContext         **context);
  80. /**
  81.  * Create a script variable relative to the current scope, initialized
  82.  *  to an expression
  83.  *
  84.  * NOTE: When there is an expression, the expression is evaluated,
  85.  *  then the value of the evaluated expression (the final
  86.  *  sub-expression) assigned. Thus an expression of "1; 2;" actually
  87.  *  assigns 2 to the variable.
  88.  *
  89.  * @param context  [IN] JavaScript context to create the variable within
  90.  * @param name     [IN] Name of the variable to create
  91.  * @param expr     [IN] Expression to set the initial value of the variable 
  92.  *                      (if NULL or empty the variable is set to JavaScript 
  93.  *                      Undefined as required for VoiceXML 1.0 <var>)
  94.  *
  95.  * @result VXIjsiResult 0 on success 
  96.  */
  97. VXIjsiResult SBjsiCreateVarExpr(VXIjsiInterface        *pThis,
  98. VXIjsiContext          *context, 
  99. const VXIchar          *name, 
  100. const VXIchar          *expr);
  101. VXIjsiResult SBjsiSeCreateVarExpr(VXIjsiInterface        *pThis,
  102.   VXIjsiContext          *context, 
  103.   const VXIchar          *name, 
  104.   const VXIchar          *expr);
  105.   
  106. /**
  107.  * Create a script variable relative to the current scope, initialized
  108.  *  to a VXIValue based value
  109.  *
  110.  * @param context  [IN] JavaScript context to create the variable within
  111.  * @param name     [IN] Name of the variable to create
  112.  * @param value    [IN] VXIValue based value to set the initial value of 
  113.  *                      the variable (if NULL the variable is set to 
  114.  *                      JavaScript Undefined as required for VoiceXML 1.0
  115.  *                      <var>). VXIMap is used to pass JavaScript objects.
  116.  *
  117.  * @result VXIjsiResult 0 on success 
  118.  */
  119. VXIjsiResult SBjsiCreateVarValue(VXIjsiInterface        *pThis,
  120.  VXIjsiContext          *context, 
  121.  const VXIchar          *name, 
  122.  const VXIValue         *value);
  123. VXIjsiResult SBjsiSeCreateVarValue(VXIjsiInterface        *pThis,
  124.    VXIjsiContext          *context, 
  125.    const VXIchar          *name, 
  126.    const VXIValue         *value);
  127.   
  128. /**
  129.  * Set a script variable to an expression relative to the current scope
  130.  *
  131.  * NOTE: The expression is evaluated, then the value of the
  132.  *  evaluated expression (the final sub-expression) assigned. Thus
  133.  *  an expression of "1; 2;" actually assigns 2 to the variable.
  134.  *
  135.  * @param context  [IN] JavaScript context to set the variable within
  136.  * @param name     [IN] Name of the variable to set
  137.  * @param expr     [IN] Expression to be assigned
  138.  *
  139.  * @result VXIjsiResult 0 on success 
  140.  */
  141. VXIjsiResult SBjsiSetVarExpr(VXIjsiInterface        *pThis,
  142.      VXIjsiContext          *context, 
  143.      const VXIchar          *name, 
  144.      const VXIchar          *expr);
  145.   
  146. /**
  147.  * Set a script variable to a DOMDocument relative to the current scope
  148.  *
  149.  * NOTE: The expression is evaluated, then the value of the
  150.  *  evaluated expression (the final sub-expression) assigned. Thus
  151.  *  an expression of "1; 2;" actually assigns 2 to the variable.
  152.  *
  153.  * @param context  [IN] JavaScript context to set the variable within
  154.  * @param name     [IN] Name of the variable to set
  155.  * @param doc      [IN] DOMDocument to be assigned.  In this implementation,
  156.  *                      the doc VXIPtr is assumed to point to a 
  157.  *                      Xerces DOMDocument.
  158.  *
  159.  * @result VXIjsiResult 0 on success 
  160.  */
  161. VXIjsiResult SBjsiCreateVarDOM(
  162.     VXIjsiInterface   *pThis,
  163.     VXIjsiContext     *context, 
  164.     const VXIchar     *name, 
  165.     VXIPtr            *doc );
  166. /**
  167.  * Set a script variable to a value relative to the current scope
  168.  *
  169.  * @param context  [IN] JavaScript context to set the variable within
  170.  * @param name     [IN] Name of the variable to set
  171.  * @param value    [IN] VXIValue based value to be assigned. VXIMap is 
  172.  *                      used to pass JavaScript objects.
  173.  *
  174.  * @result VXIjsiResult 0 on success 
  175.  */
  176. VXIjsiResult SBjsiSetVarValue(VXIjsiInterface        *pThis,
  177.       VXIjsiContext          *context, 
  178.       const VXIchar          *name, 
  179.       const VXIValue         *value);
  180. /**
  181.  * Get the value of a variable
  182.  *
  183.  * @param context  [IN]  JavaScript context to get the variable from
  184.  * @param name     [IN]  Name of the variable to get
  185.  * @param value    [OUT] Value of the variable, returned as the VXI
  186.  *                       type that most closely matches the variable's
  187.  *                       JavaScript type. This function allocates this
  188.  *                       for return on success (returns a NULL pointer
  189.  *                       otherwise), the caller is responsible for
  190.  *                       destroying it via VXIValueDestroy( ). VXIMap
  191.  *                       is used to return JavaScript objects.
  192.  *
  193.  * @result VXIjsiResult 0 on success, VXIjsi_RESULT_FAILURE if the
  194.  *         variable has a JavaScript value of Null,
  195.  *         VXIjsi_RESULT_NON_FATAL_ERROR if the variable is not
  196.  *         defined (JavaScript Undefined), or another error code for
  197.  *         severe errors 
  198.  */
  199. VXIjsiResult SBjsiGetVar(VXIjsiInterface         *pThis,
  200.  const VXIjsiContext     *context, 
  201.  const VXIchar           *name,
  202.  VXIValue               **value);
  203. VXIjsiResult SBjsiSeGetVar(VXIjsiInterface         *pThis,
  204.    const VXIjsiContext     *context, 
  205.    const VXIchar           *name,
  206.    VXIValue               **value);
  207. /**
  208.  * Check whether a variable is defined (not JavaScript Undefined)
  209.  *
  210.  * NOTE: A variable with a JavaScript Null value is considered defined
  211.  *
  212.  * @param context  [IN]  JavaScript context to check the variable in
  213.  * @param name     [IN]  Name of the variable to check
  214.  *
  215.  * @result VXIjsiResult 0 on success (variable is defined),
  216.  *         VXIjsi_RESULT_FAILURE if the variable is not defined,
  217.  *         or another error code for severe errors
  218.  */
  219. VXIjsiResult SBjsiCheckVar(VXIjsiInterface        *pThis,
  220.    const VXIjsiContext    *context, 
  221.    const VXIchar          *name);
  222. VXIjsiResult SBjsiSeCheckVar(VXIjsiInterface        *pThis,
  223.      const VXIjsiContext    *context, 
  224.      const VXIchar          *name);
  225. /**
  226.   * set a script variable read-only to the current scope
  227.   *  
  228.   * @param context  [IN] ECMAScript context in which the variable
  229.   *                      has been created
  230.   * @param name     [IN] Name of the variable to set as read only.
  231.   *
  232.   * @return VXIjsi_RESULT_SUCCESS on success
  233.   */
  234. VXIjsiResult SBjsiSetReadOnly(struct VXIjsiInterface *pThis,
  235.                              VXIjsiContext    *context,
  236.                              const VXIchar          *name);
  237. /**
  238.  * Execute a script, optionally returning any execution result
  239.  *
  240.  * @param context  [IN]  JavaScript context to execute within
  241.  * @param expr     [IN]  Buffer containing the script text
  242.  * @param value    [OUT] Result of the script execution, returned 
  243.  *                       as the VXI type that most closely matches 
  244.  *                       the variable's JavaScript type. Pass NULL
  245.  *                       if the result is not desired. Otherwise
  246.  *                       this function allocates this for return on 
  247.  *                       success when there is a return value (returns 
  248.  *                       a NULL pointer otherwise), the caller is 
  249.  *                       responsible for destroying it via 
  250.  *                       VXIValueDestroy( ). VXIMap is used to return 
  251.  *                       JavaScript objects.
  252.  *
  253.  * @result VXIjsiResult 0 on success
  254.  */
  255. VXIjsiResult SBjsiEval(VXIjsiInterface         *pThis,
  256.        VXIjsiContext           *context,
  257.        const VXIchar           *expr,
  258.        VXIValue               **result);
  259. VXIjsiResult SBjsiSeEval(VXIjsiInterface         *pThis,
  260.  VXIjsiContext           *context,
  261.  const VXIchar           *expr,
  262.  VXIValue               **result);
  263. /**
  264.  * Push a new context onto the scope chain (add a nested scope)
  265.  *
  266.  * @param context  [IN] JavaScript context to push the scope onto
  267.  * @param name     [IN] Name of the scope, used to permit referencing
  268.  *                      variables from an explicit scope within the
  269.  *                      scope chain, such as "myscope.myvar" to access
  270.  *                      "myvar" within a scope named "myscope"
  271.  *
  272.  * @result VXIjsiResult 0 on success
  273.  */
  274. VXIjsiResult SBjsiPushScope(VXIjsiInterface        *pThis,
  275.     VXIjsiContext          *context,
  276.     const VXIchar          *name,
  277.     const VXIjsiScopeAttr attr);
  278. VXIjsiResult SBjsiSePushScope(VXIjsiInterface        *pThis,
  279.       VXIjsiContext          *context,
  280.       const VXIchar          *name);
  281. /**
  282.  * Pop a context from the scope chain (remove a nested scope)
  283.  *
  284.  * @param context  [IN] JavaScript context to pop the scope from
  285.  *
  286.  * @result VXIjsiResult 0 on success
  287.  */
  288. VXIjsiResult SBjsiPopScope(VXIjsiInterface        *pThis,
  289.    VXIjsiContext          *context);
  290. VXIjsiResult SBjsiSePopScope(VXIjsiInterface        *pThis,
  291.      VXIjsiContext          *context);
  292. /**
  293.  * Reset the scope chain to the global scope (pop all nested scopes)
  294.  *
  295.  * @param context  [IN] JavaScript context to pop the scopes from
  296.  *
  297.  * @result VXIjsiResult 0 on success
  298.  */
  299. VXIjsiResult SBjsiClearScopes(VXIjsiInterface        *pThis,
  300.       VXIjsiContext          *context);
  301. VXIjsiResult SBjsiSeClearScopes(VXIjsiInterface        *pThis,
  302. VXIjsiContext          *context);
  303. const VXIMap *SBjsiGetLastError(VXIjsiInterface *pThis, VXIjsiContext *context);
  304. #ifdef __cplusplus
  305. }
  306. #endif
  307. #include "VXIheaderSuffix.h"
  308. #endif  /* include guard */