-
Notifications
You must be signed in to change notification settings - Fork 2
/
FontForgeWrapper.cs
61 lines (53 loc) · 2.51 KB
/
FontForgeWrapper.cs
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace DfontSplitter
{
class FontForgeWrapper
{
//fontforge.exe -c 'open(argv[1]).generate(argv[2])' Courier.ttf Courier_win.ttf
/// <summary>
/// Use fontforge to normalise the given TTF file. Some Mac-specific TTF files are
/// not supported by Windows, but FontForge can normalise these once extracted from the
/// Dfont or Font Suitcase.
/// </summary>
/// <param name="filename">Relative path in the temporary folder</param>
/// <param name="containingTempFolder">The temporary folder containing the file</param>
/// <param name="normalisedFilePath">The file path for the normalised TTF</param>
/// <returns>The exit code of fontforge.exe</returns>
public static int NormaliseTTF(string filename, string containingTempFolder, out string normalisedFilePath)
{
string fontForgePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "ExternalTools", "fontforge", "bin", "fontforge.exe");
if (!File.Exists(fontForgePath))
{
throw new InvalidOperationException("The fontforge external tools are not correctly installed.");
}
string inputFilename = Path.Combine(containingTempFolder, filename);
string outputFilename = Path.Combine(containingTempFolder, Path.GetFileNameWithoutExtension(filename) + "_out.ttf");
// some safety for arguments
if (inputFilename.Contains("\"") || outputFilename.Contains("\"")) {
throw new ArgumentOutOfRangeException(filename, "Input or output filename contains double quote character");
}
Process ffProcess = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = fontForgePath,
Arguments = $"-c \"open(argv[1]).generate(argv[2])\" \"{inputFilename}\" \"{outputFilename}\"",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
}
};
ffProcess.Start();
ffProcess.WaitForExit();
normalisedFilePath = outputFilename;
return ffProcess.ExitCode;
}
}
}