-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathfontfind.js
121 lines (113 loc) · 3.61 KB
/
fontfind.js
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
Чтобы работать Деодару нужен файл со шрифтом, здесь ряд функций пытаются найти его
1) пробуется "fc-list"
2) если ничего (на некоторых дистрибах fc-list не выдаёт пути к шрифтам), то пробуется "fc-list -v"
3) если опять ничего пробуется более железный вариант "find /usr/share | grep ttf"
*/
var knownGoodFonts = [ // можно пометить предпочитаемый фонт звёздочкой, например '*consola.ttf'
'PTM75F_W.ttf',
'FiraMono-Regular.otf',
'DejaVuSansMono.ttf',
'DejaVuSansMono-Oblique.ttf',
'LiberationMono-Italic.ttf',
'LiberationMono-BoldItalic.ttf',
'LiberationMono-Bold.ttf',
'LiberationMono-Regular.ttf',
'FreeMono.ttf',
'FreeMonoBold.ttf',
'UbuntuMono-R.ttf',
'UbuntuMono-B.ttf',
'UbuntuMono-BI.ttf',
'UbuntuMono-RI.ttf',
'Inconsolata.otf',
'DroidSansMono.ttf',
'Share-TechMono.ttf',
'Share-TechMono.otf',
'fixedU1.ttf',
'fixed7.ttf',
'consolai.ttf',
'consola.ttf',
'consolab.ttf',
'consolaz.ttf',
'Inconsolata.otf',
'*FreeSerif.ttf',
], fontPattern = ['mono', 'consol', 'fix']
var favouriteFont = '', fontPath
for (var t = 0; t < knownGoodFonts.length; t++)
if (knownGoodFonts[t].indexOf('*') == 0) {
var s = knownGoodFonts[t]; s = s.substr(1, s.length)
favouriteFont = s
knownGoodFonts[t] = s
}
function parseFontFindData(L) {
var R = [], found
if (fs.existsSync(L[0]) == false) return
for (var i = 0; i < L.length; i++) if (L[i]) {
var match = false
for (var j = 0; j < fontPattern.length; j++) {
if (L[i].toLowerCase().indexOf(fontPattern[j]) >= 0) { match = true; break }
}
if (match) {
var s = L[i]
for (var f = 0; f < knownGoodFonts.length; f++) {
if (s.indexOf(knownGoodFonts[f]) >= 0)
if (R.indexOf(s) < 0) R.push(s)
if (s.indexOf(favouriteFont) >= 0) found = s
}
}
}
if (found) return found
return R[0]
}
function taskFontFind() {
var me = this
require('child_process').exec('find /usr/share/fonts | grep \\.ttf', function(err, data) {
foundFont = parseFontFindData(data.split('\n'))
me.chain.fontPath = foundFont
me.state = 'done'
me.chain.tick()
})
}
function taskFontSelect2() {
var me = this
require('child_process').exec('fc-list -v | grep "file:"', function(err, data) {
data = data.split('\n')
for (var i = 0; i < data.length; i++) data[i] = data[i].split('"')[1]
var foundFont = parseFontFindData(data)
if (foundFont) {
me.chain.fontPath = foundFont
me.state = 'done'
} else me.task = taskFontFind
me.chain.tick()
})
}
function taskFontSelect() {
this.chain.fontPath =
__dirname + '/fonts/HighElf.ttf'
//__dirname + '/fonts/NovoBukva.ttf'
//__dirname + '/fonts/elfu.ttf'
// '/home/ya/fonts/MonospaceTypewriter.ttf'
// '/home/ya/fonts/NK57C.ttf'
// '/home/ya/fonts/nk57-monospace-cd-rg.ttf'
// '/home/ya/.local/share/fonts/PTM55F_W.ttf'
//'/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf'
//'/usr/share/fonts/truetype/freefont/FreeMono.ttf'
//'/x/fonts/freefont-20120503/sfd/GnuMono.ttf'
//'/x/fonts/freefont-20120503/sfd/PTMono-Sym.ttf'
//'/usr/share/fonts/truetype/unifont/unifont.ttf'
this.state = 'done'
this.chain.tick()
return
var me = this
require('child_process').exec('fc-list', function(err, data) {
data = data.split('\n')
for (var i = 0; i < data.length; i++) data[i] = data[i].split(':')[0]
var foundFont = parseFontFindData(data)
if (foundFont) {
me.chain.fontPath = foundFont
me.state = 'done'
} else me.task = taskFontSelect2
me.chain.tick()
})
}
exports.taskFontSelect = taskFontSelect