Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- DataGridViewCellMouseEventArgs.cs
- StickyNote.cs
- ViewManager.cs
- WorkflowView.cs
- TextTreeInsertUndoUnit.cs
- MsmqQueue.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- MouseActionConverter.cs
- CollectionCodeDomSerializer.cs
- CanonicalXml.cs
- RemotingAttributes.cs
- ViewStateModeByIdAttribute.cs
- Thumb.cs
- SystemUnicastIPAddressInformation.cs
- IMembershipProvider.cs
- BufferedStream.cs
- SystemInformation.cs
- IndexedString.cs
- DataBindingValueUIHandler.cs
- MsmqTransportReceiveParameters.cs
- RepeatBehavior.cs
- WebPartZoneCollection.cs
- BinaryObjectWriter.cs
- FocusTracker.cs
- FileDialog.cs
- ImageButton.cs
- TypedReference.cs
- CodeTypeParameter.cs
- ProgressBarAutomationPeer.cs
- MenuItemStyleCollection.cs
- TreeViewDataItemAutomationPeer.cs
- ValidationSummary.cs
- DataException.cs
- webbrowsersite.cs
- EntityDataSourceContextCreatingEventArgs.cs
- COM2Enum.cs
- MemoryFailPoint.cs
- DataRowIndexBuffer.cs
- DisableDpiAwarenessAttribute.cs
- StylusDownEventArgs.cs
- WebEvents.cs
- TemplatePagerField.cs
- ServiceHttpHandlerFactory.cs
- Assembly.cs
- GridViewCommandEventArgs.cs
- BinaryWriter.cs
- HostedElements.cs
- XPathScanner.cs
- DataGridViewColumnCollection.cs
- CodeCatchClause.cs
- HitTestWithGeometryDrawingContextWalker.cs
- SqlCacheDependencySection.cs
- AutoGeneratedField.cs
- TextElementAutomationPeer.cs
- StylusPointPropertyUnit.cs
- RadioButton.cs
- ColorInterpolationModeValidation.cs
- TemplateControl.cs
- ObjectConverter.cs
- TargetConverter.cs
- GeneratedCodeAttribute.cs
- XmlDocumentSchema.cs
- QilIterator.cs
- CodeCommentStatement.cs
- DateTimeFormatInfo.cs
- ICollection.cs
- HtmlControlDesigner.cs
- ITextView.cs
- WebContext.cs
- PointLightBase.cs
- SqlConnectionString.cs
- DataFormats.cs
- StringAnimationBase.cs
- DataServiceClientException.cs
- OrCondition.cs
- HijriCalendar.cs
- ActiveDesignSurfaceEvent.cs
- ToolStripScrollButton.cs
- IgnoreSection.cs
- Page.cs
- WindowsScroll.cs
- FormParameter.cs
- PagerSettings.cs
- ConditionalWeakTable.cs
- Model3DGroup.cs
- XsltContext.cs
- ListViewCommandEventArgs.cs
- Matrix3D.cs
- ClientApiGenerator.cs
- SelectionProcessor.cs
- RawStylusInputCustomDataList.cs
- MessageEncodingBindingElementImporter.cs
- EventLogHandle.cs
- SecUtil.cs
- DbDataAdapter.cs
- TextDecorationCollectionConverter.cs
- WriteTimeStream.cs
- AnimationTimeline.cs
- EmptyEnumerator.cs
- RuntimeHandles.cs