Implement format-number() and <xsl:decimal-format>

b=65983 r=Pike sr=jst
This commit is contained in:
sicking%bigfoot.com 2005-11-02 07:37:07 +00:00
Родитель 009fdc44d4
Коммит 22667910ed
6 изменённых файлов: 52 добавлений и 7 удалений

Просмотреть файл

@ -116,8 +116,9 @@ OBJS =../base/ArrayList.$(OBJ_SUFFIX) \
../xslt/functions/ElementAvailableFnCall.$(OBJ_SUFFIX) \
../xslt/functions/FunctionAvailableFnCall.$(OBJ_SUFFIX) \
../xslt/functions/GenerateIdFunctionCall.$(OBJ_SUFFIX) \
../xslt/functions/txKeyFunctionCall.$(OBJ_SUFFIX) \
../xslt/functions/SystemPropertyFunctionCall.$(OBJ_SUFFIX) \
../xslt/functions/txFormatNumberFunctionCall.$(OBJ_SUFFIX) \
../xslt/functions/txKeyFunctionCall.$(OBJ_SUFFIX) \
../xslt/util/NodeStack.$(OBJ_SUFFIX) \
../xslt/util/txNodeSorter.$(OBJ_SUFFIX) \
../xslt/util/txXPathResultComparator.$(OBJ_SUFFIX) \

Просмотреть файл

@ -152,6 +152,7 @@ class FunctionCall : public Expr {
public:
static const String INVALID_PARAM_COUNT;
static const String INVALID_PARAM_VALUE;
virtual ~FunctionCall();

Просмотреть файл

@ -32,6 +32,9 @@
const String FunctionCall::INVALID_PARAM_COUNT =
"invalid number of parameters for function: ";
const String FunctionCall::INVALID_PARAM_VALUE =
"invalid parameter value for function: ";
//- Constructors -/
/**

Просмотреть файл

@ -90,6 +90,7 @@ ExprResult* ElementAvailableFunctionCall::evaluate(Node* context, ContextState*
localName.isEqual(COMMENT) ||
localName.isEqual(COPY) ||
localName.isEqual(COPY_OF) ||
localName.isEqual(DECIMAL_FORMAT) ||
localName.isEqual(ELEMENT) ||
localName.isEqual(FOR_EACH) ||
localName.isEqual(IF) ||

Просмотреть файл

@ -106,7 +106,7 @@ ExprResult* FunctionAvailableFunctionCall::evaluate(Node* context, ContextState*
property.isEqual(XPathNames::FLOOR_FN) ||
property.isEqual(DOCUMENT_FN) ||
property.isEqual(KEY_FN) ||
// property.isEqual(FORMAT_NUMBER_FN) ||
property.isEqual(FORMAT_NUMBER_FN) ||
property.isEqual(CURRENT_FN) ||
// property.isEqual(UNPARSED_ENTITY_URI_FN) ||
property.isEqual(GENERATE_ID_FN) ||

Просмотреть файл

@ -182,26 +182,65 @@ private:
/**
* The definition for the XSLT format-number() function
**/
class FormatNumberFunctionCall : public FunctionCall {
class txFormatNumberFunctionCall : public FunctionCall {
public:
/**
* Creates a new format-number() function call
**/
FormatNumberFunctionCall();
txFormatNumberFunctionCall(ProcessorState* aPs);
/**
* Evaluates this Expr based on the given context node and processor state
* @param context the context node for evaluation of this Expr
* @param cs the ContextState containing the stack information needed
* @param aContext the context node for evaluation of this Expr
* @param aCs the ContextState containing the stack information needed
* for evaluation
* @return the result of the evaluation
* @see FunctionCall.h
**/
virtual ExprResult* evaluate(Node* context, ContextState* cs);
virtual ExprResult* evaluate(Node* aContext, ContextState* aCs);
private:
static const UNICODE_CHAR FORMAT_QUOTE;
enum FormatParseState {
Prefix,
IntDigit,
IntZero,
FracZero,
FracDigit,
Suffix,
Finished
};
ProcessorState* mPs;
};
/**
* DecimalFormat
* A representation of the XSLT element <xsl:decimal-format>
*/
class txDecimalFormat : public TxObject {
public:
/*
* Creates a new decimal format and initilizes all properties with
* default values
*/
txDecimalFormat();
MBool isEqual(txDecimalFormat* other);
UNICODE_CHAR mDecimalSeparator;
UNICODE_CHAR mGroupingSeparator;
String mInfinity;
UNICODE_CHAR mMinusSign;
String mNaN;
UNICODE_CHAR mPercent;
UNICODE_CHAR mPerMille;
UNICODE_CHAR mZeroDigit;
UNICODE_CHAR mDigit;
UNICODE_CHAR mPatternSeparator;
};
/**