Repository navigation
Expand file tree
/
Copy pathDirectoryFontDiscovery.cs
More file actions
67 lines (59 loc) · 2.33 KB
/
Copy pathDirectoryFontDiscovery.cs
File metadata and controls
67 lines (59 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using TheArtOfDev.HtmlRenderer.PdfSharp.FontResolution.Parsing;
namespace TheArtOfDev.HtmlRenderer.PdfSharp.FontResolution.Discovery
{
internal static class DirectoryFontDiscovery
{
public static List<FontInfo> DiscoverFontFilesFromDirectories(List<string> customFontDirectories)
{
var fontDirectories = new List<string>();
// Add platform-specific directories
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
fontDirectories.Add(Environment.GetFolderPath(Environment.SpecialFolder.Fonts));
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
fontDirectories.AddRange(new[]
{
"/usr/share/fonts",
"/usr/local/share/fonts",
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".fonts"),
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local/share/fonts")
});
}
// Add custom directories
fontDirectories.AddRange(customFontDirectories);
return DiscoverFontFilesInDirectories(fontDirectories);
}
public static List<FontInfo> DiscoverFontFilesInDirectories(List<string> directories)
{
var fontInfos = new List<FontInfo>();
foreach (var directory in directories)
{
if (!Directory.Exists(directory))
{
continue;
}
try
{
fontInfos.AddRange(FontDiscoveryService.SupportedFontExtensions.SelectMany(e => Directory.GetFiles(directory, $"*{e}", SearchOption.AllDirectories))
.Select(f => new FontInfo
{
Name = Path.GetFileNameWithoutExtension(f),
FilePath = f
}));
}
catch
{
// Silently continue on directory access errors
}
}
return fontInfos;
}
}
}