| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef INCLUDED_SLIDESHOW_SMILFUNCTIONPARSER_HXX |
| #define INCLUDED_SLIDESHOW_SMILFUNCTIONPARSER_HXX |
| |
| #include "expressionnode.hxx" |
| #include "slideshowexceptions.hxx" |
| |
| #include <basegfx/range/b2drectangle.hxx> |
| |
| #include <boost/noncopyable.hpp> |
| |
| namespace rtl |
| { |
| class OUString; |
| } |
| |
| /* Definition of SmilFunctionParser class */ |
| |
| namespace slideshow |
| { |
| namespace internal |
| { |
| class SmilFunctionParser : private boost::noncopyable |
| { |
| 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 /* INCLUDED_SLIDESHOW_SMILFUNCTIONPARSER_HXX */ |