FontStorage.php
2.28 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
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
<?php
namespace Nextend\Framework\Font;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
class FontStorage {
use SingletonTrait;
private $sets = array();
private $fonts = array();
private $fontsBySet = array();
private $fontsById = array();
protected function init() {
Plugin::addAction('systemfontset', array(
$this,
'fontSet'
));
Plugin::addAction('systemfont', array(
$this,
'fonts'
));
Plugin::addAction('font', array(
$this,
'font'
));
}
private function load() {
static $loaded;
if (!$loaded) {
Plugin::doAction('fontStorage', array(
&$this->sets,
&$this->fonts
));
for ($i = 0; $i < count($this->fonts); $i++) {
if (!isset($this->fontsBySet[$this->fonts[$i]['referencekey']])) {
$this->fontsBySet[$this->fonts[$i]['referencekey']] = array();
}
$this->fontsBySet[$this->fonts[$i]['referencekey']][] = &$this->fonts[$i];
$this->fontsById[$this->fonts[$i]['id']] = &$this->fonts[$i];
}
$loaded = true;
}
}
public function fontSet($referenceKey, &$sets) {
$this->load();
for ($i = count($this->sets) - 1; $i >= 0; $i--) {
$this->sets[$i]['system'] = 1;
$this->sets[$i]['editable'] = 0;
array_unshift($sets, $this->sets[$i]);
}
}
public function fonts($referenceKey, &$fonts) {
$this->load();
if (isset($this->fontsBySet[$referenceKey])) {
$_fonts = &$this->fontsBySet[$referenceKey];
for ($i = count($_fonts) - 1; $i >= 0; $i--) {
$_fonts[$i]['system'] = 1;
$_fonts[$i]['editable'] = 0;
array_unshift($fonts, $_fonts[$i]);
}
}
}
public function font($id, &$font) {
$this->load();
if (isset($this->fontsById[$id])) {
$this->fontsById[$id]['system'] = 1;
$this->fontsById[$id]['editable'] = 0;
$font = $this->fontsById[$id];
}
}
}