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