Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / MS / Internal / TextFormatting / CultureMapper.cs / 2 / CultureMapper.cs
//------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: The CultureMapper class implements static methods for mapping // CultureInfo objects from WPF clients to CultureInfo objects // that can be used internally by text formatting code. // // History: // 1-30-2006 : niklasb - Created // //----------------------------------------------------------------------- using System; using System.Globalization; using System.Diagnostics; using MS.Internal.PresentationCore; namespace MS.Internal.TextFormatting { ////// Implements static methods for mapping CultureInfo objects. /// internal static class CultureMapper { ////// Returns a specific culture given an arbitrary CultureInfo, which may be null, the invariant /// culture, or a neutral culture. /// public static CultureInfo GetSpecificCulture(CultureInfo runCulture) { // Assume default culture unless we can do better. CultureInfo specificCulture = DefaultTextCulture; if (runCulture != null) { // Assign _cachedCultureMap to a local variable for thread safety. The reference assignment // is atomic and the CachedCultureMap class is immutable. CachedCultureMap cachedCultureMap = _cachedCultureMap; if (cachedCultureMap != null && object.ReferenceEquals(cachedCultureMap.OriginalCulture, runCulture)) return cachedCultureMap.SpecificCulture; // Unfortunately we cannot use reference comparison here because, for example, new CultureInfo("") // creates an invariant culture which (being a new object) is obviously not the same instance as // CultureInfo.InvariantCulture. if (runCulture != CultureInfo.InvariantCulture) { if (!runCulture.IsNeutralCulture) { // It's already a specific culture (neither neutral nor InvariantCulture) specificCulture = runCulture; } else { // Get the culture name. Note that the string expected by CreateSpecificCulture corresponds // to the Name property, not IetfLanguageTag, so that's what we use. string cultureName = runCulture.Name; if (!string.IsNullOrEmpty(cultureName)) { try { CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName); specificCulture = SafeSecurityHelper.GetCultureInfoByIetfLanguageTag(culture.IetfLanguageTag); } catch (ArgumentException) { // This exception occurs if the culture name is invalid or has no corresponding specific // culture. we can safely ignore the exception and fall back to DefaultTextCulture. specificCulture = DefaultTextCulture; } } } } // Save the mapping so the next call will be fast if we're given the same runCulture. // Again, the reference assignment is atomic so this is thread safe. _cachedCultureMap = new CachedCultureMap(runCulture, specificCulture); } return specificCulture; } private class CachedCultureMap { public CachedCultureMap(CultureInfo originalCulture, CultureInfo specificCulture) { _originalCulture = originalCulture; _specificCulture = specificCulture; } ////// Original CultureInfo object from text formatting client; could be the invariant culture, /// a neutral culture, or a specific culture. /// public CultureInfo OriginalCulture { get { return _originalCulture; } } ////// CultureInfo object to use for text formatting. This is guaranteed to be a specific (i.e., /// neither neutral nor invariant) culture. It may be the same object as OriginalCulture if /// the latter is already a specific culture. /// public CultureInfo SpecificCulture { get { return _specificCulture; } } private CultureInfo _originalCulture; private CultureInfo _specificCulture; } private static readonly CultureInfo DefaultTextCulture = System.Windows.Markup.TypeConverterHelper.EnglishUSCulture; private static CachedCultureMap _cachedCultureMap = null; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: The CultureMapper class implements static methods for mapping // CultureInfo objects from WPF clients to CultureInfo objects // that can be used internally by text formatting code. // // History: // 1-30-2006 : niklasb - Created // //----------------------------------------------------------------------- using System; using System.Globalization; using System.Diagnostics; using MS.Internal.PresentationCore; namespace MS.Internal.TextFormatting { ////// Implements static methods for mapping CultureInfo objects. /// internal static class CultureMapper { ////// Returns a specific culture given an arbitrary CultureInfo, which may be null, the invariant /// culture, or a neutral culture. /// public static CultureInfo GetSpecificCulture(CultureInfo runCulture) { // Assume default culture unless we can do better. CultureInfo specificCulture = DefaultTextCulture; if (runCulture != null) { // Assign _cachedCultureMap to a local variable for thread safety. The reference assignment // is atomic and the CachedCultureMap class is immutable. CachedCultureMap cachedCultureMap = _cachedCultureMap; if (cachedCultureMap != null && object.ReferenceEquals(cachedCultureMap.OriginalCulture, runCulture)) return cachedCultureMap.SpecificCulture; // Unfortunately we cannot use reference comparison here because, for example, new CultureInfo("") // creates an invariant culture which (being a new object) is obviously not the same instance as // CultureInfo.InvariantCulture. if (runCulture != CultureInfo.InvariantCulture) { if (!runCulture.IsNeutralCulture) { // It's already a specific culture (neither neutral nor InvariantCulture) specificCulture = runCulture; } else { // Get the culture name. Note that the string expected by CreateSpecificCulture corresponds // to the Name property, not IetfLanguageTag, so that's what we use. string cultureName = runCulture.Name; if (!string.IsNullOrEmpty(cultureName)) { try { CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName); specificCulture = SafeSecurityHelper.GetCultureInfoByIetfLanguageTag(culture.IetfLanguageTag); } catch (ArgumentException) { // This exception occurs if the culture name is invalid or has no corresponding specific // culture. we can safely ignore the exception and fall back to DefaultTextCulture. specificCulture = DefaultTextCulture; } } } } // Save the mapping so the next call will be fast if we're given the same runCulture. // Again, the reference assignment is atomic so this is thread safe. _cachedCultureMap = new CachedCultureMap(runCulture, specificCulture); } return specificCulture; } private class CachedCultureMap { public CachedCultureMap(CultureInfo originalCulture, CultureInfo specificCulture) { _originalCulture = originalCulture; _specificCulture = specificCulture; } ////// Original CultureInfo object from text formatting client; could be the invariant culture, /// a neutral culture, or a specific culture. /// public CultureInfo OriginalCulture { get { return _originalCulture; } } ////// CultureInfo object to use for text formatting. This is guaranteed to be a specific (i.e., /// neither neutral nor invariant) culture. It may be the same object as OriginalCulture if /// the latter is already a specific culture. /// public CultureInfo SpecificCulture { get { return _specificCulture; } } private CultureInfo _originalCulture; private CultureInfo _specificCulture; } private static readonly CultureInfo DefaultTextCulture = System.Windows.Markup.TypeConverterHelper.EnglishUSCulture; private static CachedCultureMap _cachedCultureMap = null; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Thickness.cs
- DataGridViewImageColumn.cs
- PolicyLevel.cs
- X509Extension.cs
- EncoderBestFitFallback.cs
- Odbc32.cs
- ListViewInsertedEventArgs.cs
- ValidatorUtils.cs
- PartialArray.cs
- EventLogStatus.cs
- AutoResetEvent.cs
- CatalogZone.cs
- TrustLevel.cs
- EncoderExceptionFallback.cs
- MobileListItem.cs
- NavigationProperty.cs
- HttpListenerResponse.cs
- SizeChangedEventArgs.cs
- RawMouseInputReport.cs
- WorkflowInstanceProxy.cs
- XmlSerializerNamespaces.cs
- relpropertyhelper.cs
- FastEncoderWindow.cs
- MediaTimeline.cs
- AffineTransform3D.cs
- DataObjectPastingEventArgs.cs
- EntityTypeEmitter.cs
- CellParaClient.cs
- XNameTypeConverter.cs
- CoreSwitches.cs
- WorkflowWebHostingModule.cs
- TemplatedMailWebEventProvider.cs
- followingsibling.cs
- DataSetMappper.cs
- LogEntrySerializer.cs
- MetadataItemCollectionFactory.cs
- MessageLogger.cs
- XmlSchemaChoice.cs
- LeftCellWrapper.cs
- xml.cs
- TableLayoutSettings.cs
- _Rfc2616CacheValidators.cs
- RtfToXamlReader.cs
- FormCollection.cs
- WebHttpDispatchOperationSelectorData.cs
- PrintingPermission.cs
- mactripleDES.cs
- SqlTypeConverter.cs
- Parameter.cs
- ServiceErrorHandler.cs
- DataGridViewCellFormattingEventArgs.cs
- ZipIOCentralDirectoryFileHeader.cs
- URL.cs
- AssemblyHash.cs
- XmlNodeList.cs
- TreeViewBindingsEditor.cs
- CryptoHandle.cs
- RegionIterator.cs
- ConfigurationValues.cs
- TrackingValidationObjectDictionary.cs
- AvtEvent.cs
- SqlDataReader.cs
- MultiPageTextView.cs
- SecurityDescriptor.cs
- SecurityHeader.cs
- OutputCacheProfileCollection.cs
- TextServicesHost.cs
- UserControl.cs
- UriSchemeKeyedCollection.cs
- XmlBoundElement.cs
- PaperSource.cs
- OneOfTypeConst.cs
- EntityFrameworkVersions.cs
- CacheOutputQuery.cs
- ToolboxItemFilterAttribute.cs
- SlipBehavior.cs
- OracleConnection.cs
- ProgressChangedEventArgs.cs
- TextBoxBase.cs
- _ScatterGatherBuffers.cs
- TableLayoutStyle.cs
- MenuItemCollection.cs
- XmlSchemaNotation.cs
- BaseValidator.cs
- ColumnResizeUndoUnit.cs
- OracleDateTime.cs
- ListView.cs
- LayoutInformation.cs
- NativeWindow.cs
- CssClassPropertyAttribute.cs
- MappingItemCollection.cs
- ToolStripManager.cs
- Codec.cs
- PropertyFilterAttribute.cs
- ServiceTimeoutsElement.cs
- FormatConvertedBitmap.cs
- SetStateDesigner.cs
- VirtualizingPanel.cs
- ReaderWriterLock.cs
- Expr.cs