private string FindFontFromProject(string fontNameToken, string modifierToken) { ObservableCollection <IProjectFont> projectFonts = this.SceneViewModel.ProjectContext.ProjectFonts; IFontResolver fontResolver = this.SceneViewModel.ProjectContext.FontResolver; IEnumerable <IProjectFont> source = Enumerable.Where <IProjectFont>((IEnumerable <IProjectFont>)projectFonts, (Func <IProjectFont, bool>)(fontFamily => { if (!ImportManager.TokenizeFontName(fontResolver.ConvertToGdiFontName(fontFamily.FontFamilyName)).StartsWith(fontNameToken, StringComparison.OrdinalIgnoreCase)) { return(ImportManager.TokenizeFontName(fontResolver.ConvertToWpfFontName(fontFamily.FontFamilyName)).StartsWith(fontNameToken, StringComparison.OrdinalIgnoreCase)); } return(true); })); string fontMatching = modifierToken == null ? fontNameToken : fontNameToken + modifierToken; IProjectFont projectFont1 = (IProjectFont)null; foreach (IProjectFont projectFont2 in source) { string strA1 = ImportManager.TokenizeFontName(fontResolver.ConvertToGdiFontName(projectFont2.FontFamilyName)); string strA2 = ImportManager.TokenizeFontName(fontResolver.ConvertToWpfFontName(projectFont2.FontFamilyName)); if (string.Compare(strA1, fontMatching, StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(strA2, fontMatching, StringComparison.OrdinalIgnoreCase) == 0) { return(FontEmbedder.MakeProjectFontReference(projectFont2, this.SceneViewModel.Document.DocumentContext).Source); } if (projectFont1 == null || projectFont1.FontFamilyName.Length > projectFont2.FontFamilyName.Length) { projectFont1 = projectFont2; } } if (projectFont1 == null) { Enumerable.Where <IProjectFont>((IEnumerable <IProjectFont>)projectFonts, (Func <IProjectFont, bool>)(fontFamily => { if (!ImportManager.TokenizeFontName(fontResolver.ConvertToGdiFontName(fontFamily.FontFamilyName)).StartsWith(fontMatching, StringComparison.OrdinalIgnoreCase)) { return(ImportManager.TokenizeFontName(fontResolver.ConvertToWpfFontName(fontFamily.FontFamilyName)).StartsWith(fontMatching, StringComparison.OrdinalIgnoreCase)); } return(true); })); if (Enumerable.Count <IProjectFont>(source) > 0) { projectFont1 = Enumerable.First <IProjectFont>(source); } } if (projectFont1 != null) { return(FontEmbedder.MakeProjectFontReference(projectFont1, this.SceneViewModel.Document.DocumentContext).Source); } return((string)null); }
private string FindFontFromSystem(string fontNameToken, string modifierToken) { IEnumerable <SystemFontFamily> systemFonts = FontEmbedder.GetSystemFonts((ITypeResolver)this.SceneViewModel.ProjectContext); IFontResolver fontResolver = this.SceneViewModel.ProjectContext.FontResolver; IEnumerable <SystemFontFamily> enumerable = Enumerable.Where <SystemFontFamily>(systemFonts, (Func <SystemFontFamily, bool>)(fontFamily => { if (!ImportManager.TokenizeFontName(fontResolver.ConvertToGdiFontName(fontFamily.FontFamilyName)).StartsWith(fontNameToken, StringComparison.OrdinalIgnoreCase)) { return(ImportManager.TokenizeFontName(fontResolver.ConvertToWpfFontName(fontFamily.FontFamilyName)).StartsWith(fontNameToken, StringComparison.OrdinalIgnoreCase)); } return(true); })); string fontMatching = modifierToken == null ? fontNameToken : fontNameToken + modifierToken; string str = (string)null; foreach (SystemFontFamily systemFontFamily in enumerable) { string strA1 = ImportManager.TokenizeFontName(fontResolver.ConvertToGdiFontName(systemFontFamily.FontFamilyName)); string strA2 = ImportManager.TokenizeFontName(fontResolver.ConvertToWpfFontName(systemFontFamily.FontFamilyName)); if (string.Compare(strA1, fontMatching, StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(strA2, fontMatching, StringComparison.OrdinalIgnoreCase) == 0) { return(systemFontFamily.FontFamilyName); } if (str == null || str.Length > systemFontFamily.FontFamilyName.Length) { str = systemFontFamily.FontFamilyName; } } if (str == null) { IEnumerable <SystemFontFamily> source = Enumerable.Where <SystemFontFamily>(systemFonts, (Func <SystemFontFamily, bool>)(fontFamily => { if (!ImportManager.TokenizeFontName(fontResolver.ConvertToGdiFontName(fontFamily.FontFamilyName)).StartsWith(fontMatching, StringComparison.OrdinalIgnoreCase)) { return(ImportManager.TokenizeFontName(fontResolver.ConvertToWpfFontName(fontFamily.FontFamilyName)).StartsWith(fontMatching, StringComparison.OrdinalIgnoreCase)); } return(true); })); if (Enumerable.Count <SystemFontFamily>(source) > 0) { str = Enumerable.First <SystemFontFamily>(source).FontFamilyName; } } return(str); }
private bool AppliesToImpl(DocumentNode node) { if (PlatformTypes.FontFamily.IsAssignableFrom((ITypeId)node.Type)) { DocumentPrimitiveNode documentPrimitiveNode = node as DocumentPrimitiveNode; if (documentPrimitiveNode != null) { DocumentNodeStringValue documentNodeStringValue = documentPrimitiveNode.Value as DocumentNodeStringValue; if (documentNodeStringValue != null) { FontFamily oldFontFamily; FontFamily newFontFamily; FontEmbedder.CreateFontFamilyChange(this.FontFamilyChangeModel.FontChangeType, this.FontFamilyChangeModel.ProjectFont, node.Context, out oldFontFamily, out newFontFamily); return(FontEmbedder.AreFontsEqual(new FontFamily(FontFamilyHelper.EnsureFamilyName(documentNodeStringValue.Value)), oldFontFamily, node.Context)); } } } return(false); }
protected override void ApplyChange(ChangedNodeInfo changedNodeInfo) { DocumentNode node = changedNodeInfo.Node; FontFamily oldFontFamily; FontFamily newFontFamily; FontEmbedder.CreateFontFamilyChange(this.fontFamilyChangeModel.FontChangeType, this.fontFamilyChangeModel.ProjectFont, changedNodeInfo.Node.Context, out oldFontFamily, out newFontFamily); DocumentNode documentNode = (DocumentNode)node.Context.CreateNode(PlatformTypes.FontFamily, (IDocumentNodeValue) new DocumentNodeStringValue(newFontFamily.Source)); if (node.SiteChildIndex != -1) { node.Parent.Children[node.SiteChildIndex] = documentNode; } else { if (node.SitePropertyKey == null) { return; } node.Parent.Properties[(IPropertyId)node.SitePropertyKey] = documentNode; } }
public void Initialize(FontFamily fontFamily, IProjectItem fontItem) { this.fontFamily = fontFamily; this.fontItem = fontItem; this.fontFamilyName = FontEmbedder.GetFontNameFromSource(fontFamily); }