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
  
121
  
122
  
123
  
124
  
125
  
126
  
127
  
128
  
/* 
 * $Id$ 
 */ 
 
#include <roxen.h> 
//<locale-token project="admin_tasks"> LOCALE </locale-token> 
#define LOCALE(X,Y)  _STR_LOCALE("admin_tasks",X,Y) 
 
constant action = "status"; 
 
string name= LOCALE(10, "List fonts"); 
string doc = LOCALE(11, "List all available fonts"); 
 
 
string versions(string font) 
{ 
  array res=({ }); 
  array b = available_font_versions(font,32); 
  if (!b || !sizeof(b)) 
    return "<b>"+LOCALE("dH","Not available.")+"</b>"; 
  array a = map(b,describe_font_type); 
  mapping m = mkmapping(b,a); 
  foreach(sort(indices(m)), string t) 
    res += ({ m[t] }); 
  return String.implode_nicely(res); 
} 
 
mapping info; 
string list_font(string font) 
{ 
  string fn = replace(lower_case( font ), " ", "_" ); 
 
  string tmpl = #" 
    {{ #name }} 
      <h3 class='section{{^do_info}} no-margin-bottom{{/do_info}}'>{{ name }} 
        <small>&ndash; {{ versions }}</small></h3> 
    {{ /name }} 
    {{ #do_info }} 
      <table class='auto indent extra'> 
        {{ #info }} 
          <tr> 
            <th>{{ key }}:</th> 
            <td>{{ value }} 
          </tr> 
        {{ /info }} 
      </table> 
    {{ /do_info }}"; 
 
  mapping data = ([ 
    "name" : map(replace(font,"_"," ")/" ", capitalize)*" ", 
    "versions" : versions(font), 
    "info" : ({}) 
  ]); 
 
  if (mapping m = info[fn]) { 
    data->do_info = true; 
 
    foreach( sort( indices( m ) - ({"name","versions"}) ), string i ) { 
      if (intp(m[i]) || (stringp(m[i]) && sizeof(m[i]))) { 
        data->info += ({ ([ "key" : i, "value" : (string)m[i] ]) }); 
      } 
    } 
  } 
 
  return Roxen.render_mustache(tmpl, data); 
} 
 
string font_loaders( ) 
{ 
  string res =""; 
  foreach( roxen.fonts.font_handlers, FontHandler fl ) 
  { 
    int nf =  sizeof( fl->available_fonts() ); 
    res += "<dl><dt>"+fl->name+" ("+nf 
        +" font"+(nf==1?"":"s")+")</dt>" 
        "<dd>"+fl->doc+"</dd></dl>"; 
  } 
  return res; 
} 
 
string page_0(RequestID id) 
{ 
  array fonts = roxen.fonts.available_fonts(1); 
  array q = roxen.fonts.get_font_information(); 
  info = mkmapping( q->name, q ); 
  string res=("<input type='hidden' name='action' value='listfonts.pike'/>" 
              "<input type='hidden' name='doit' value='indeed'/>\n" 
              "<h2 class='no-margin-top'>" + 
              LOCALE(58,"Available font loaders") + "</h2><p>"+ 
              font_loaders()+"<h3 class='section'>" + 
                LOCALE("dI","All available fonts") + "</h3><p>"); 
 
  foreach(sort(fonts), string font) { 
    res += list_font(font); 
  } 
 
  res += ("</p><hr class='section'><p>" + LOCALE(236,"Example text") + ": " 
          "<input name=text size=46 value='" + 
          LOCALE(237,"Jackdaws love my big sphinx of quartz.") + 
          "'></p><hr class='section'>" 
          "<table><tr><td>" 
          "<cf-cancel href='?class=status&amp;&usr.set-wiz-id;'/></td>" 
          "<td class='text-right'>" 
          "<cf-next/></td></tr></table>"); 
  return res; 
} 
 
string page_1(RequestID id) 
{ 
  string res=""; 
  mapping v  = id->real_variables; 
  string txt = v->text && v->text[0]; 
  foreach(roxen.fonts.available_fonts(), string fn) 
    res += Roxen.html_encode_string( fn )+":<br />\n" 
      "<gtext fontsize=16 align='top' font='"+fn+"'>"+Roxen.html_encode_string(txt)+"</gtext><br>" 
      "<gtext fontsize=32 align='top' font='"+fn+"'>"+Roxen.html_encode_string(lower_case(txt))+"</gtext><br>" 
      "<gtext fontsize=48 align='top' font='"+fn+"'>"+Roxen.html_encode_string(upper_case(txt))+"</gtext><p>"; 
  return res+"<br /></p><p>\n<cf-ok/></p>"; 
} 
 
mixed parse( RequestID id ) 
{ 
  if( id->variables->doit ) 
    return page_1( id ); 
  return page_0( id ); 
}