// TestITN_J.h : Declaration of the CTestITN_J #ifndef __TESTITN_J_H_ #define __TESTITN_J_H_ #include "resource.h" // main symbols #include // for swprintf() #define MAX_LOCALE_DATA 5 #define MAX_DATE_FORMAT 30 // Flags for number display typedef enum DISPLAYFLAGS { DF_UNFORMATTED = (1L << 0),// No formatting DF_ORDINAL = (1L << 1),// Ordinal number DF_WHOLENUMBER = (1L << 2),// Should be displayed without decimal DF_FIXEDWIDTH = (1L << 3),// Requiring a certain width DF_LEADINGZERO = (1L << 4),// Presence of leading 0 of the number is between 0 and 1 DF_NOTHOUSANDSGROUP = (1L << 5) // Do not do any thousands grouping (commas) } DISPLAYFLAGS; ///////////////////////////////////////////////////////////////////////////// // CTestITN_J class ATL_NO_VTABLE CTestITN_J : public CComObjectRootEx, public CComCoClass, public ISpCFGInterpreter { public: CTestITN_J() : m_pSite( NULL ) { } DECLARE_REGISTRY_RESOURCEID(IDR_TESTITN_J) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CTestITN_J) COM_INTERFACE_ENTRY(ISpCFGInterpreter) END_COM_MAP() private: HRESULT InterpretNumber( const SPPHRASEPROPERTY *pProperties, const bool fCardinal, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretDigitNumber( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretFPNumber( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretFraction( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretDate( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretTime( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretDegrees( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretMeasurement( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT InterpretCurrency( const SPPHRASEPROPERTY *pProperties, DOUBLE *pdblVal, WCHAR *pszVal, UINT cSize); HRESULT AddPropertyAndReplacement( const WCHAR *szBuff, const DOUBLE dblValue, const ULONG ulMinPos, const ULONG ulMaxPos, const ULONG ulFirstElement, const ULONG ulCountOfElements ); //ISpCFGInterpreterSite *pSite ); HRESULT MakeDisplayNumber( DOUBLE dblNum, DWORD dwDisplayFlags, UINT uiFixedWidth, UINT uiDecimalPlaces, WCHAR *pwszNum, UINT cSize, BOOL bForced ); int MakeDigitStrig( const SPPHRASEPROPERTY *pProperties, WCHAR *pwszDigitString, UINT cSize ); void GetNumberFormatDefaults(); private: // Data members NUMBERFMT m_nmfmtDefault; TCHAR m_pszDecimalSep[ MAX_LOCALE_DATA]; TCHAR m_pszThousandSep[MAX_LOCALE_DATA]; TCHAR m_pszLongDateFormat[ MAX_DATE_FORMAT ]; ISpCFGInterpreterSite *m_pSite; // ISpCFGInterptreter public: STDMETHODIMP InitGrammar(const WCHAR * pszGrammarName, const void ** pvGrammarData); STDMETHODIMP Interpret(ISpPhraseBuilder * pInterpretRule, const ULONG ulFirstElement, const ULONG ulCountOfElements, ISpCFGInterpreterSite * pSite); public: CComPtr m_cpPhrase; // Decalred as a member to prevent repeated construct/destroy }; // Helper functions ULONG ComputeNum9999(const SPPHRASEPROPERTY *pProperties ); void HandleDigitsAfterDecimal( WCHAR *pwszFormattedNum, UINT cSizeOfFormattedNum, const WCHAR *pwszRightOfDecimal ); void FindDefaultNumberFormat( NUMBERFMT *pnfmt ); void GetMinAndMaxPos( const SPPHRASEPROPERTY *pProperties, ULONG *pulMinPos, ULONG *pulMaxPos ); int GetMonthName( int iMonth, WCHAR *pwszMonth, int cSize, bool fAbbrev ); int GetDayOfWeekName( int iDayOfWeek, WCHAR *pwszDayOfWeek, int cSize, bool fAbbrev ); int FormatDate( const SYSTEMTIME &stDate, TCHAR *pszFormat, WCHAR *pwszDate, int cSize, const WCHAR *pwszEmperor ); #endif //__TESTITN_H_