Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / BuildTasks / MS / Internal / Localization / LocalizationParserHooks.cs / 1 / LocalizationParserHooks.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: LocalizationParserHooks. // // History: // 06/16/2005 garyyang - created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.IO; using System.Xml; using System.Text; using MS.Internal.Globalization; using MS.Internal.Markup; using MS.Internal.Tasks; namespace MS.Internal { internal sealed class LocalizationParserHooks : ParserHooks { private MarkupCompiler _compiler; private ArrayList _commentList; private LocalizationComment _currentComment; private LocalizationDirectivesToLocFile _directivesToFile; private bool _isSecondPass; internal LocalizationParserHooks( MarkupCompiler compiler , LocalizationDirectivesToLocFile directivesToFile, bool isSecondPass ) { _compiler = compiler; _directivesToFile = directivesToFile; _isSecondPass = isSecondPass; // The arrray list holds all the comments collected while parsing Xaml. _commentList = new ArrayList(); // It is the comments current being processed. _currentComment = new LocalizationComment(); } internal override ParserAction LoadNode(XamlNode tokenNode) { switch (tokenNode.TokenType) { case XamlNodeType.DocumentStart : { // A single ParserHooks might be used to parse multiple bamls. // We need to clear the comments list at the begining of each baml. _commentList.Clear(); _currentComment = new LocalizationComment(); return ParserAction.Normal; } case XamlNodeType.DefAttribute : { XamlDefAttributeNode node = (XamlDefAttributeNode) tokenNode; if (node.Name == XamlReaderHelper.DefinitionUid) { _currentComment.Uid = node.Value; } return ParserAction.Normal; } case XamlNodeType.Property : { XamlPropertyNode node = (XamlPropertyNode) tokenNode; // When this parer hook is invoked, comments is always output to a seperate file. if (LocComments.IsLocCommentsProperty(node.TypeFullName, node.PropName)) { // try parse the value. Exception will be thrown if not valid. LocComments.ParsePropertyComments(node.Value); _currentComment.Comments = node.Value; return ParserAction.Skip; // skips outputing this node to baml } if ( _directivesToFile == LocalizationDirectivesToLocFile.All && LocComments.IsLocLocalizabilityProperty(node.TypeFullName, node.PropName)) { // try parse the value. Exception will be thrown if not valid. LocComments.ParsePropertyLocalizabilityAttributes(node.Value); _currentComment.Attributes = node.Value; return ParserAction.Skip; // skips outputing this node to baml } return ParserAction.Normal; } case XamlNodeType.EndAttributes : { FlushCommentToList(ref _currentComment); return ParserAction.Normal; } case XamlNodeType.DocumentEnd : { // // When reaching document end, we output all the comments we have collected // so far into a localization comment file. If the parsing was aborted in // MarkupCompilePass1, we would not out the incomplete set of comments because // it will not reach document end. // if (_commentList.Count > 0) { string absoluteOutputPath = _compiler.TargetPath + _compiler.SourceFileInfo.RelativeSourceFilePath + SharedStrings.LocExtension; MemoryStream memStream = new MemoryStream(); // TaskFileService.WriteFile adds BOM for UTF8 Encoding, thus don't add here // when creating XmlTextWriter. using (XmlTextWriter writer = new XmlTextWriter(memStream, new UTF8Encoding(false))) { // output XML for each piece of comment writer.Formatting = Formatting.Indented; writer.WriteStartElement(LocComments.LocResourcesElement); writer.WriteAttributeString(LocComments.LocFileNameAttribute, _compiler.SourceFileInfo.RelativeSourceFilePath); foreach (LocalizationComment comment in _commentList) { writer.WriteStartElement(LocComments.LocCommentsElement); writer.WriteAttributeString(LocComments.LocCommentIDAttribute, comment.Uid); if (comment.Attributes != null) { writer.WriteAttributeString(LocComments.LocLocalizabilityAttribute, comment.Attributes); } if (comment.Comments != null) { writer.WriteAttributeString(LocComments.LocCommentsAttribute, comment.Comments); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.Flush(); _compiler.TaskFileService.WriteFile(memStream.ToArray(), absoluteOutputPath); } } return ParserAction.Normal; } default: { return ParserAction.Normal; } } } ////// Add the existing comment into the cached list and clear the state for the /// next incoming comment. Comments are only collected in pass1. The method is no-op /// in pass2. /// private void FlushCommentToList(ref LocalizationComment comment) { if (_isSecondPass) return; if ( _currentComment.Uid != null && ( _currentComment.Attributes != null || _currentComment.Comments != null ) ) { // add the comments into the list and reset _commentList.Add(_currentComment); _currentComment = new LocalizationComment(); } else { // clear all properties _currentComment.Uid = _currentComment.Attributes = _currentComment.Comments = null; } } private class LocalizationComment { internal string Uid; internal string Comments; internal string Attributes; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: LocalizationParserHooks. // // History: // 06/16/2005 garyyang - created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.IO; using System.Xml; using System.Text; using MS.Internal.Globalization; using MS.Internal.Markup; using MS.Internal.Tasks; namespace MS.Internal { internal sealed class LocalizationParserHooks : ParserHooks { private MarkupCompiler _compiler; private ArrayList _commentList; private LocalizationComment _currentComment; private LocalizationDirectivesToLocFile _directivesToFile; private bool _isSecondPass; internal LocalizationParserHooks( MarkupCompiler compiler , LocalizationDirectivesToLocFile directivesToFile, bool isSecondPass ) { _compiler = compiler; _directivesToFile = directivesToFile; _isSecondPass = isSecondPass; // The arrray list holds all the comments collected while parsing Xaml. _commentList = new ArrayList(); // It is the comments current being processed. _currentComment = new LocalizationComment(); } internal override ParserAction LoadNode(XamlNode tokenNode) { switch (tokenNode.TokenType) { case XamlNodeType.DocumentStart : { // A single ParserHooks might be used to parse multiple bamls. // We need to clear the comments list at the begining of each baml. _commentList.Clear(); _currentComment = new LocalizationComment(); return ParserAction.Normal; } case XamlNodeType.DefAttribute : { XamlDefAttributeNode node = (XamlDefAttributeNode) tokenNode; if (node.Name == XamlReaderHelper.DefinitionUid) { _currentComment.Uid = node.Value; } return ParserAction.Normal; } case XamlNodeType.Property : { XamlPropertyNode node = (XamlPropertyNode) tokenNode; // When this parer hook is invoked, comments is always output to a seperate file. if (LocComments.IsLocCommentsProperty(node.TypeFullName, node.PropName)) { // try parse the value. Exception will be thrown if not valid. LocComments.ParsePropertyComments(node.Value); _currentComment.Comments = node.Value; return ParserAction.Skip; // skips outputing this node to baml } if ( _directivesToFile == LocalizationDirectivesToLocFile.All && LocComments.IsLocLocalizabilityProperty(node.TypeFullName, node.PropName)) { // try parse the value. Exception will be thrown if not valid. LocComments.ParsePropertyLocalizabilityAttributes(node.Value); _currentComment.Attributes = node.Value; return ParserAction.Skip; // skips outputing this node to baml } return ParserAction.Normal; } case XamlNodeType.EndAttributes : { FlushCommentToList(ref _currentComment); return ParserAction.Normal; } case XamlNodeType.DocumentEnd : { // // When reaching document end, we output all the comments we have collected // so far into a localization comment file. If the parsing was aborted in // MarkupCompilePass1, we would not out the incomplete set of comments because // it will not reach document end. // if (_commentList.Count > 0) { string absoluteOutputPath = _compiler.TargetPath + _compiler.SourceFileInfo.RelativeSourceFilePath + SharedStrings.LocExtension; MemoryStream memStream = new MemoryStream(); // TaskFileService.WriteFile adds BOM for UTF8 Encoding, thus don't add here // when creating XmlTextWriter. using (XmlTextWriter writer = new XmlTextWriter(memStream, new UTF8Encoding(false))) { // output XML for each piece of comment writer.Formatting = Formatting.Indented; writer.WriteStartElement(LocComments.LocResourcesElement); writer.WriteAttributeString(LocComments.LocFileNameAttribute, _compiler.SourceFileInfo.RelativeSourceFilePath); foreach (LocalizationComment comment in _commentList) { writer.WriteStartElement(LocComments.LocCommentsElement); writer.WriteAttributeString(LocComments.LocCommentIDAttribute, comment.Uid); if (comment.Attributes != null) { writer.WriteAttributeString(LocComments.LocLocalizabilityAttribute, comment.Attributes); } if (comment.Comments != null) { writer.WriteAttributeString(LocComments.LocCommentsAttribute, comment.Comments); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.Flush(); _compiler.TaskFileService.WriteFile(memStream.ToArray(), absoluteOutputPath); } } return ParserAction.Normal; } default: { return ParserAction.Normal; } } } ////// Add the existing comment into the cached list and clear the state for the /// next incoming comment. Comments are only collected in pass1. The method is no-op /// in pass2. /// private void FlushCommentToList(ref LocalizationComment comment) { if (_isSecondPass) return; if ( _currentComment.Uid != null && ( _currentComment.Attributes != null || _currentComment.Comments != null ) ) { // add the comments into the list and reset _commentList.Add(_currentComment); _currentComment = new LocalizationComment(); } else { // clear all properties _currentComment.Uid = _currentComment.Attributes = _currentComment.Comments = null; } } private class LocalizationComment { internal string Uid; internal string Comments; internal string Attributes; } } } // 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
- UInt16.cs
- InputQueueChannelAcceptor.cs
- XpsSerializerWriter.cs
- InstanceKeyNotReadyException.cs
- dsa.cs
- RemotingSurrogateSelector.cs
- VoiceInfo.cs
- FileLogRecordStream.cs
- CompleteWizardStep.cs
- DataConnectionHelper.cs
- MetabaseSettingsIis7.cs
- TemplateApplicationHelper.cs
- InheritanceContextChangedEventManager.cs
- ExpressionParser.cs
- MDIControlStrip.cs
- DataRowCollection.cs
- RegexNode.cs
- WindowsGraphics2.cs
- StrongNameKeyPair.cs
- XmlSchemaAny.cs
- PersistenceTypeAttribute.cs
- GCHandleCookieTable.cs
- WebZone.cs
- PickBranchDesigner.xaml.cs
- OptimisticConcurrencyException.cs
- StateWorkerRequest.cs
- CardSpaceSelector.cs
- MaskInputRejectedEventArgs.cs
- MessageQueueInstaller.cs
- ObjectDataSourceChooseTypePanel.cs
- QilLiteral.cs
- RowUpdatingEventArgs.cs
- RuntimeConfigLKG.cs
- HashSetEqualityComparer.cs
- HtmlButton.cs
- GlyphRunDrawing.cs
- TreeNodeStyleCollectionEditor.cs
- Int32AnimationUsingKeyFrames.cs
- SqlInfoMessageEvent.cs
- EntityTypeEmitter.cs
- ConstraintManager.cs
- ContainerVisual.cs
- PartManifestEntry.cs
- BindingGroup.cs
- Pointer.cs
- documentsequencetextcontainer.cs
- ProfileGroupSettings.cs
- TablePattern.cs
- ServerValidateEventArgs.cs
- WmpBitmapDecoder.cs
- PositiveTimeSpanValidator.cs
- SqlDataSource.cs
- ConfigurationSectionGroupCollection.cs
- SafeBitVector32.cs
- MetadataArtifactLoaderResource.cs
- PropertyCondition.cs
- EFColumnProvider.cs
- XNodeSchemaApplier.cs
- Parameter.cs
- FullTrustAssembly.cs
- SerialReceived.cs
- ServiceModelStringsVersion1.cs
- DesignerValidatorAdapter.cs
- ModelToObjectValueConverter.cs
- AssemblyBuilderData.cs
- SpeechSynthesizer.cs
- AsyncResult.cs
- SelectManyQueryOperator.cs
- InstanceCollisionException.cs
- BigInt.cs
- StylusPointPropertyUnit.cs
- GB18030Encoding.cs
- KeyToListMap.cs
- DesignerToolStripControlHost.cs
- ControlBindingsCollection.cs
- VisualBrush.cs
- NestedContainer.cs
- BulletChrome.cs
- ObjectView.cs
- InvalidOleVariantTypeException.cs
- DataGridViewColumnTypeEditor.cs
- WebPart.cs
- ReadContentAsBinaryHelper.cs
- InternalConfigEventArgs.cs
- FormsAuthenticationTicket.cs
- DurationConverter.cs
- TemplatedMailWebEventProvider.cs
- Transform3DGroup.cs
- ProcessHostMapPath.cs
- ModelVisual3D.cs
- SHA1.cs
- DbInsertCommandTree.cs
- TcpTransportManager.cs
- ContextProperty.cs
- ToolTipAutomationPeer.cs
- Timer.cs
- TextEditorLists.cs
- MdiWindowListStrip.cs
- ImageIndexConverter.cs
- SelectedGridItemChangedEvent.cs