2004-11-26 18:22:00 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* $RCSfile: smilfunctionparser.hxx,v $
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2006-12-13 15:04:07 +00:00
|
|
|
* $Revision: 1.4 $
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2006-12-13 15:04:07 +00:00
|
|
|
* last change: $Author: kz $ $Date: 2006-12-13 16:04:07 $
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
2005-09-07 20:21:48 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2004-11-26 18:22:00 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
#ifndef _SLIDESHOW_SMILFUNCTIONPARSER_HXX
|
|
|
|
#define _SLIDESHOW_SMILFUNCTIONPARSER_HXX
|
|
|
|
|
|
|
|
#include <expressionnode.hxx>
|
|
|
|
#include <slideshowexceptions.hxx>
|
|
|
|
|
|
|
|
#include <basegfx/range/b2drectangle.hxx>
|
2006-12-13 15:04:07 +00:00
|
|
|
|
|
|
|
#include <boost/utility.hpp>
|
2004-11-26 18:22:00 +00:00
|
|
|
|
|
|
|
namespace rtl
|
|
|
|
{
|
|
|
|
class OUString;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Definition of SmilFunctionParser class */
|
|
|
|
|
2006-12-13 15:04:07 +00:00
|
|
|
namespace slideshow
|
2004-11-26 18:22:00 +00:00
|
|
|
{
|
|
|
|
namespace internal
|
|
|
|
{
|
2006-12-13 15:04:07 +00:00
|
|
|
class SmilFunctionParser : private boost::noncopyable
|
2004-11-26 18:22:00 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
/** Parse a string containing a SMIL value.
|
|
|
|
|
|
|
|
This method parses a string representing
|
|
|
|
a fixed value (i.e. a value that does not
|
|
|
|
change by time). Due to the dynamic view
|
|
|
|
capabilities of the presentation engine,
|
|
|
|
this value can sometimes only be determined
|
|
|
|
during runtime of the animation (because
|
|
|
|
e.g. mixed screen/view coordinates are
|
|
|
|
involved), and is thus still returned as an
|
|
|
|
ExpressionNode object. An example for
|
|
|
|
such a case is the "Width+1.0" string, which
|
|
|
|
contains the width of the shape in user
|
|
|
|
coordinate space, and the screen width
|
|
|
|
in device coordinate space.
|
|
|
|
|
|
|
|
The following grammar is accepted by this method:
|
|
|
|
<code>
|
|
|
|
identifier = 'pi'|'e'|'X'|'Y'|'Width'|'Height'
|
|
|
|
|
|
|
|
function = 'abs'|'sqrt'|'sin'|'cos'|'tan'|'atan'|'acos'|'asin'|'exp'|'log'
|
|
|
|
|
|
|
|
basic_expression =
|
|
|
|
number |
|
|
|
|
identifier |
|
|
|
|
function '(' additive_expression ')' |
|
|
|
|
'(' additive_expression ')'
|
|
|
|
|
|
|
|
unary_expression =
|
|
|
|
'-' basic_expression |
|
|
|
|
basic_expression
|
|
|
|
|
|
|
|
multiplicative_expression =
|
|
|
|
unary_expression ( ( '*' unary_expression )* |
|
|
|
|
( '/' unary_expression )* )
|
|
|
|
|
|
|
|
additive_expression =
|
|
|
|
multiplicative_expression ( ( '+' multiplicative_expression )* |
|
|
|
|
( '-' multiplicative_expression )* )
|
|
|
|
|
|
|
|
</code>
|
|
|
|
|
|
|
|
@param rSmilValue
|
|
|
|
The string to parse
|
|
|
|
|
|
|
|
@param rRelativeShapeBounds
|
|
|
|
The bounds of the shape this SMIL value is to be
|
|
|
|
evaluated for. The bounds must be <em>relative</em> to
|
|
|
|
the page the shape is part of, i.e. within the [0,1]
|
|
|
|
range. This is necessary, since the string might
|
|
|
|
contain symbolic references to the shape bounding box.
|
|
|
|
|
|
|
|
@throws ParseError if an invalid expression is given.
|
|
|
|
|
|
|
|
@return the generated function object.
|
|
|
|
*/
|
|
|
|
static ExpressionNodeSharedPtr parseSmilValue( const ::rtl::OUString& rSmilValue,
|
|
|
|
const ::basegfx::B2DRectangle& rRelativeShapeBounds ); // throw ParseError
|
|
|
|
|
|
|
|
/** Parse a string containing a SMIL function.
|
|
|
|
|
|
|
|
This method parses a string representing
|
|
|
|
a possibly time-varying SMIL function.
|
|
|
|
|
|
|
|
The following grammar is accepted by this method:
|
|
|
|
<code>
|
|
|
|
identifier = 't'|'pi'|'e'|'X'|'Y'|'Width'|'Height'
|
|
|
|
|
|
|
|
function = 'abs'|'sqrt'|'sin'|'cos'|'tan'|'atan'|'acos'|'asin'|'exp'|'log'
|
|
|
|
|
|
|
|
basic_expression =
|
|
|
|
number |
|
|
|
|
identifier |
|
|
|
|
function '(' additive_expression ')' |
|
|
|
|
'(' additive_expression ')'
|
|
|
|
|
|
|
|
unary_expression =
|
|
|
|
'-' basic_expression |
|
|
|
|
basic_expression
|
|
|
|
|
|
|
|
multiplicative_expression =
|
|
|
|
unary_expression ( ( '*' unary_expression )* |
|
|
|
|
( '/' unary_expression )* )
|
|
|
|
|
|
|
|
additive_expression =
|
|
|
|
multiplicative_expression ( ( '+' multiplicative_expression )* |
|
|
|
|
( '-' multiplicative_expression )* )
|
|
|
|
|
|
|
|
</code>
|
|
|
|
|
|
|
|
@param rSmilFunction
|
|
|
|
The string to parse
|
|
|
|
|
|
|
|
@param rRelativeShapeBounds
|
|
|
|
The bounds of the shape this SMIL value is to be
|
|
|
|
evaluated for. The bounds must be <em>relative</em> to
|
|
|
|
the page the shape is part of, i.e. within the [0,1]
|
|
|
|
range. This is necessary, since the string might
|
|
|
|
contain symbolic references to the shape bounding box.
|
|
|
|
|
|
|
|
@throws ParseError if an invalid expression is given.
|
|
|
|
|
|
|
|
@return the generated function object.
|
|
|
|
*/
|
|
|
|
static ExpressionNodeSharedPtr parseSmilFunction( const ::rtl::OUString& rSmilFunction,
|
|
|
|
const ::basegfx::B2DRectangle& rRelativeShapeBounds ); // throw ParseError
|
|
|
|
|
|
|
|
private:
|
|
|
|
// disabled constructor/destructor, since this is
|
|
|
|
// supposed to be a singleton
|
|
|
|
SmilFunctionParser();
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* _SLIDESHOW_SMILFUNCTIONPARSER_HXX */
|