Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/**************************************************************************\
* * Copyright (c) 1998 Microsoft Corporation * * Module Name: * * stringFormat.cpp * * Abstract: * * Implementation for the string formatting class * * Revision History: * * 12 April 2000 dbrown * Created it. * \**************************************************************************/
#include "precomp.hpp"
GpStringFormat *GpStringFormat::GenericDefaultPointer = NULL; GpStringFormat *GpStringFormat::GenericTypographicPointer = NULL;
BYTE GpStringFormat::GenericDefaultStaticBuffer [sizeof(GpStringFormat)] = {0}; BYTE GpStringFormat::GenericTypographicStaticBuffer[sizeof(GpStringFormat)] = {0};
GpStringFormat *GpStringFormat::GenericDefault() { if (GenericDefaultPointer != NULL) { return GenericDefaultPointer; }
// Initialise static GpStringFormat class
// Create the GpStringFormat without allocating memory by using object placement
GenericDefaultPointer = new(GenericDefaultStaticBuffer) GpStringFormat(); ASSERT(GenericDefaultPointer->Flags == DefaultFormatFlags); GenericDefaultPointer->LeadingMargin = DefaultMargin; GenericDefaultPointer->TrailingMargin = DefaultMargin; GenericDefaultPointer->Tracking = DefaultTracking; GenericDefaultPointer->Trimming = StringTrimmingCharacter; GenericDefaultPointer->Permanent = TRUE;
return GenericDefaultPointer; }
GpStringFormat *GpStringFormat::GenericTypographic() { if (GenericTypographicPointer != NULL) { return GenericTypographicPointer; }
// Initialise static GpStringFormat class
// Create the GpStringFormat without allocating memory by using object placement
GenericTypographicPointer = new(GenericTypographicStaticBuffer) GpStringFormat(); GenericTypographicPointer->Flags |= (StringFormatFlagsNoFitBlackBox | StringFormatFlagsNoClip | StringFormatFlagsLineLimit); GenericTypographicPointer->LeadingMargin = 0.0; GenericTypographicPointer->TrailingMargin = 0.0; GenericTypographicPointer->Tracking = 1.0; GenericTypographicPointer->Trimming = StringTrimmingNone; GenericTypographicPointer->Permanent = TRUE;
return GenericTypographicPointer; }
GpStringFormat *GpStringFormat::Clone() const { // Get a binary copy
GpStringFormat *newFormat = new GpStringFormat();
if (newFormat) { newFormat->Flags = Flags; newFormat->Language = Language; newFormat->StringAlign = StringAlign; newFormat->LineAlign = LineAlign; newFormat->DigitSubstitute = DigitSubstitute; newFormat->DigitLanguage = DigitLanguage; newFormat->FirstTabOffset = FirstTabOffset; newFormat->TabStops = NULL; newFormat->CountTabStops = CountTabStops; newFormat->HotkeyPrefix = HotkeyPrefix; newFormat->LeadingMargin = LeadingMargin; newFormat->TrailingMargin = TrailingMargin; newFormat->Tracking = Tracking; newFormat->Trimming = Trimming; newFormat->RangeCount = RangeCount; newFormat->Permanent = NULL;
newFormat->UpdateUid();
if (TabStops) { REAL *newTabStops = NULL;
newTabStops = new REAL [CountTabStops];
if (newTabStops) { newFormat->TabStops = newTabStops;
GpMemcpy(newFormat->TabStops, TabStops, sizeof(REAL) * CountTabStops); } else { delete newFormat; return NULL; } }
if (Ranges) { CharacterRange *newRanges = NULL;
newRanges = new CharacterRange [RangeCount];
if (newRanges) { newFormat->Ranges = newRanges;
for (INT i = 0; i < RangeCount; i++) { newFormat->Ranges[i] = Ranges[i]; } } else { if (TabStops) { delete [] TabStops; } delete newFormat; newFormat = NULL; } } }
return newFormat; }
GpStatus GpStringFormat::SetMeasurableCharacterRanges( INT rangeCount, const CharacterRange *ranges ) { BOOL updated = FALSE; CharacterRange *newRanges = NULL;
if (ranges && rangeCount > 0) { newRanges = new CharacterRange [rangeCount];
if (!newRanges) { return OutOfMemory; } }
if (Ranges) { // Clear old ranges
delete [] Ranges;
Ranges = NULL; RangeCount = 0; updated = TRUE; }
if (newRanges) { for (INT i = 0; i < rangeCount; i++) { newRanges[i] = ranges[i]; }
Ranges = newRanges; RangeCount = rangeCount; updated = TRUE; }
if (updated) { UpdateUid(); } return Ok; }
|