/**************************************************************
 *
 * 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.
 *
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_xmloff.hxx"

#include <fonthdl.hxx>
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmluconv.hxx>
#include <rtl/ustrbuf.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <tools/fontenum.hxx>

#include <tools/string.hxx>

using ::rtl::OUString;
using ::rtl::OUStringBuffer;

using namespace ::com::sun::star;
using namespace ::xmloff::token;

const SvXMLEnumMapEntry* lcl_getFontFamilyGenericMapping()
{
    static SvXMLEnumMapEntry __READONLY_DATA aFontFamilyGenericMapping[] =
    {
	    { XML_DECORATIVE,	    FAMILY_DECORATIVE },

	    { XML_MODERN,		    FAMILY_MODERN	},
	    { XML_ROMAN,	    	FAMILY_ROMAN	},
	    { XML_SCRIPT,		    FAMILY_SCRIPT	},
	    { XML_SWISS,	    	FAMILY_SWISS	},
	    { XML_SYSTEM,   		FAMILY_SYSTEM	},
	    { XML_TOKEN_INVALID,    0 				}
    };
    return aFontFamilyGenericMapping;
}

static SvXMLEnumMapEntry __READONLY_DATA aFontPitchMapping[] =
{
	{ XML_FIXED,		    PITCH_FIXED		},
	{ XML_VARIABLE,	        PITCH_VARIABLE	},
	{ XML_TOKEN_INVALID,    0 				}
};
///////////////////////////////////////////////////////////////////////////////
//
// class XMLFontFamilyNamePropHdl
//

XMLFontFamilyNamePropHdl::~XMLFontFamilyNamePropHdl()
{
	// Nothing to do
}

sal_Bool XMLFontFamilyNamePropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_Bool bRet = sal_False;
	String sValue;
	sal_Int32 nPos = 0;

	do
	{
		sal_Int32 nFirst = nPos;
		nPos = SvXMLUnitConverter::indexOfComma( rStrImpValue, nPos );
		sal_Int32 nLast = (-1 == nPos ? rStrImpValue.getLength() : nPos);
		if( nLast > 0 )
			nLast--;

		// skip trailing blanks
		while( sal_Unicode(' ') == rStrImpValue[nLast] && nLast > nFirst )
			nLast--;

		// skip leading blanks
		while( sal_Unicode(' ') == rStrImpValue[nFirst] && nFirst <= nLast )
			nFirst++;

		// remove quotes
		sal_Unicode c = rStrImpValue[nFirst];
		if( nFirst < nLast && (sal_Unicode('\'') == c || sal_Unicode('\"') == c) && rStrImpValue[nLast] == c )
		{
			nFirst++;
			nLast--;
		}

		if( nFirst <= nLast )
		{
			if( sValue.Len() != 0 )
				sValue += sal_Unicode(';');

			OUString sTemp = rStrImpValue.copy( nFirst, nLast-nFirst+1 );
			sValue += sTemp.getStr();
		}

		if( -1 != nPos )
			nPos++;
	}
	while( -1 != nPos );

	if( sValue.Len() )
	{
		rValue <<= OUString(sValue.GetBuffer());
		bRet = sal_True;
	}

	return bRet;
}

sal_Bool XMLFontFamilyNamePropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_Bool bRet = sal_False;
	OUString aStrFamilyName;

	if( rValue >>= aStrFamilyName )
	{
		OUStringBuffer sValue( aStrFamilyName.getLength() + 2L );
        sal_Int32 nPos = 0;
		do
		{
			sal_Int32 nFirst = nPos;
			nPos = aStrFamilyName.indexOf( sal_Unicode(';'), nPos );
            sal_Int32 nLast = (-1 == nPos ? aStrFamilyName.getLength() : nPos);

			// Set position to the character behind the ';', so we won't
			// forget this.
			if( -1L != nPos )
				nPos++;

			// If the property value was empty, we stop now.
			// If there is a ';' at the first position, the empty name
			// at the start will be removed.
			if( 0L == nLast )
				continue;

			// nFirst and nLast now denote the first and last character of
			// one font name.
			nLast--;

			// skip trailing blanks
			while( sal_Unicode(' ') == aStrFamilyName[nLast] && nLast > nFirst )
				nLast--;

			// skip leading blanks
			while( sal_Unicode(' ') == aStrFamilyName[nFirst] && nFirst <= nLast )
				nFirst++;

			if( nFirst <= nLast )
			{
				if( sValue.getLength() != 0L )
				{
					sValue.append( sal_Unicode( ',' ) );
					sValue.append( sal_Unicode( ' ' ));
				}
                sal_Int32 nLen = nLast-nFirst+1;
				OUString sFamily( aStrFamilyName.copy( nFirst, nLen ) );
				sal_Bool bQuote = sal_False;
				for( sal_Int32 i=0; i < nLen; i++ )
				{
					sal_Unicode c = sFamily[i];
					if( sal_Unicode(' ') == c || sal_Unicode(',') == c )
					{
						bQuote = sal_True;
						break;
					}
				}
				if( bQuote )
					sValue.append( sal_Unicode('\'') );
				sValue.append( sFamily );
				if( bQuote )
					sValue.append( sal_Unicode('\'') );
			}
		}
		while( -1L != nPos );

		rStrExpValue = sValue.makeStringAndClear();

		bRet = sal_True;
	}

	return bRet;
}

///////////////////////////////////////////////////////////////////////////////
//
// class XMLFontFamilyPropHdl
//

XMLFontFamilyPropHdl::~XMLFontFamilyPropHdl()
{
	// Nothing to do
}

sal_Bool XMLFontFamilyPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_uInt16 eNewFamily;
	sal_Bool bRet = SvXMLUnitConverter::convertEnum( eNewFamily, rStrImpValue, lcl_getFontFamilyGenericMapping() );
	if( bRet )
		rValue <<= (sal_Int16)eNewFamily;

	return bRet;
}

sal_Bool XMLFontFamilyPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_Bool bRet = sal_False;
	OUStringBuffer aOut;

	sal_Int16 nFamily = sal_Int16();
	if( rValue >>= nFamily )
	{
		FontFamily eFamily = (FontFamily)nFamily;
		if( eFamily != FAMILY_DONTKNOW )
			bRet = SvXMLUnitConverter::convertEnum( aOut, eFamily, lcl_getFontFamilyGenericMapping() );
	}

	rStrExpValue = aOut.makeStringAndClear();

	return bRet;
}

///////////////////////////////////////////////////////////////////////////////
//
// class XMLFontEncodingPropHdl
//

XMLFontEncodingPropHdl::~XMLFontEncodingPropHdl()
{
	// Nothing to do
}

sal_Bool XMLFontEncodingPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_Bool bRet = sal_True;

	if( IsXMLToken( rStrImpValue, XML_X_SYMBOL ) )
		rValue <<= (sal_Int16) RTL_TEXTENCODING_SYMBOL;

	return bRet;
}

sal_Bool XMLFontEncodingPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_Bool bRet = sal_False;
	OUStringBuffer aOut;
	sal_Int16 nSet = sal_Int16();

	if( rValue >>= nSet )
	{
		if( (rtl_TextEncoding)nSet == RTL_TEXTENCODING_SYMBOL )
		{
			aOut.append( GetXMLToken(XML_X_SYMBOL) );
			rStrExpValue = aOut.makeStringAndClear();
			bRet = sal_True;
		}
	}

	return bRet;
}

///////////////////////////////////////////////////////////////////////////////
//
// class XMLFontPitchPropHdl
//

XMLFontPitchPropHdl::~XMLFontPitchPropHdl()
{
	// Nothing to do
}

sal_Bool XMLFontPitchPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_uInt16 eNewPitch;
	sal_Bool bRet = SvXMLUnitConverter::convertEnum( eNewPitch, rStrImpValue, aFontPitchMapping );
	if( bRet )
		rValue <<= (sal_Int16)eNewPitch;

	return bRet;
}

sal_Bool XMLFontPitchPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const
{
	sal_Bool bRet = sal_False;
	sal_Int16 nPitch = sal_Int16();
	OUStringBuffer aOut;

	FontPitch ePitch = PITCH_DONTKNOW;
	if( rValue >>= nPitch )
		ePitch =  (FontPitch)nPitch;

	if( PITCH_DONTKNOW != ePitch )
	{
		bRet = SvXMLUnitConverter::convertEnum( aOut, ePitch, aFontPitchMapping, XML_FIXED );
		rStrExpValue = aOut.makeStringAndClear();
	}

	return bRet;
}
