Code:
                         / 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / IO / Packaging / xmlglyphRunInfo.cs / 1305600 / xmlglyphRunInfo.cs
                        
                        
                            //---------------------------------------------------------------------------- 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//   
//
// Description: 
//              Implements a DOM-based subclass of the FixedPageInfo abstract class. 
//              The class functions as an array of XmlGlyphRunInfo's in markup order.
// 
// History:
//  05/06/2004: JohnLarc: Initial implementation
//  10/31/2005: JohnLarc: Removed GDI-aware implementations. To restore them, run
//              'sd labelsync -l XmlGlyphRunInfo'. 
//---------------------------------------------------------------------------
 
using System; 
using System.Xml;                       // For DOM objects
using System.Diagnostics;               // For Assert 
using System.Globalization;             // For CultureInfo
using System.Windows;                   // For ExceptionStringTable
using Windows = System.Windows;         // For Windows.Point (as distinct from System.Drawing.Point)
using System.Windows.Markup;            // For XmlLanguage 
namespace MS.Internal.IO.Packaging 
{ 
    /// 
    /// DOM-based implementation of the abstract class GlyphRunInfo. 
    ///  
    internal class XmlGlyphRunInfo : MS.Internal.GlyphRunInfo
    {
        //----------------------------------------------------- 
        //
        //  Constructors 
        // 
        //-----------------------------------------------------
 
        #region Constructors
        /// 
        /// Initialize from a DOM object.
        ///   
        internal XmlGlyphRunInfo(XmlNode glyphsNode)
        { 
            _glyphsNode = glyphsNode as XmlElement; 
            // Assert that XmlFixedPageInfo (only caller) has correctly identified glyph runs
            // prior to invoking this constructor. 
            Debug.Assert(_glyphsNode != null
                && String.CompareOrdinal(_glyphsNode.LocalName, _glyphRunName) == 0
                && String.CompareOrdinal(_glyphsNode.NamespaceURI, ElementTableKey.FixedMarkupNamespace) == 0);
        } 
        #endregion Constructors
 
        //------------------------------------------------------ 
        //
        //  Internal Properties 
        //
        //-----------------------------------------------------
        #region Internal Properties 
        /// 
        /// The start point of the segment [StartPosition, EndPosition], 
        /// which runs along the baseline of the glyph run. 
        ///  
        ///  
        /// The point is given in page coordinates.
        /// double.NaN can be returned in either coordinate when the input glyph run is invalid.
        ///  
        internal override Windows.Point StartPosition 
        {
            get 
            { 
                throw new NotSupportedException(SR.Get(SRID.XmlGlyphRunInfoIsNonGraphic));
            } 
        }
        /// 
        /// The end point of the segment [StartPosition, EndPosition], 
        /// which runs along the baseline of the glyph run.
        ///   
        ///  
        /// The point is given in page coordinates.
        /// double.NaN can be returned in either coordinate when the input glyph run is invalid. 
        ///  
        internal override Windows.Point EndPosition
        {
            get 
            {
                throw new NotSupportedException(SR.Get(SRID.XmlGlyphRunInfoIsNonGraphic)); 
            } 
        }
 
        /// 
        /// The font width in ems.
        ///   
        /// 
        /// This is provided for the purpose of evaluating distances along the baseline OR a perpendicular 
        /// to the baseline. 
        /// When a font is displayed sideways, what is given here is still the width of the font.
        /// It is up to the client code to decide whether to use the width or height for measuring 
        /// distances between glyph runs.
        ///
        /// NaN can be returned if the markup is invalid.
        ///   
        internal override double WidthEmFontSize
        { 
            get 
            {
                throw new NotSupportedException(SR.Get(SRID.XmlGlyphRunInfoIsNonGraphic)); 
            }
        }
        ///  
        /// The font height in ems.
        ///   
        ///  
        /// This is provided for the purpose of evaluating distances along the baseline OR a perpendicular
        /// to the baseline. 
        /// When a font is displayed sideways, what is given here is still the height of the font.
        /// It is up to the client code to decide whether to use the width or height for measuring
        /// deviations from the current baseline.
        /// 
        /// NaN can be returned if the markup is invalid.
        ///   
        internal override double HeightEmFontSize 
        {
            get 
            {
                throw new NotSupportedException(SR.Get(SRID.XmlGlyphRunInfoIsNonGraphic));
            }
        } 
        ///  
        /// Whether glyphs are individually rotated 90 degrees (so as to face downwards in vertical text layout). 
        ///  
        ///  
        /// This feature is designed for ideograms and should not make sense for latin characters.
        ///  
        internal override bool GlyphsHaveSidewaysOrientation
        { 
            get
            { 
                throw new NotSupportedException(SR.Get(SRID.XmlGlyphRunInfoIsNonGraphic)); 
            }
        } 
        /// 
        /// 0 for left-to-right and 1 for right-to-left.
        ///   
        /// 
        /// 0 is assumed if the attribute value is absent or unexpected. 
        ///   
        internal override int BidiLevel
        { 
            get
            {
                throw new NotSupportedException(SR.Get(SRID.XmlGlyphRunInfoIsNonGraphic));
            } 
        }
 
        ///  
        /// The glyph run's language id.
        ///   
        /// 
        /// The language ID is typed as unsigned for easier interop marshalling, since the win32 LCID type (as defined in WinNT.h) is a DWORD.
        ///  
        internal override uint LanguageID 
        {
            get 
            { 
                if (_languageID == null)
                { 
                    for (XmlElement currentNode = _glyphsNode;
                         currentNode != null && _languageID == null;
                         currentNode = (currentNode.ParentNode as XmlElement))
                    { 
                        string languageString = currentNode.GetAttribute(_xmlLangAttribute);
                        if (languageString != null && languageString.Length > 0) 
                        { 
                            // We need to handle languageString "und" specially.
                            // we should set language ID to zero. 
                            // That's what the Indexing Search team told us to do.
                            // There's no CultureInfo for "und".
                            // CultureInfo("und") will cause an error.
                            if (string.CompareOrdinal(languageString.ToUpperInvariant(), _undeterminedLanguageStringUpper) == 0) 
                            {
                                _languageID = 0; 
                            } 
                            else
                            { 
                                // Here we use XmlLanguage class to help us get the most
                                // compatible culture from the languageString.
                                //
                                // In the case that languageString and its variants do not match 
                                // any known language string in the table, we will get InvariantCulture
                                // from GetCompatibleCulture(). 
                                // 
                                // In the case that languageString is invalid (e.g. non-ascii string),
                                // the GetLanguage() method will throw an exception and we will give 
                                // up filtering this part.
                                XmlLanguage lang = XmlLanguage.GetLanguage(languageString);
                                CultureInfo cultureInfo = lang.GetCompatibleCulture();
                                _languageID = checked((uint)cultureInfo.LCID); 
                            }
                        } 
                    } 
                    // If we cannot set the language ID in the previous logic, that means the 
                    // language string is missing and we should default the culture to be
                    // InvariantCulture.
                    // Note: XamlFilter.GetCurrentLcid is a private method that also has
                    // similar logic and will default to CultureInfo.InvariantCulture.LCID 
                    // CultureInfo.InvariantCulture will never be null
                    if(_languageID == null) 
                        _languageID = checked((uint)CultureInfo.InvariantCulture.LCID); 
                }
                // Cast Nullable<> into value type. 
                return (uint) _languageID;
            }
        }
 
        /// 
        /// The glyph run's contents as a string of unicode symbols. 
        /// If the unicode attribute is missing in the markup then an empty string is returned. 
        ///  
        internal override string UnicodeString 
        {
            get
            {
                if (_unicodeString == null) 
                {
                    _unicodeString = _glyphsNode.GetAttribute(_unicodeStringAttribute); 
                } 
                return _unicodeString;
            } 
        }
        #endregion Internal Properties
 
        //------------------------------------------------------
        // 
        //  Private Fields 
        //
        //------------------------------------------------------ 
        #region Private Fields
        #region Constants 
        private const string _glyphRunName           = "Glyphs";
        private const string _xmlLangAttribute       = "xml:lang"; 
        private const string _unicodeStringAttribute = "UnicodeString"; 
        // The undetermined language string can be "und" or "UND". We always convert strings 
        // to uppercase for case-insensitive comparison, so we store an uppercase version here.
        private const string _undeterminedLanguageStringUpper = "UND";
        private XmlElement _glyphsNode = null; 
        private string _unicodeString = null;
        private Nullable _languageID = null; 
 
        #endregion Private Fields
    } 
    #endregion NativeMethods
}
// 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
- HostedAspNetEnvironment.cs
 - AuthenticationModuleElementCollection.cs
 - SQLInt64.cs
 - XMLSyntaxException.cs
 - ToolStripGripRenderEventArgs.cs
 - ListContractAdapter.cs
 - BoundingRectTracker.cs
 - CodeAccessPermission.cs
 - TrustManagerMoreInformation.cs
 - SmiTypedGetterSetter.cs
 - FamilyMap.cs
 - FlowDecisionDesigner.xaml.cs
 - ColorTransform.cs
 - ToolboxComponentsCreatingEventArgs.cs
 - KeyedQueue.cs
 - EventHandlerService.cs
 - SourceFileBuildProvider.cs
 - ContainerUIElement3D.cs
 - CachedFontFace.cs
 - SynchronizationContext.cs
 - AtomServiceDocumentSerializer.cs
 - XmlSchemaAttribute.cs
 - ScriptManager.cs
 - SqlNotificationRequest.cs
 - BitmapFrame.cs
 - LinqDataSource.cs
 - FindCriteriaCD1.cs
 - RequestQueryProcessor.cs
 - XmlILAnnotation.cs
 - ReadWriteSpinLock.cs
 - JoinCqlBlock.cs
 - ComIntegrationManifestGenerator.cs
 - HtmlImage.cs
 - FontResourceCache.cs
 - WindowsGraphics.cs
 - documentsequencetextcontainer.cs
 - BaseCodeDomTreeGenerator.cs
 - Int32EqualityComparer.cs
 - TextPatternIdentifiers.cs
 - OleDbInfoMessageEvent.cs
 - SupportingTokenListenerFactory.cs
 - LogSwitch.cs
 - BinaryObjectInfo.cs
 - SourceFileInfo.cs
 - XmlRootAttribute.cs
 - Cursor.cs
 - GridViewDeleteEventArgs.cs
 - HttpCookieCollection.cs
 - TextProperties.cs
 - Image.cs
 - DotNetATv1WindowsLogEntrySerializer.cs
 - SendKeys.cs
 - InternalDispatchObject.cs
 - CustomAssemblyResolver.cs
 - PolyQuadraticBezierSegment.cs
 - SystemFonts.cs
 - RadioButtonStandardAdapter.cs
 - CheckableControlBaseAdapter.cs
 - TextureBrush.cs
 - DataColumnMapping.cs
 - ObjectToModelValueConverter.cs
 - ProtectedConfigurationSection.cs
 - TagElement.cs
 - _LocalDataStore.cs
 - sqlcontext.cs
 - PersonalizationStateInfo.cs
 - CacheRequest.cs
 - AnnotationComponentChooser.cs
 - SimpleHandlerBuildProvider.cs
 - MultilineStringConverter.cs
 - MediaSystem.cs
 - XmlSerializerAssemblyAttribute.cs
 - InvariantComparer.cs
 - CaseInsensitiveHashCodeProvider.cs
 - SafeMILHandle.cs
 - DataGridViewToolTip.cs
 - DataGridColumn.cs
 - LineInfo.cs
 - TextServicesDisplayAttribute.cs
 - DefaultAssemblyResolver.cs
 - SchemaNamespaceManager.cs
 - PenThreadPool.cs
 - SponsorHelper.cs
 - CodeCompileUnit.cs
 - QuotedPrintableStream.cs
 - ClientUrlResolverWrapper.cs
 - DrawingContextWalker.cs
 - TypeNameConverter.cs
 - VariableQuery.cs
 - SortAction.cs
 - SqlRecordBuffer.cs
 - ListViewVirtualItemsSelectionRangeChangedEvent.cs
 - ChtmlTextWriter.cs
 - DrawingImage.cs
 - documentsequencetextcontainer.cs
 - MonthChangedEventArgs.cs
 - SortKey.cs
 - DownloadProgressEventArgs.cs
 - PaintValueEventArgs.cs
 - DynamicPropertyHolder.cs