Revision: 201035
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 02 Sep 2010 22:23:14 +0300
changeset 57 01e38b33e72a
parent 51 a7c938434754
child 58 876d950bc52d
child 63 a145c1c7a5f4
Revision: 201035 Kit: 201035
fontservices/fontstore/inc/OPENFONT.H
fontservices/fontstore/inc/openfontsprivate.h
fontservices/fontstore/src/OPENFONT.CPP
fontservices/fontstore/tfs/T_FontMetrics.cpp
layers.sysdef.xml
package_definition.xml
package_map.xml
--- a/fontservices/fontstore/inc/OPENFONT.H	Wed Aug 18 11:34:25 2010 +0300
+++ b/fontservices/fontstore/inc/OPENFONT.H	Thu Sep 02 22:23:14 2010 +0300
@@ -328,7 +328,7 @@
 	TBool HasCharacterL(TInt aCode) const;
 	TBool GetCharacterData(TInt aSessionHandle,TInt aCode,const TOpenFontCharMetrics*& aMetrics,const TUint8*& aBitmap) const;
 	void OnFileDeleted();
-	COpenFontGlyphCache* GetGlyphCache();
+	COpenFontGlyphCache* GetGlyphCache() const;
 	inline TInt FontCapitalAscent() const;
 	inline TInt FontMaxAscent() const;
 	inline TInt FontStandardDescent() const;
@@ -371,7 +371,7 @@
 private:
 	const COpenFontGlyph* Glyph(TInt aSessionHandle,TInt aCode) const;
 
-	const COpenFontGlyph* FontCacheGlyph(TInt aCode);
+	const COpenFontGlyph* FontCacheGlyph(TInt aCode) const;
 	
 	void SetGlyphCache(COpenFontGlyphCache* aGlyphCache);
 	
--- a/fontservices/fontstore/inc/openfontsprivate.h	Wed Aug 18 11:34:25 2010 +0300
+++ b/fontservices/fontstore/inc/openfontsprivate.h	Thu Sep 02 22:23:14 2010 +0300
@@ -135,8 +135,6 @@
 private:
 	inline COpenFontSessionCacheEntry(const COpenFont* aFont, TInt aCode, TInt aGlyphIndex, const TOpenFontCharMetrics& aMetrics);
 	~COpenFontSessionCacheEntry();
-public:
-    TInt iLastAccess;               // serial number of the last access to the glyph
 
 private: 
     TInt iFontOffset;          // offset of the font that contains this glyph, (not owned by this class!)    
@@ -150,20 +148,21 @@
  */
 class COpenFontSessionCache
     {
+	friend class COpenFontSessionCacheList;
 public:
     static COpenFontSessionCache* NewL(RHeap* aHeap, TInt aSessionHandle, TInt aEntries);
     void Delete(RHeap* aHeap);
     
     TInt SessionHandle() { return iSessionHandle; }
-    const COpenFontGlyph* Glyph(const COpenFont* aFont, TInt aCode, TInt& aIndex);
+    const COpenFontGlyph* Glyph(const COpenFont* aFont, TInt aCode, TInt& aIndex) const;
     void Insert(RHeap* aHeap, COpenFontSessionCacheEntry* aEntry, TInt aIndex);
     
 private:
     COpenFontSessionCache(TInt aSessionHandle);
     ~COpenFontSessionCache();
-public:
-    TInt iSessionHandle;    
-    TInt iLastAccess;
+private:
+    TInt iSessionHandle;
+    TInt64 iRandomSeed;
     ROffsetArray<COpenFontSessionCacheEntry> iEntryArray;
     };
 
--- a/fontservices/fontstore/src/OPENFONT.CPP	Wed Aug 18 11:34:25 2010 +0300
+++ b/fontservices/fontstore/src/OPENFONT.CPP	Thu Sep 02 22:23:14 2010 +0300
@@ -26,6 +26,7 @@
 #include "linkedfontsprivate.h"
 #include <graphics/openfontrasterizer.h>
 #include <graphics/gdi/glyphsample.h>
+#include <e32math.h>
 
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
@@ -904,13 +905,13 @@
     iFileOffset = 0;
 	}
 
-COpenFontGlyphCache* COpenFont::GetGlyphCache()
+COpenFontGlyphCache* COpenFont::GetGlyphCache() const
 	{
     if (iGlyphCacheOffset == 0)
         {
         return NULL;
         }
-    return reinterpret_cast<COpenFontGlyphCache*>(PtrAdd(this, iGlyphCacheOffset));
+    return reinterpret_cast<COpenFontGlyphCache*>(PtrAdd(const_cast<COpenFont*>(this), iGlyphCacheOffset));
 	}
 
 const COpenFontGlyph* COpenFont::Glyph(TInt aSessionHandle, TInt aCode) const
@@ -949,7 +950,7 @@
 @param aCode The code for the glpyh to look for in the cache
 @return A pointer to the requested glyph if it was found in the glyph cache, NULL if it was not found.
 */
-const COpenFontGlyph* COpenFont::FontCacheGlyph(TInt aCode)
+const COpenFontGlyph* COpenFont::FontCacheGlyph(TInt aCode) const
 	{
 	if (COpenFontGlyphCache* glyphCache = GetGlyphCache())
 		{
@@ -1112,58 +1113,52 @@
     iEntryArray.Close(aHeap);
     }
 
-const COpenFontGlyph* COpenFontSessionCache::Glyph(const COpenFont* aFont, TInt aCode, TInt& aIndex)
+const COpenFontGlyph* COpenFontSessionCache::Glyph(const COpenFont* aFont, TInt aCode, TInt& aIndex) const
 	{
     aIndex = -1;
-    TInt oldest = KMaxTInt;
-    TInt oldest_index = 0;
     TInt numEntries = iEntryArray.Count();
     TInt index = GLYPH_CODE(aCode) % numEntries;   // simple hash function to shorten searches
     for (TInt i = 0; i < numEntries; ++i, ++index)
         {
         if (index >= numEntries)
+            {
             index = 0;
-        COpenFontSessionCacheEntry* entry = iEntryArray[index];
+            }
+        const COpenFontSessionCacheEntry* entry = iEntryArray[index];
         if (entry == NULL)
             {
-            if (aIndex == -1)
-                aIndex = index;
-            }
-        else
-            { 
-            if (entry->Font() == aFont && entry->iCode == aCode)
+            if (aIndex < 0)
                 {
-                entry->iLastAccess = iLastAccess++;
-                return entry;
-                }
-            if (entry->iLastAccess < oldest)
-                {
-                oldest = entry->iLastAccess;
-                oldest_index = index;
+                aIndex = index;
                 }
             }
+        else if (entry->Font() == aFont && entry->iCode == aCode)
+            {
+            return entry;
+            }
         }
-    if (aIndex == -1)
-        aIndex = oldest_index;
     return NULL;
 	}
 
 
 void COpenFontSessionCache::Insert(RHeap* aHeap, COpenFontSessionCacheEntry* aEntry, TInt aIndex)
 	{
-    if (aIndex < 0 || aIndex >= iEntryArray.Count())
+    if (aIndex >= iEntryArray.Count())
         {
         Panic(EFntSessionCacheIndexOutOfRange);
         }
+    if (aIndex < 0)
+        {
+        aIndex = Math::Rand(iRandomSeed) % iEntryArray.Count();
+        }
     COpenFontSessionCacheEntry::Delete(aHeap, iEntryArray[aIndex]);
     iEntryArray.SetAt(aIndex, aEntry);
-    aEntry->iLastAccess = iLastAccess++;
 	}
 
 COpenFontSessionCache::COpenFontSessionCache(TInt aSessionHandle):
     iSessionHandle(aSessionHandle),
-    iLastAccess(0)
-    {    
+    iRandomSeed(0)
+    {
     }
 
 TInt COpenFontSessionCacheList::AddCache(COpenFontSessionCache* aCache)
--- a/fontservices/fontstore/tfs/T_FontMetrics.cpp	Wed Aug 18 11:34:25 2010 +0300
+++ b/fontservices/fontstore/tfs/T_FontMetrics.cpp	Thu Sep 02 22:23:14 2010 +0300
@@ -300,26 +300,33 @@
 */
 void CTFontMetrics::GetNearestFontToDesignHeightInPixels()
 	{
+    INFO_PRINTF3(_L("iKPixelWidthInTwips = %d; iKPixelHeightInTwips = %d"), 
+                iFontStore->iKPixelWidthInTwips, iFontStore->iKPixelHeightInTwips);
+    
 	TOpenFontSpec openFontSpec = GetTOpenFontSpec();
 
+	INFO_PRINTF1(_L("GetNearestFontToDesignHeightInPixels().ELangNone"));
 	CFont* font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangNone);
 	iFontStore->GetNearestFontToDesignHeightInPixels(font, openFontSpec);
 	Verify_GetNearestFontToDesignHeightInPixels(*font, openFontSpec.ScriptTypeForMetrics());
 	iFontStore->ReleaseFont(font);
 
+	INFO_PRINTF1(_L("GetNearestFontToDesignHeightInPixels().ELangFinnish"));
 	font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangFinnish);
 	iFontStore->GetNearestFontToDesignHeightInPixels(font, openFontSpec);
 	Verify_GetNearestFontToDesignHeightInPixels(*font, openFontSpec.ScriptTypeForMetrics());
 	iFontStore->ReleaseFont(font);
 
+	INFO_PRINTF1(_L("GetNearestFontToDesignHeightInPixels().ELangGreek"));
 	font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangGreek);
 	iFontStore->GetNearestFontToDesignHeightInPixels(font, openFontSpec);
 	Verify_GetNearestFontToDesignHeightInPixels(*font, openFontSpec.ScriptTypeForMetrics());
 	iFontStore->ReleaseFont(font);
 
+	INFO_PRINTF1(_L("GetNearestFontToDesignHeightInPixels().ELangRussian"));
 	font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangRussian);
 	iFontStore->GetNearestFontToDesignHeightInPixels(font, openFontSpec);
@@ -330,6 +337,12 @@
 void CTFontMetrics::Verify_GetNearestFontToDesignHeightInPixels(const CFont& aFont, TInt aScript)
 	{
 	VerifyTypefaceNameAndID(aFont);
+    INFO_PRINTF4(_L("HeightInPixels() = %d; AscentInPixels() = %d; DescentInPixels() = %d"), 
+            aFont.HeightInPixels(), aFont.AscentInPixels(), aFont.DescentInPixels());
+    INFO_PRINTF4(_L("FontCapitalAscent() = %d; FontStandardDescent() = %d; FontMaxAscent() = %d"), 
+            aFont.FontCapitalAscent(), aFont.FontStandardDescent(), aFont.FontMaxAscent());
+    INFO_PRINTF4(_L("FontMaxDescent() = %d; FontMaxHeight() = %d; FontLineGap() = %d"), 
+            aFont.FontMaxDescent(), aFont.FontMaxHeight(), aFont.FontLineGap());
 	// Old metrics
 	TEST(KRequiredHeight == aFont.HeightInPixels());
 	TEST(19 == aFont.AscentInPixels());
@@ -337,30 +350,15 @@
 	// New metrics
 	TEST(18 == aFont.FontCapitalAscent());
 	TEST(5  == aFont.FontStandardDescent());
-	if (GlyphSample::EScriptNone == aScript)
+	if (GlyphSample::EScriptNone == aScript ||
+	        GlyphSample::EScriptLatin == aScript ||
+	        GlyphSample::EScriptGreek == aScript ||
+	        GlyphSample::EScriptCyrillic == aScript)	
 		{
 		TEST(28 == aFont.FontMaxAscent());
 		TEST(8 	== aFont.FontMaxDescent());
 		TEST(42 == aFont.FontLineGap());
 		}
-	else if (GlyphSample::EScriptLatin == aScript)
-		{
-		TEST(24 == aFont.FontMaxAscent());
-		TEST(5 	== aFont.FontMaxDescent());
-		TEST(35 == aFont.FontLineGap());
-		}
-	else if (GlyphSample::EScriptGreek == aScript)
-		{
-		TEST(22 == aFont.FontMaxAscent());
-		TEST(5 	== aFont.FontMaxDescent());
-		TEST(33 == aFont.FontLineGap());
-		}
-	else if (GlyphSample::EScriptCyrillic == aScript)
-		{
-		TEST(23 == aFont.FontMaxAscent());
-		TEST(5 	== aFont.FontMaxDescent());
-		TEST(34 == aFont.FontLineGap());
-		}
 	else TEST(1 == 0);
 	TEST(aFont.FontMaxAscent() + aFont.FontMaxDescent() == aFont.FontMaxHeight());
 	INFO_PRINTF2(_L("MaxCharWidthInPixels() returns %d"), aFont.MaxCharWidthInPixels());
@@ -393,24 +391,28 @@
 	{
 	TOpenFontSpec openFontSpec = GetTOpenFontSpec();
 
+	INFO_PRINTF1(_L("GetNearestFontToMaxHeightInPixels().ELangNone"));
 	CFont* font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangNone);
 	iFontStore->GetNearestFontToMaxHeightInPixels(font, openFontSpec, KRequiredHeight);
 	Verify_GetNearestFontToMaxHeightInPixels(*font, openFontSpec.ScriptTypeForMetrics());
 	iFontStore->ReleaseFont(font);
 
+	INFO_PRINTF1(_L("GetNearestFontToMaxHeightInPixels().ELangFinnish"));
 	font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangFinnish);
 	iFontStore->GetNearestFontToMaxHeightInPixels(font, openFontSpec, KRequiredHeight);
 	Verify_GetNearestFontToMaxHeightInPixels(*font, openFontSpec.ScriptTypeForMetrics());
 	iFontStore->ReleaseFont(font);
 
+	INFO_PRINTF1(_L("GetNearestFontToMaxHeightInPixels().ELangGreek"));
 	font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangGreek);
 	iFontStore->GetNearestFontToMaxHeightInPixels(font, openFontSpec, KRequiredHeight);
 	Verify_GetNearestFontToMaxHeightInPixels(*font, openFontSpec.ScriptTypeForMetrics());
 	iFontStore->ReleaseFont(font);
 
+	INFO_PRINTF1(_L("GetNearestFontToMaxHeightInPixels().ELangRussian"));
 	font = NULL;
 	openFontSpec.SetScriptTypeForMetrics(ELangRussian);
 	iFontStore->GetNearestFontToMaxHeightInPixels(font, openFontSpec, KRequiredHeight);
@@ -421,62 +423,42 @@
 void CTFontMetrics::Verify_GetNearestFontToMaxHeightInPixels(const CFont& aFont, TInt aScript)
 	{
 	VerifyTypefaceNameAndID(aFont);
+    INFO_PRINTF4(_L("HeightInPixels() = %d; AscentInPixels() = %d; DescentInPixels() = %d"), 
+            aFont.HeightInPixels(), aFont.AscentInPixels(), aFont.DescentInPixels());
+    INFO_PRINTF4(_L("FontCapitalAscent() = %d; FontStandardDescent() = %d; FontMaxAscent() = %d"), 
+            aFont.FontCapitalAscent(), aFont.FontStandardDescent(), aFont.FontMaxAscent());
+    INFO_PRINTF4(_L("FontMaxDescent() = %d; FontMaxHeight() = %d; FontLineGap() = %d"), 
+            aFont.FontMaxDescent(), aFont.FontMaxHeight(), aFont.FontLineGap());
 	if (GlyphSample::EScriptNone == aScript)
 		{
 		// Old metrics
-		TEST(15 == aFont.HeightInPixels());
-		TEST(12 == aFont.AscentInPixels());
-		TEST(15 - 12 == aFont.DescentInPixels());
-		// New metrics
-		TEST(11 == aFont.FontCapitalAscent());
-		TEST(3  == aFont.FontStandardDescent());
-		TEST(18 == aFont.FontMaxAscent());
-		TEST(5 	== aFont.FontMaxDescent());
-		TEST(KRequiredHeight - 1 == aFont.FontMaxHeight());
-		TEST(29 == aFont.FontLineGap());
-		}
-	else if (GlyphSample::EScriptLatin == aScript)
-		{
-		// Old metrics
-		TEST(20 == aFont.HeightInPixels());
-		TEST(16 == aFont.AscentInPixels());
-		TEST(20 - 16 == aFont.DescentInPixels());
-		// New metrics
-		TEST(15 == aFont.FontCapitalAscent());
-		TEST(4  == aFont.FontStandardDescent());
-		TEST(20 == aFont.FontMaxAscent());
-		TEST(4 	== aFont.FontMaxDescent());
-		TEST(KRequiredHeight == aFont.FontMaxHeight());
-		TEST(30 == aFont.FontLineGap());
+        TEST(16 == aFont.HeightInPixels());
+        TEST(13 == aFont.AscentInPixels());
+        TEST(16 - 13 == aFont.DescentInPixels());
+        // New metrics
+        TEST(12 == aFont.FontCapitalAscent());
+        TEST(3  == aFont.FontStandardDescent());
+        TEST(19 == aFont.FontMaxAscent());
+        TEST(6  == aFont.FontMaxDescent());
+        TEST(KRequiredHeight + 1 == aFont.FontMaxHeight());
+        TEST(31 == aFont.FontLineGap());
 		}
-	else if (GlyphSample::EScriptGreek == aScript)
-		{
-		// Old metrics
-		TEST(20 == aFont.HeightInPixels());
-		TEST(16 == aFont.AscentInPixels());
-		TEST(20 - 16 == aFont.DescentInPixels());
-		// New metrics
-		TEST(15 == aFont.FontCapitalAscent());
-		TEST(4  == aFont.FontStandardDescent());
-		TEST(18 == aFont.FontMaxAscent());
-		TEST(5 	== aFont.FontMaxDescent());
-		TEST(KRequiredHeight - 1 == aFont.FontMaxHeight());
-		TEST(29 == aFont.FontLineGap());
-		}
-	else if (GlyphSample::EScriptCyrillic == aScript)
-		{
-		// Old metrics
-		TEST(21 == aFont.HeightInPixels());
-		TEST(16 == aFont.AscentInPixels());
-		TEST(21 - 16 == aFont.DescentInPixels());
-		// New metrics
-		TEST(16 == aFont.FontCapitalAscent());
-		TEST(4  == aFont.FontStandardDescent());
-		TEST(20 == aFont.FontMaxAscent());
-		TEST(4 	== aFont.FontMaxDescent());
-		TEST(KRequiredHeight == aFont.FontMaxHeight());
-		TEST(30 == aFont.FontLineGap());
-		}
+	else if (GlyphSample::EScriptLatin == aScript ||
+	        GlyphSample::EScriptGreek == aScript ||
+	        GlyphSample::EScriptCyrillic == aScript)
+	    {
+        // Old metrics
+        TEST(24 == aFont.HeightInPixels());
+        TEST(19 == aFont.AscentInPixels());
+        TEST(24 - 19 == aFont.DescentInPixels());
+        // New metrics
+        TEST(18 == aFont.FontCapitalAscent());
+        TEST(5  == aFont.FontStandardDescent());
+        TEST(28 == aFont.FontMaxAscent());
+        TEST(8  == aFont.FontMaxDescent());
+        TEST(KRequiredHeight + 12 == aFont.FontMaxHeight());
+        TEST(42 == aFont.FontLineGap());
+	    }
 	else TEST(1 == 0);
 	INFO_PRINTF2(_L("MaxCharWidthInPixels() returns %d"), aFont.MaxCharWidthInPixels());
 	}
--- a/layers.sysdef.xml	Wed Aug 18 11:34:25 2010 +0300
+++ b/layers.sysdef.xml	Thu Sep 02 22:23:14 2010 +0300
@@ -96,9 +96,9 @@
 <SystemDefinition name="textandloc_build" schema="1.4.0">
   <systemModel>
     <layer name="os_layer">
-      <!--module name="freetype">
-        <unit name="freetype" unitID="tls.freetype"  bldFile="sf\os\textandloc\fontservices\freetypefontrasteriser\group" mrp="sf\os\textandloc\fontservices\freetypefontrasteriser\group\graphics_freetype.mrp"/>
-      </module-->
+      <module name="freetype">
+        <unit name="freetype" unitID="tls.freetype"  bldFile="sf\os\textandloc\fontservices\freetypefontrasteriser\group" mrp="sf\os\textandloc\fontservices\freetypefontrasteriser\group\graphics_freetype.mrp" filter="!dfs_build"/>
+      </module>
       <module name="app-framework_etext">
         <unit name="etext" unitID="tls.etext"  bldFile="sf\os\textandloc\textrendering\texthandling\group" mrp="sf\os\textandloc\textrendering\texthandling\group\app-framework_etext.mrp"/>
       </module>
--- a/package_definition.xml	Wed Aug 18 11:34:25 2010 +0300
+++ b/package_definition.xml	Thu Sep 02 22:23:14 2010 +0300
@@ -2,13 +2,22 @@
 <SystemDefinition schema="3.0.0">
   <package id="textandloc" name="Text and Localisation Services" levels="encoding util fonts tools text">
     <collection id="charconvfw" name="Character Conversion" level="encoding">
-      <component id="charconv_fw" name="Character Encoding and Conversion Framework" purpose="optional">
+      <component id="charconv_fw" name="Character Encoding and Conversion Framework" purpose="mandatory" filter="api_test"> <!-- both production and api_test-->
+    	<meta rel="testbuild">
+          <group name="test.syslibs_charconv"/>
+        </meta>
         <unit bldFile="charconvfw/charconv_fw/group" mrp="charconvfw/charconv_fw/group/syslibs_charconv.mrp"/>
       </component>
-      <component id="charconvplugins" name="Character Encoding and Conversion Plugins" purpose="optional" class="plugin">
+      <component id="charconvplugins" name="Character Encoding and Conversion Plugins" purpose="optional" class="plugin" filter="apit_test">  <!-- both production and api_test-->
+    	<meta rel="testbuild">
+          <group name="test.syslibs_charconv_plugins"/>
+        </meta>
         <unit bldFile="charconvfw/charconvplugins/group" mrp="charconvfw/charconvplugins/group/syslibs_charconv_plugins.mrp"/>
       </component>
-      <component id="fatfilenameconversionplugins" name="FAT Filename Conversion Plugins" introduced="9.1" purpose="optional" class="plugin">
+      <component id="fatfilenameconversionplugins" name="FAT Filename Conversion Plugins" introduced="9.1" purpose="optional" class="plugin" filter="api_test">   <!-- both production and api_test-->
+    	<meta rel="testbuild">
+          <group name="test.syslibs_fatcharsetconv"/>
+        </meta>
         <unit bldFile="charconvfw/fatfilenameconversionplugins/group" mrp="charconvfw/fatfilenameconversionplugins/group/syslibs_FATCharsetConv.mrp"/>
       </component>      
     </collection>
@@ -16,12 +25,15 @@
       <component id="iculayoutengine" name="ICU Layout Engine" introduced="9.2" purpose="optional" class="plugin">
         <unit bldFile="fontservices/textshaperplugin/group" mrp="fontservices/textshaperplugin/group/graphics_iculayoutengine.mrp"/>
       </component>
-      <component id="fontstore" name="Font Store" purpose="mandatory">
+      <component id="fontstore" name="Font Store" purpose="mandatory" filter="api_test"> <!-- both production and api_test-->
+    	<meta rel="testbuild">
+          <group name="test.graphics_fntstore"/>
+        </meta>
         <unit bldFile="fontservices/fontstore/group" mrp="fontservices/fontstore/group/graphics_fntstore.mrp"/>
       </component>
      <component id="textbase" name="Text Base" purpose="mandatory">
-		<unit bldFile="fontservices/textbase/group" mrp="fontservices/textbase/group/textbase.mrp"/>
-     </component>
+     	<!-- placeholder for text code from GDI -->
+     </component>      
       <component id="freetypefontrasteriser" name="FreeType Font Rasteriser" purpose="optional" class="plugin">
         <unit bldFile="fontservices/freetypefontrasteriser/group" mrp="fontservices/freetypefontrasteriser/group/graphics_freetype.mrp"/>
       </component>
@@ -30,10 +42,10 @@
       </component>
     </collection>
     <collection id="textlayout" name="Text Layout" level="text">
-      <component id="texthandling" name="Text Handling" purpose="optional">
+      <component id="texthandling" name="Text Handling" purpose="optional" deprecated="^4">
         <unit bldFile="textrendering/texthandling/group" mrp="textrendering/texthandling/group/app-framework_etext.mrp"/>
       </component>
-      <component id="textformatting" name="Text Formatting" purpose="optional">
+      <component id="textformatting" name="Text Formatting" purpose="optional" deprecated="^4">
         <unit bldFile="textrendering/textformatting/group" mrp="textrendering/textformatting/group/app-framework_form.mrp"/>
       </component>
       <component id="word" name="Word" purpose="development" filter="test">
@@ -41,18 +53,18 @@
       </component>
     </collection>
     <collection id="textandlocutils" name="Text and Localisation Utils" level="util">
-      <component id="numbergrouping" name="Number Grouping" purpose="mandatory">
+      <component id="numbergrouping" name="Number Grouping" deprecated="^4">
         <unit bldFile="textandlocutils/numbergrouping/group" mrp="textandlocutils/numbergrouping/group/tls_numbergrouping.mrp"/>
       </component>
-      <component id="jplangutil" name="Japanese Language Utilities" purpose="mandatory">
+      <component id="jplangutil" name="Japanese Language Utilities" deprecated="^4">
         <unit bldFile="textandlocutils/jplangutil/group" mrp="textandlocutils/jplangutil/group/tls_jplangutil.mrp"/>
       </component>
-      <component id="sortutil" name="Sorting Utility" purpose="mandatory">
+      <component id="sortutil" name="Sorting Utility" deprecated="^4">
         <unit bldFile="textandlocutils/sortutil/group" mrp="textandlocutils/sortutil/group/tls_sortutil.mrp"/>
       </component>
-      <component id="inlinetext" name="Inline Text" purpose="mandatory">
+      <component id="inlinetext" name="Inline Text" deprecated="^4">
         <unit bldFile="textandlocutils/inlinetext/group" mrp="textandlocutils/inlinetext/group/tls_inlinetext.mrp"/>
-      </component>
+     </component>
       <component id="numberformatting" name="Number Formatting" introduced="7.0s" purpose="optional">
         <unit bldFile="textrendering/numberformatting/group" mrp="textrendering/numberformatting/group/app-framework_numberconversion.mrp"/>
       </component>
@@ -61,7 +73,7 @@
       <component id="reflocales" name="Reference Locales"  purpose="optional" class="plugin">
         <unit bldFile="localisation/localesupport" mrp="localisation/localesupport/mmpfiles/base_loce32.mrp"/>
       </component>
-     <component id="initlocale" name="Initialise Locale" introduced="^2" purpose="mandatory">
+     <component id="initlocale" name="Initialise Locale" introduced="^2" purpose="mandatory" deprecated="^4">
      	<!-- placeholder for split from bafl -->
      </component>
     </collection>
@@ -74,18 +86,16 @@
       </component>
     </collection>    
     <collection id="textandloc_info" name="Text and Localisation Info" level="text">
-      <component id="textandloc_pub" filter="s60" name="Text and Localisation Public Interfaces" class="api">
-        <unit bldFile="textandloc_pub/group"/>
-        <!-- <unit bldFile="textandloc_pub/character_conversion_plugin_provider_api/tsrc/group"/> -->
-      </component>
-      <component id="textandloc_plat" filter="s60" name="Text and Localisation Platform Interfaces" class="api">
-        <unit bldFile="textandloc_plat/group"/>
-        <!-- <unit bldFile="textandloc_plat/findutil_api/tsrc/group"/> -->
-        <!-- <unit bldFile="textandloc_plat/sortutil_api/tsrc/group"/> -->
-      </component>
       <component id="textandloc_metadata" name="Text and Localisation Metadata" class="config" introduced="^2" purpose="development" target="desktop">
         <unit mrp="textandloc_info/textandloc_metadata/textandloc_metadata.mrp"/>
       </component>
+      <component id="textandloc_graphicstestharness" name="Graphics Test Harness" introduced="8.1" purpose="development" filter="test,api_test">
+	  	<!-- this is not part of this package, it should not be refrerenced here -->
+    	<meta rel="testbuild">
+          <group name="test.graphics_testharness"/>
+        </meta>
+        <unit bldFile="../graphics/graphicstest/graphicstestharness/group"/>
+      </component>
     </collection>
   </package>
 </SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Thu Sep 02 22:23:14 2010 +0300
@@ -0,0 +1,1 @@
+<PackageMap root="sf" layer="os"/>