Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / MS / Internal / Shaping / DigitShape.cs / 1 / DigitShape.cs
//+------------------------------------------------------------------------
//
// Microsoft Windows Client Platform
// Copyright (C) Microsoft Corporation, 2001
//
// File: DigitShape.cs
//
// Contents: DIgits shaping engine
//
// Contact: nbeal
//
// Created: 10-27-2005
//
//-----------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using MS.Internal.FontCache;
using MS.Internal.FontFace;
using MS.Internal.TextFormatting;
using System.Security;
using System.Security.Permissions;
using MS.Internal.PresentationCore;
using System.Windows.Media;
using System.Windows.Media.TextFormatting;
namespace MS.Internal.Shaping
{
///
/// Default implementation of digit shape
///
///
/// All items containing digit come here. The shape of the digit is
/// dictated by the specified language.
///
internal class DigitShape : BaseShape
{
//
// required positioning features
//
protected static readonly Feature[] _digitPositioningFeatures = new Feature[]
{
new Feature(0,ushort.MaxValue,(uint)FeatureTags.Kerning,1)
};
internal DigitShape()
{
}
public override ScriptTags[] SupportedScripts
{
get { return new ScriptTags[]{ Script.TagDigit }; }
}
///
/// DigitShape.GetGlyphs
/// helper for the IShaper method. The function call is used to
/// shape the Latin unicode characters.
///
/// shaping currentRun
/// Text item
/// number of glyphs
///
/// Critical - calls critical code, uses unsafe accessors
///
[SecurityCritical]
unsafe protected override int GetGlyphs ( ref ShapingWorkspace currentRun, Item item )
{
DigitMap digitMap = new DigitMap(item.DigitCulture);
char currChar;
while (currentRun.GetNextChar (out currChar))
{
char digitChar = (char)digitMap[currChar];
currentRun.SetGlyphPropertiesUsingChar( CharShapeInfo.IsStartOfCluster,
digitChar);
// If no glyph, perhaps we have a second choice.
if (currentRun.CurrentGlyph == 0)
{
digitChar = (char)DigitMap.GetFallbackCharacter(digitChar);
if (digitChar != 0)
{
currentRun.CurrentGlyph = currentRun.CharConverter.ToGlyph(digitChar);
}
}
}
return currentRun.GlyphsCount;
}
///
/// DigitShape.InitializeFontClient -IShaper methods helper.
///
///
/// This function is called from GetGlyphs and GetGlyphPlacements
/// (IShaper methods) to do the necessary shaper initialization
///
///
/// Critical - this method calls critical methods.
/// Safe - this method doesn't expose anything unsafe to the world.
///
[SecurityCritical, SecurityTreatAsSafe]
protected override ShaperFontClient InitializeFontClient ( Item item,
CultureInfo culture,
GlyphTypeface fontFace,
OpenTypeTags featureType,
object shapeFontInfo )
{
Item digitItem = item;
ShaperFontClient fontClient = shapeFontInfo as ShaperFontClient;
if ( fontClient != null )
{
ScriptTags scriptTag = ScriptTags.Latin; // use Latin script for digits
if (OpenTypeLayout.FindScript(fontClient,(uint)scriptTag) != TagInfoFlags.None)
{
fontClient.IsScriptSupportedByFont = true;
digitItem = new Item(ScriptID.Latin, item.Flags);
digitItem.DigitCulture = item.DigitCulture;
}
}
return base.InitializeFontClient ( digitItem,
culture,
fontFace,
featureType,
fontClient );
}
///
/// DigitShape.OnLoadFont - IShapingEngine method override.
///
///
/// We override the base implementation because this shaper
/// has work to do regardless of the script.
///
/// Script of interest.
/// Font face being loaded
/// always returns null
/// True if font supports script.
///
/// Critical - This method reads into raw font table bits.
/// Safe - This method doesn't expose any critical data.
///
[SecurityCritical, SecurityTreatAsSafe]
public override bool OnLoadFont(
ScriptTags scriptTag,
GlyphTypeface fontFace,
out object shapeState
)
{
// create the font client for this font/script
ShaperFontClient fontClient = new ShaperFontClient( fontFace );
// Now check if script support does exist in font
if (OpenTypeLayout.FindScript(fontClient,(uint)scriptTag) != TagInfoFlags.None)
{
fontClient.IsScriptSupportedByFont = true;
}
shapeState = fontClient;
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//+------------------------------------------------------------------------
//
// Microsoft Windows Client Platform
// Copyright (C) Microsoft Corporation, 2001
//
// File: DigitShape.cs
//
// Contents: DIgits shaping engine
//
// Contact: nbeal
//
// Created: 10-27-2005
//
//-----------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using MS.Internal.FontCache;
using MS.Internal.FontFace;
using MS.Internal.TextFormatting;
using System.Security;
using System.Security.Permissions;
using MS.Internal.PresentationCore;
using System.Windows.Media;
using System.Windows.Media.TextFormatting;
namespace MS.Internal.Shaping
{
///
/// Default implementation of digit shape
///
///
/// All items containing digit come here. The shape of the digit is
/// dictated by the specified language.
///
internal class DigitShape : BaseShape
{
//
// required positioning features
//
protected static readonly Feature[] _digitPositioningFeatures = new Feature[]
{
new Feature(0,ushort.MaxValue,(uint)FeatureTags.Kerning,1)
};
internal DigitShape()
{
}
public override ScriptTags[] SupportedScripts
{
get { return new ScriptTags[]{ Script.TagDigit }; }
}
///
/// DigitShape.GetGlyphs
/// helper for the IShaper method. The function call is used to
/// shape the Latin unicode characters.
///
/// shaping currentRun
/// Text item
/// number of glyphs
///
/// Critical - calls critical code, uses unsafe accessors
///
[SecurityCritical]
unsafe protected override int GetGlyphs ( ref ShapingWorkspace currentRun, Item item )
{
DigitMap digitMap = new DigitMap(item.DigitCulture);
char currChar;
while (currentRun.GetNextChar (out currChar))
{
char digitChar = (char)digitMap[currChar];
currentRun.SetGlyphPropertiesUsingChar( CharShapeInfo.IsStartOfCluster,
digitChar);
// If no glyph, perhaps we have a second choice.
if (currentRun.CurrentGlyph == 0)
{
digitChar = (char)DigitMap.GetFallbackCharacter(digitChar);
if (digitChar != 0)
{
currentRun.CurrentGlyph = currentRun.CharConverter.ToGlyph(digitChar);
}
}
}
return currentRun.GlyphsCount;
}
///
/// DigitShape.InitializeFontClient -IShaper methods helper.
///
///
/// This function is called from GetGlyphs and GetGlyphPlacements
/// (IShaper methods) to do the necessary shaper initialization
///
///
/// Critical - this method calls critical methods.
/// Safe - this method doesn't expose anything unsafe to the world.
///
[SecurityCritical, SecurityTreatAsSafe]
protected override ShaperFontClient InitializeFontClient ( Item item,
CultureInfo culture,
GlyphTypeface fontFace,
OpenTypeTags featureType,
object shapeFontInfo )
{
Item digitItem = item;
ShaperFontClient fontClient = shapeFontInfo as ShaperFontClient;
if ( fontClient != null )
{
ScriptTags scriptTag = ScriptTags.Latin; // use Latin script for digits
if (OpenTypeLayout.FindScript(fontClient,(uint)scriptTag) != TagInfoFlags.None)
{
fontClient.IsScriptSupportedByFont = true;
digitItem = new Item(ScriptID.Latin, item.Flags);
digitItem.DigitCulture = item.DigitCulture;
}
}
return base.InitializeFontClient ( digitItem,
culture,
fontFace,
featureType,
fontClient );
}
///
/// DigitShape.OnLoadFont - IShapingEngine method override.
///
///
/// We override the base implementation because this shaper
/// has work to do regardless of the script.
///
/// Script of interest.
/// Font face being loaded
/// always returns null
/// True if font supports script.
///
/// Critical - This method reads into raw font table bits.
/// Safe - This method doesn't expose any critical data.
///
[SecurityCritical, SecurityTreatAsSafe]
public override bool OnLoadFont(
ScriptTags scriptTag,
GlyphTypeface fontFace,
out object shapeState
)
{
// create the font client for this font/script
ShaperFontClient fontClient = new ShaperFontClient( fontFace );
// Now check if script support does exist in font
if (OpenTypeLayout.FindScript(fontClient,(uint)scriptTag) != TagInfoFlags.None)
{
fontClient.IsScriptSupportedByFont = true;
}
shapeState = fontClient;
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SmtpClient.cs
- StorageComplexPropertyMapping.cs
- FontFaceLayoutInfo.cs
- Overlapped.cs
- dbdatarecord.cs
- Point4D.cs
- Utils.cs
- SafeNativeMethods.cs
- XmlSchemaCollection.cs
- CdpEqualityComparer.cs
- AttributeUsageAttribute.cs
- SqlClientPermission.cs
- infer.cs
- NotFiniteNumberException.cs
- OdbcPermission.cs
- DatePickerDateValidationErrorEventArgs.cs
- LineGeometry.cs
- UnsafeNativeMethodsTablet.cs
- IdentityNotMappedException.cs
- Operators.cs
- FontNamesConverter.cs
- Invariant.cs
- SourceSwitch.cs
- ProcessModelInfo.cs
- GridItemCollection.cs
- RenderCapability.cs
- SRGSCompiler.cs
- SecurityToken.cs
- RadioButtonRenderer.cs
- StringBuilder.cs
- SocketPermission.cs
- SingleAnimation.cs
- UpWmlMobileTextWriter.cs
- SelectingProviderEventArgs.cs
- XPathNode.cs
- OpenTypeLayout.cs
- MetadataPropertyvalue.cs
- TextRangeProviderWrapper.cs
- NetCodeGroup.cs
- SqlInternalConnectionSmi.cs
- EntityDesignerBuildProvider.cs
- CodeEventReferenceExpression.cs
- CookielessHelper.cs
- HttpFileCollection.cs
- ConsumerConnectionPointCollection.cs
- ControlParameter.cs
- RoleManagerModule.cs
- BitmapFrameDecode.cs
- ItemCollection.cs
- ColumnHeaderConverter.cs
- SafeIUnknown.cs
- SqlDataSourceCache.cs
- ComProxy.cs
- RightsManagementPermission.cs
- Button.cs
- AttachedPropertiesService.cs
- ScrollChrome.cs
- FixedDocumentPaginator.cs
- ToolStripSeparatorRenderEventArgs.cs
- DataQuery.cs
- WebPartAuthorizationEventArgs.cs
- SqlDataSourceConnectionPanel.cs
- TagPrefixCollection.cs
- XmlTypeMapping.cs
- ContainsRowNumberChecker.cs
- CallContext.cs
- RadioButtonBaseAdapter.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- WebBrowsableAttribute.cs
- WindowsListViewItem.cs
- ProcessHostServerConfig.cs
- ConnectionDemuxer.cs
- Attributes.cs
- DropShadowBitmapEffect.cs
- LowerCaseStringConverter.cs
- SQLDateTimeStorage.cs
- DictionarySurrogate.cs
- PkcsMisc.cs
- ObjectStateFormatter.cs
- NativeMethods.cs
- ProtocolsConfiguration.cs
- Nullable.cs
- FixedPosition.cs
- MemoryStream.cs
- HelloOperation11AsyncResult.cs
- XmlCDATASection.cs
- MappingSource.cs
- IProvider.cs
- CompressionTransform.cs
- NavigationProperty.cs
- DataGridViewImageColumn.cs
- OperationBehaviorAttribute.cs
- XmlCDATASection.cs
- SQLGuid.cs
- StyleModeStack.cs
- ReaderWriterLockWrapper.cs
- SmiRecordBuffer.cs
- Message.cs
- EncodingFallbackAwareXmlTextWriter.cs
- KeyedCollection.cs