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
  
/* 
 * $Id: listfonts.pike,v 1.18 2001/06/15 19:51:32 k%123.org Exp $ 
 */ 
 
#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 += ({ //"<input type='hidden' name='"+(font+"/"+t)+"'/>"+ 
              Roxen.html_encode_string(m[t]) }); 
  return String.implode_nicely(res); 
} 
 
mapping info; 
string list_font(string font) 
{ 
  string fn = replace(lower_case( font ), " ", "_" ); 
   
  if( mapping m = info[ fn ] ) 
  { 
    string res = "<p><font size=+1><b>"+ 
           (Roxen.html_encode_string(map(replace(font,"_"," ")/" ", 
                                         capitalize)*" ")+ 
                  "</b></font> <font size='-1'>"+versions(font)+"</font><br />" 
                  "<table cellspacing=0 cellpadding=0"); 
    foreach( sort( indices( m ) - ({"name","versions"}) ), string i ) 
      res += "<tr><td>&nbsp;&nbsp;&nbsp;<font size=-1>"+i+":&nbsp;</font></td><td><font size=-1>"+ 
          Roxen.html_encode_string(m[i])+"</font></td></tr>\n"; 
    res += "</table>"; 
    return res; 
  } 
  return "<p><font size=+1><b>"+ 
         (Roxen.html_encode_string(map(replace(font,"_"," ")/" ",capitalize)*" ")+ 
          "</b></font> <font size='-1'>"+versions(font)+"</font><br />"); 
} 
 
string font_loaders( ) 
{ 
  string res ="<dl>"; 
  foreach( roxen.fonts.font_handlers, FontHandler fl ) 
  { 
    int nf =  sizeof( fl->available_fonts() ); 
    res += "<b><dt><font size=+1>"+fl->name+" ("+nf 
        +" font"+(nf==1?"":"s")+")</font></b></dt>" 
        "<dd>"+fl->doc+"</dd><p />"; 
  } 
  return res+"</dl>"; 
} 
 
string page_0(RequestID id) 
{ 
  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" 
              "<font size='+1'><b>" + 
              LOCALE(58,"Available font loaders") + "</b></font><p>"+ 
              font_loaders()+"<font size='+1'><b>" + 
              LOCALE("dI","All available fonts") + "</b></font><p>"); 
  foreach(sort(roxen.fonts.available_fonts()), string font) 
    res+=list_font(font); 
  res += ("</p><p>" + LOCALE(236,"Example text") + 
          "<font size=-1><input name=text size=46 value='" + 
          LOCALE(237,"Jackdaws love my big sphinx of quartz.") + 
          "'></p><p><table width='70%'><tr><td align='left'>" 
          "<cf-cancel href='?class=maintenance'/></td><td align='right'>" 
          "<cf-next/></td></tr></table></p>"); 
  return res; 
} 
 
string page_1(RequestID id) 
{ 
  string res=""; 
  mapping v  = id->real_variables; 
  string txt = Roxen.html_encode_string( v->text && v->text[0] ); 
  foreach(roxen.fonts.available_fonts(), string fn) 
    res += Roxen.html_encode_string( fn )+":<br />\n" 
      "<gtext align='top' font='"+fn+"'>"+lower_case(txt)+"</gtext><br>" 
      "<gtext align='top' font='"+fn+"'>"+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 ); 
}