void DocXDocumentStore::GetDocumentTexts(const CStdString& sFileName, std::vector<std::string>& vDocumentTexts) const
{
	vDocumentTexts.clear();

	CZipArchive zipArchive;
	zipArchive.Open(sFileName, CZipArchive::zipOpenReadOnly);
	if( !zipArchive.IsClosed() )
	{
		CZipWordArray ar;
		zipArchive.FindMatches( L"word\\\\*.xml", ar );
		for( int uIndex = 0; uIndex < ar.GetSize(); uIndex++ )
		{
			CZipFileHeader fhInfo;
			if( zipArchive.GetFileInfo( fhInfo, ar[uIndex] ) )
			{
				const CZipString fileName( fhInfo.GetFileName() );
				if( fileName.find_first_of( '\\' ) == fileName.find_last_of( '\\' ) )
				{
					C2007DocFile mf;
					zipArchive.ExtractFile( ar[uIndex], mf );			
					const CStdStringA sDocText = mf.GetWTInnerText();
					if( sDocText.size() > 0 )
						vDocumentTexts.push_back( sDocText );
				}
			}
		}
		zipArchive.Flush();
		zipArchive.Close();
	}
}
CStdStringA RomanIndexFormatter::FormatDigit(int iValue, CStdStringA sDigits)
{
	if ((x64_int_cast)sDigits.size() != 3)
		throw std::exception("Invalid digits collection in roman numeral formatting");

	if ((iValue < 0) || (iValue > 9))
		throw std::exception("digit out of range in roman numeral formatting");

	char cUnit = sDigits[2];
	char cFive = sDigits[1];
	char cTen = sDigits[0];

	CStdStringA sResult;
	switch (iValue)
	{
	case 9:
	case 4:
		sResult += cUnit;
		sResult += (iValue == 9) ? cTen : cFive;
		break;
	case 8:
	case 3:
		sResult += cUnit;
	case 7:
	case 2:
		sResult += cUnit;
	case 6:
	case 1:
		sResult += cUnit;
	case 5:
		if (iValue>4)
			sResult = cFive + sResult;
		break;
	}

	return sResult;
}