diff -r df63379a03bd -r adc615fe34e8 sbsv2/raptor/test/smoke_suite/test_resources/tools2/pdrtran/src/PDRREADR.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/pdrtran/src/PDRREADR.CPP Fri Jan 22 16:42:55 2010 +0000 @@ -0,0 +1,1009 @@ +/* +* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Header PDRREADR.CPP +* +*/ + + +#include "PDRREADR.H" + +const int NumResources=34; + +String IdentResource[NumResources] = + { + "Reset", + "SetPageSize", + "PreAmble", + "PostAmble", + "SetTextColor", // !! + "BoldOn", + "BoldOff", + "ItalicOn", + "ItalicOff", + "UnderlineOn", + "UnderlineOff", + "StrikethroughOn", + "StrikethroughOff", + "NewPage", + "Portrait", + "Landscape", + "SetXPos", + "SetYPos", + "IncrementXPos", + "IncrementYPos", + "CarriageReturn", + "SetGraphicsColor", // !! + "BitmapStart", + "BitmapEnd", + "ScanLine", + "EndScanLine", // !! + "Resource1", + "Resource2", + "Resource3", + "Resource4", + "Resource5", + "Resource6", + "Resource7", + "Resource8" + }; + +const int NumDisplayModeValues = 11; + +String IdentDisplayModeValue[NumDisplayModeValues] = + { + "None", + "Gray2", + "Gray4", + "Gray16", + "Gray256", + "Color16", + "Color256", + "Color64K", + "Color16M", + "Rgb", + "Color4K" + }; + +EXPORT_C PdrReader::PdrReader() + : Reader(), + iPdrModelStore(), + iPdrStoreFile(NULL), + iResources(NULL), + iTranslates(NULL), + iCodeSection(NULL), + iFontInfo(NULL), + iIndex(Normal), + iFontHeight(NULL), + iTypefaceFonts(NULL), + iModel(NULL) + { + } + +EXPORT_C boolean PdrReader::Read(const String& aFilename) + { + boolean state = Open(aFilename); + + while (!_EOF() && state) + { + if (IdentComp(IdentResources)) + state = ReadResources(); + else if (IdentComp(IdentTranslates)) + state = ReadTranslates(); + else if (IdentComp(IdentFontInfo)) + state = ReadFontInfo(); + else if (IdentComp(IdentTypefaceFonts)) + state = ReadTypefaceFonts(); +// else if (IdentComp(IdentExtraInfo)) +// state = ReadExtraInfo(); + else if (IdentComp(IdentModel)) + state = ReadModel(); + else if (IdentComp(IdentPdrStoreFile)) + state = ReadPdrStoreFile(); + else + { + Error("Resource identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + return state; + } + +EXPORT_C PdrReader::~PdrReader() + { + } + +boolean PdrReader::ReadResources() + { + boolean state = etrue; + iResources = PdrResources::New(); + state = IdentCopy(iResources->iLabel); + if (state) + state = NewLine(); + while (!IdentComp(IdentEndResources) && !_EOF() && state) + { + int i; // DEF102183: Graphics tools fail to build using MS VC8. + for (i = 0; (i < NumResources) && !IdentComp(IdentResource[i]); i++) + { // Tries to match resources identifier + } + if (i < NumResources) + { + PdrResource *resource = PdrResource::New(); + state = Command(resource->iString); + resource->iId = i; + if (state) + { + iResources->AddResource(resource); + state = NewLine(); + } + else + resource->Delete(); + } + else + { + state = efalse; + Error("Resources identifier expected"); + } + } + if (state) + { + iPdrModelStore.AddResources(iResources); + cout << "Resources read\n"; + } + else + iResources->Delete(); + return state; + } + +boolean PdrReader::ReadTranslates() + { + int num; + boolean state = etrue; + iTranslates = PdrTranslates::New(); + state = IdentCopy(iTranslates->iLabel); + if (state) + state = NewLine(); + while (!IdentComp(IdentEndTranslates) && !_EOF() && state) + { + if (iLex->iType == ELexNumber) + { + PdrTranslation *translation = PdrTranslation::New(); + Number(num); + translation->iFrom = uint16(num); + char ch; + state = Operator(ch); + if (state) + { + state = (ch == ':'); + if (state) + { + if (iLex->iType == ELexNumber) + { + state = Number(num); + translation->iTo += char(num); + } + else + { + state = Command(translation->iTo); + } + if (state) + state = NewLine(); + } + else + { + Error("Operator ':' expected"); + } + } + if (state) + iTranslates->AddTranslation(translation); + else + translation->Delete(); + } + } + if (state) + { + iPdrModelStore.AddTranslates(iTranslates); + cout << "Translates read\n"; + } + else + iTranslates->Delete(); + return state; + } + +boolean PdrReader::ReadCodeSection(int aCode) + { + boolean state = etrue; + int code; + int num; + iCodeSection = WidthsCodeSection::New(); + char ch = 0; + state = Number(num); + if ((numiStart = uint16(num); + state = Operator(ch); + if (state) + state = (ch == ':'); + if (state) + { + state = Number(num); + iCodeSection->iEnd = uint16(num); + state = NewLine(); + } + else + { + state = efalse; + Error("Operator ':' expected"); + } + } + else + state = efalse; + while (!IdentComp(IdentEndCodeSection) && !_EOF() && state) + { + if (iLex->iType != ELexNL) + { + state = Number(code); + if ((code != iCodeSection->iStart + iCodeSection->NumWidths()) && state) + { + state = efalse; + Error("Width out of sequence"); + } + if (state) + state = Operator(ch); + if (state) + state = (ch == ':'); + if (state) + { + Width *width = Width::New(); + if (Number(num)) + { + width->iWidthInPixels = (uint16) num; + iCodeSection->AddWidth(width); + } + else + { + state = efalse; + width->Delete(); + } + } + } + else + state = NewLine(); + } + if (state) + { + num = ((iCodeSection->iEnd + 1) - iCodeSection->iStart); + if ((num != iCodeSection->NumWidths()) && (iCodeSection->NumWidths() != 1)) + { + Error("Wrong number of widths in codesection"); + state = efalse; + } + } + if (state) + { + iFontInfo->AddCodeSection(iCodeSection); +// cout << "Codesection read\n"; + } + else + iCodeSection->Delete(); + return state; + } + +boolean PdrReader::ReadFontInfo() + { + boolean state = etrue; + iFontInfo = FontInfo::New(); + int num; + state = IdentCopy(iFontInfo->iLabel); + if (state) + state = NewLine(); + while (!IdentComp(IdentEndFontInfo) && !_EOF() && state) + { + if (iLex->iType == ELexIdent) + { + if (IdentComp(IdentCodeSection)) + { + int code = 0,size = iFontInfo->NumCodeSections(); + if (size) + code = iFontInfo->CodeSectionList(size - 1)->iEnd + 1; + state = ReadCodeSection(code); + } + else if (IdentComp(IdentAscent)) + { + if (Number(num)) + iFontInfo->iAscentInPixels = uint16(num); + else + state = efalse; + } + else if (IdentComp(IdentMaxNormalCharWidth)) + { + state = Number(num); + if (state) + iFontInfo->iMaxNormalCharWidthInPixels = uint16(num); + } + else + { + Error("Unrecognised fontinfo identifier"); + state = efalse; + } + } + else + { + Error("Fontinfo identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + if (state) + { + iFontInfo->iMaxCharWidthInPixels = 0; + for (int i = 0; i < iFontInfo->NumCodeSections(); i++) + { + WidthsCodeSection* codesection = iFontInfo->CodeSectionList(i); + for (int j = 0; j < codesection->NumWidths(); j++) + { + int width = codesection->WidthList(j)->iWidthInPixels; + if (width > iFontInfo->iMaxCharWidthInPixels) + iFontInfo->iMaxCharWidthInPixels = (uint16) width; + } + } + } + if (state) + { + iPdrModelStore.AddFontInfo(iFontInfo); + cout << "Fontinfo read\n"; + } + else + iFontInfo->Delete(); + return state; + } + +boolean PdrReader::ReadStyle() + { + boolean state = etrue; + Record *fontinfo; + PdrStyle *style; + String label; + if (!iTypefaceFonts->iIsScalable) + style = &iFontHeight->iStyle[iIndex]; + else + style = &iTypefaceFonts->iScalableFontHeight.iStyle[iIndex]; + style->iIsAvailable = etrue; + state = IdentCopy(label); + if (state) + { + fontinfo = iPdrModelStore.FindFontInfo(label); + if (fontinfo) + style->iFontInfo = fontinfo; + else + { + Error("Fontinfo not found"); + state = efalse; + } + } + return state; + } + +boolean PdrReader::ReadFontHeight() + { + boolean state = etrue; + int num; + if (iTypefaceFonts->iIsScalable == etrue) + { + state = efalse; + Error("Scalablefontheight already defined"); + } + else + iFontHeight = PdrFontHeight::New(); + if (state) + state = NewLine(); + + while (!IdentComp(IdentEndFontHeight) && !_EOF() && state) + { + if (iLex->iType == ELexIdent) + { + if (IdentComp(IdentHeight)) + { + if (Number(num)) + iFontHeight->iHeightInTwips = num; + else + state = efalse; + } + else if (IdentComp(IdentWidthScale)) + { + if (Number(num)) + iFontHeight->iWidthScale = num; + else + state = efalse; + } + else if (IdentComp(IdentNormal)) + { + iIndex = Normal; + state = ReadStyle(); + } + else if (IdentComp(IdentBold)) + { + iIndex = Bold; + state = ReadStyle(); + } + else if (IdentComp(IdentItalic)) + { + iIndex = Italic; + state = ReadStyle(); + } + else if (IdentComp(IdentBoldItalic)) + { + iIndex = BoldItalic; + state = ReadStyle(); + } + else if (IdentComp(IdentCommand)) + { + state = Command(iFontHeight->iCommandString); + } + else + { + Error("Unrecognised fontheight identifier"); + state = efalse; + } + } + else + { + Error("Fontheight identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + if (state) + { + iTypefaceFonts->AddFontHeight(iFontHeight); + cout << "Fontheight read\n"; + } + else + iFontHeight->Delete(); + return state; + } + +boolean PdrReader::ReadScalableFontHeight() + { + boolean state = etrue; + int num; + if (iTypefaceFonts->NumFontHeights()) + { + state = efalse; + Error("Non-scalable fontheights already defined"); + } + else if (iTypefaceFonts->iIsScalable == etrue) + { + state = efalse; + Error("Scalablefontheight already defined"); + } + iTypefaceFonts->iIsScalable=etrue; + if (state) + state = NewLine(); + + while (!IdentComp(IdentEndScalableFontHeight) && !_EOF() && state) + { + if (iLex->iType == ELexIdent) + { + if (IdentComp(IdentHeightMin)) + { + if (Number(num)) + iTypefaceFonts->iScalableFontHeight.iHeightMinInTwips = num; + else + state = efalse; + } + else if (IdentComp(IdentHeightMax)) + { + if (Number(num)) + iTypefaceFonts->iScalableFontHeight.iHeightMaxInTwips = num; + else + state = efalse; + } + else if (IdentComp(IdentHeightDelta)) + { + if (Number(num)) + iTypefaceFonts->iScalableFontHeight.iHeightDeltaInTwips = num; + else + state = efalse; + } + else if (IdentComp(IdentNormal)) + { + iIndex = Normal; + state = ReadStyle(); + } + else if (IdentComp(IdentBold)) + { + iIndex = Bold; + state = ReadStyle(); + } + else if (IdentComp(IdentItalic)) + { + iIndex = Italic; + state = ReadStyle(); + } + else if (IdentComp(IdentBoldItalic)) + { + iIndex = BoldItalic; + state = ReadStyle(); + } + else if (IdentComp(IdentCommand)) + { + state = Command(iTypefaceFonts->iScalableFontHeight.iCommandString); + } + else + { + Error("Unrecognised scalablefontheight identifier"); + state = efalse; + } + } + else + { + Error("Scalablefontheight identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + if (state) + { + cout << "Scalablefontheight read\n"; + } + else + { + if (!iTypefaceFonts->iIsScalable) + iFontHeight->Delete(); + } + return state; + } + +boolean PdrReader::ReadTypefaceFonts() + { + boolean state = etrue; + Record* translates; + String label; + iTypefaceFonts = TypefaceFonts::New(); + state = IdentCopy(iTypefaceFonts->iLabel); + if (state) + state = NewLine(); + while (!IdentComp(IdentEndTypefaceFonts) && !_EOF() && state) + { + if (iLex->iType == ELexIdent) + { + if (IdentComp(IdentTypefaceName)) + { + if (StringCopy(iTypefaceFonts->iTypeface.iName)) + while (iLex->iType != ELexNL) + { if (IdentComp(IdentProportional)) + iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Proportional); + else if (IdentComp(IdentSerif)) + iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Serif); + else if (IdentComp(IdentSymbol)) + iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Symbol); + else + { + Error("Typefacefonts identifier or newline expected"); + state = efalse; + } + } + else + state = efalse; + } + else if (IdentComp(IdentTypefaceTranslates)) + { + state = IdentCopy(label); + if (state) + { + translates = iPdrModelStore.FindTranslates(label); + if (translates) + iTypefaceFonts->iTranslates = translates; + else + { + Error("Translates not found"); + state = efalse; + } + } + } + else if (IdentComp(IdentFontHeight)) + { + state = ReadFontHeight(); + } + else if (IdentComp(IdentScalableFontHeight)) + { + state = ReadScalableFontHeight(); + } + else + { + Error("Unrecognised typefacefonts identifier"); + state = efalse; + } + } + else + { + Error("Typefacefonts identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + if (state) + { + iPdrModelStore.AddTypefaceFonts(iTypefaceFonts); + cout << "Typefacefonts read\n"; + } + else + iTypefaceFonts->Delete(); + return state; + } + +boolean PdrReader::ReadModel() + { + boolean state = etrue; + int num; + iModel = PrinterModelHeader::New(); + Record* resources; +// Record* extrainfo; + String label; + state = IdentCopy(iModel->iLabel); + if (state) + state = NewLine(); + while (!IdentComp(IdentEndModel) && !_EOF() && state) + { + if (iLex->iType == ELexIdent) + { + if (IdentComp(IdentModelName)) + { + if (StringCopy(iModel->iEntry.iName)) + while (iLex->iType != ELexNL) + { + if (IdentComp(IdentRequiresPrinterPort)) + iModel->iEntry.iRequiresPrinterPort = etrue; + else + { + Error("Model identifier or newline expected"); + state = efalse; + } + } + else + state = efalse; + } + else if (IdentComp(IdentModelUid)) + state = Number(iModel->iEntry.iUid); + else if (IdentComp(IdentModelFlags)) + { + state = Number(num); + iModel->iInfo.iFlags = num; + } + else if (IdentComp(IdentModelResources)) + { + state = IdentCopy(label); + if (state) + { + resources = iPdrModelStore.FindResources(label); + if (resources) + iModel->iInfo.iResources = resources; + else + { + Error("Resources not found"); + state = efalse; + } + } + } +/* else if (IdentComp(IdentSpareRecord)) + { + state = IdentCopy(label); + if (state) + { + extrainfo = iPdrModelStore.FindExtraInfo(label); + if (extrainfo) + iModel->iInfo.iSpareRecord = extrainfo; + else + { + Error("Spare record not found"); + state = efalse; + } + } + } +*/ + else if (IdentComp(IdentKPixelWidth)) + { + if (Number(num)) + iModel->iInfo.iKPixelWidthInTwips = num; + else + state = efalse; + } + else if (IdentComp(IdentKPixelHeight)) + { + if (Number(num)) + iModel->iInfo.iKPixelHeightInTwips = num; + else + state = efalse; + } + else if (IdentComp(IdentPortraitOffset)) + { + if (Number(num)) + { + iModel->iInfo.iPortraitOffsetInPixels.iX = num; + if (Number(num)) + iModel->iInfo.iPortraitOffsetInPixels.iY = num; + else + state = efalse; + } + else + state = efalse; + } + else if (IdentComp(IdentLandscapeOffset)) + { + if (Number(num)) + { + iModel->iInfo.iLandscapeOffsetInPixels.iX = num; + if (Number(num)) + iModel->iInfo.iLandscapeOffsetInPixels.iY = num; + else + state = efalse; + } + else + state = efalse; + } + else if (IdentComp(IdentMinMarginLeft)) + { + if (Number(num)) + iModel->iInfo.iMinMarginsInPixels.iLeft = num; + else + state = efalse; + } + else if (IdentComp(IdentMinMarginRight)) + { + if (Number(num)) + iModel->iInfo.iMinMarginsInPixels.iRight = num; + else + state = efalse; + } + else if (IdentComp(IdentMinMarginTop)) + { + if (Number(num)) + iModel->iInfo.iMinMarginsInPixels.iTop = num; + else + state = efalse; + } + else if (IdentComp(IdentMinMarginBottom)) + { + if (Number(num)) + iModel->iInfo.iMinMarginsInPixels.iBottom = num; + else + state = efalse; + } + else if (IdentComp(IdentDisplayMode)) + { + int i; // DEF102183: Graphics tools fail to build using MS VC8. + for (i = 0; (i < NumDisplayModeValues) && !IdentComp(IdentDisplayModeValue[i]); i++) + { // Tries to match display mode identifier + } + if (i < NumDisplayModeValues) + { + iModel->iInfo.iDisplayMode = i; + } + else + { + state = efalse; + Error("Display mode identifier expected"); + } + } + else if (IdentComp(IdentTypefaceFontss)) + { + state = NewLine(); + while (!IdentComp(IdentEndTypefaceFontss) && !_EOF() && state) + { + TypefaceFontsEntry* typefacefontsentry = NULL; + if (iLex->iType == ELexIdent) + { + state = IdentCopy(label); + Record* typefacefonts = iPdrModelStore.FindTypefaceFonts(label); + if (typefacefonts) + { + typefacefontsentry = TypefaceFontsEntry::New(typefacefonts); + state = etrue; + } + else + { + Error("Typefacefonts not found"); + state = efalse; + } + } + if (state) + { + while ((iLex->iType != ELexNL) && !_EOF() && state) + { + if (IdentComp(IdentNotInPortrait)) + { + typefacefontsentry->iNotInPortrait = etrue; + } + else if (IdentComp(IdentNotInLandscape)) + { + typefacefontsentry->iNotInLandscape = etrue; + } + else + { + Error("Typefacefontsentry identifier or newline expected"); + state = efalse; + } + } + if (state) + iModel->iInfo.AddTypefaceFontsEntry(typefacefontsentry); + else + typefacefontsentry->Delete(); + } + if (state) + state = NewLine(); + } + } + else + { + Error("unrecognised model identifier"); + state = efalse; + } + } + else + { + Error("Model identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + if (state) + { + iPdrModelStore.AddModel(iModel); + cout << "Model read\n"; + } + else + iModel->Delete(); + return state; + } + +boolean PdrReader::ReadPdrStoreFile() + { + boolean state = etrue; + if (iPdrStoreFile) + { + state = efalse; + Error("Pdrstorefile already read"); + } + else + { + iPdrStoreFile = PdrStoreFile::New(); + String label; + Record* model; + state = NewLine(); + while (!IdentComp(IdentEndPdrStoreFile) && !_EOF() && state) + { + if (IdentComp(IdentPDLName)) + { + state = StringCopy(iPdrStoreFile->iPDLName); + } + else if (IdentComp(IdentPDLUid)) + { + state = Number(iPdrStoreFile->iPDLUid); + } + else if (IdentComp(IdentModels)) + { + state = NewLine(); + while (!IdentComp(IdentEndModels) && !_EOF() && state) + { + state = IdentCopy(label); + if (state) + { + model = iPdrModelStore.FindModel(label); + if (model) + { + iPdrStoreFile->AddModel((PrinterModelHeader*)model); + } + else + { + Error("model not found"); + state = efalse; + } + } + if (state) + state = NewLine(); + } + } + else + { + Error("Pdrstorefile identifier expected"); + state = efalse; + } + if (state) + state = NewLine(); + } + if (state) + { + iPdrModelStore.AddPdrStoreFile(iPdrStoreFile); + cout << "Pdrstorefile read\n"; + } + else + iPdrStoreFile->Delete(); + } + return state; + } + +EXPORT_C boolean PdrReader::Store(const String& aFilename) + { + boolean state = etrue; + if (!iPdrStoreFile) + { + state = efalse; + Error("No pdrstore file record"); + } + else + state = iPdrModelStore.Store(aFilename); + return state; + } + +boolean PdrReader::Command(String& aCommand) + { + boolean state = etrue; + String string; + state = StringCopy(string); + int length = string.Length(); + for (int i = 0; i < length; i++) + { + char ch = string[i]; + if (ch == '<') // Read control character + { + ch = 0; + for (i = i + 1; (i < length) && (string[i] != '>'); i++) + ch = char((ch * 10) + (string[i] - '0')); + } + aCommand += ch; + } + return state; + } +/* +boolean PdrReader::ReadExtraInfo() + { + boolean state = etrue; + String label; + PdrExtraInfo* extrainfo = new PdrExtraInfo(); + state = IdentCopy(extrainfo->iLabel); + if (state) + state = NewLine(); + while (!IdentComp(IdentEndExtraInfo) && !_EOF() && state) + { + String* string = new String; + state = Command(*string); + if (state) + extrainfo->iInfo.Add(string); + else + delete string; + state = NewLine(); + } + if (state) + { + iPdrModelStore.AddExtraInfo(extrainfo); + cout << "Extra info read\n"; + } + else + delete extrainfo; + return state; + } +*/