// EIKTXTUT.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#include <gdi.h>
#include <eiktxtut.h>
#include <w32std.h>

//
//	class TextUtils
//	

EXPORT_C void TextUtils::ClipToFit(TDes& aBuffer,const CFont& aFont,TInt aMaxWidthInPixels,TChar aAlternativeEnd)
//
//	Adjust a buffer to fit into a width
//
	{
	TInt textWidth=aFont.TextWidthInPixels(aBuffer);
	if (textWidth<=aMaxWidthInPixels)
		return;
	TBuf<1> ellipse;
	ellipse.Append(aAlternativeEnd);
	TInt extraWidth=aFont.TextWidthInPixels(ellipse);
	TInt cutOff=aFont.TextCount(aBuffer,aMaxWidthInPixels-extraWidth);
	aBuffer.SetLength(cutOff);
	aBuffer.Append(ellipse);
	}

EXPORT_C TInt TextUtils::ColumnText(TPtrC& aColumnText,TInt aColumn,const TDesC* aSourceText,TChar aColumnSeparator)
//
//	Find the n-th column
//
	{
	aColumnText.Set(TPtrC());
	TInt end=0;
	TInt column=0;
	TPtrC text;
	if (aSourceText)
		text.Set(*aSourceText);
	while (text.Length())
		{
		end=text.Locate(aColumnSeparator);
		if (end==KErrNotFound)
			end=text.Length();
		if (column==aColumn)
			{
			aColumnText.Set(text.Left(end));
			return(KErrNone);
			}
		else if (++column>aColumn)
			break;
		if (end<text.Length())
			++end;
		text.Set(text.Mid(end));
		}
	return(KErrNotFound);
	}

EXPORT_C void TextUtils::TruncateToNumChars(TDes& aBuffer, TInt numChars)
	//
	// static - truncates aBuffer to numChars length, inserting an elipsis as the last char
	//
	{
	if (aBuffer.Length() <= numChars)
		return;
	aBuffer.SetLength(numChars-1);
	aBuffer.Append(KTextUtilClipEndChar);
	}


// TEikFindWidthOfWidestTextItem

EXPORT_C TInt TEikFindWidthOfWidestTextItem::MaximumWidthInPixels(const CFont& aFont) const
	{
	TInt widthOfWidestTextItem=0;
	TBuf<256> textItem;
	TInt firstIndex;
	TInt lastIndex;
	GetFirstAndLastIndex(firstIndex, lastIndex);
	for (TInt i=firstIndex; i<=lastIndex; ++i)
		{
		GetTextItem(textItem, i);
		TInt widthOfTextItem=aFont.TextWidthInPixels(textItem);
		if (widthOfWidestTextItem<widthOfTextItem)
			widthOfWidestTextItem=widthOfTextItem;
		}
	return widthOfWidestTextItem;
	}

// TEikFindWidthOfWidestDigit

EXPORT_C TEikFindWidthOfWidestDigit::TEikFindWidthOfWidestDigit()
	{
	}

void TEikFindWidthOfWidestDigit::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex='0';
	aLastIndex='9';
	}

void TEikFindWidthOfWidestDigit::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText.SetLength(0);
	aText.Append(aIndex);
	}

// TEikFindWidthOfWidestAmPmName

EXPORT_C TEikFindWidthOfWidestAmPmName::TEikFindWidthOfWidestAmPmName()
	{
	}

void TEikFindWidthOfWidestAmPmName::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex=EAm;
	aLastIndex=EPm;
	}

void TEikFindWidthOfWidestAmPmName::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText=TAmPmName((TAmPm)aIndex);
	}

// TEikFindWidthOfWidestAbbreviatedDayName

EXPORT_C TEikFindWidthOfWidestAbbreviatedDayName::TEikFindWidthOfWidestAbbreviatedDayName()
	{
	}

void TEikFindWidthOfWidestAbbreviatedDayName::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex=0;
	aLastIndex=6;
	}

void TEikFindWidthOfWidestAbbreviatedDayName::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText=TDayNameAbb((TDay)aIndex);
	}

// TEikFindWidthOfWidestDayName

EXPORT_C TEikFindWidthOfWidestDayName::TEikFindWidthOfWidestDayName()
	{
	}

void TEikFindWidthOfWidestDayName::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex=0;
	aLastIndex=6;
	}

void TEikFindWidthOfWidestDayName::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText=TDayName((TDay)aIndex);
	}

// TEikFindWidthOfWidestAbbreviatedMonthName

EXPORT_C TEikFindWidthOfWidestAbbreviatedMonthName::TEikFindWidthOfWidestAbbreviatedMonthName()
	{
	}

void TEikFindWidthOfWidestAbbreviatedMonthName::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex=0;
	aLastIndex=11;
	}

void TEikFindWidthOfWidestAbbreviatedMonthName::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText=TMonthNameAbb((TMonth)aIndex);
	}

// TEikFindWidthOfWidestMonthName

EXPORT_C TEikFindWidthOfWidestMonthName::TEikFindWidthOfWidestMonthName()
	{
	}

void TEikFindWidthOfWidestMonthName::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex=0;
	aLastIndex=11;
	}

void TEikFindWidthOfWidestMonthName::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText=TMonthName((TMonth)aIndex);
	}

// TEikFindWidthOfWidestDateSuffix

EXPORT_C TEikFindWidthOfWidestDateSuffix::TEikFindWidthOfWidestDateSuffix()
	{
	}

void TEikFindWidthOfWidestDateSuffix::GetFirstAndLastIndex(TInt& aFirstIndex, TInt& aLastIndex) const
	{
	aFirstIndex=0;
	aLastIndex=30;
	}

void TEikFindWidthOfWidestDateSuffix::GetTextItem(TDes& aText, TInt aIndex) const
	{
	aText=TDateSuffix(aIndex);
	}

