########################################################################### # # CssStyleToExpAttr.pm -- # A component of the Greenstone digital library software # from the New Zealand Digital Library Project at the # University of Waikato, New Zealand. # # Copyright (C) 2009 New Zealand Digital Library Project # # This program is free software; you can redistr te it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ########################################################################### package CssStyleToExpAttr; my $font_generic_family_lookup = { 'serif' => "t", # (e.g., Times) 'sans-serif' => "s", # (e.g., Helvetica) 'cursive', => "s", # (e.g., Zapf-Chancery) 'fantasy' => "s", # (e.g., Western) 'monospace' => "m" # (e.g., Courier) }; my $font_specific_family_lookup = { "arial" => "sans-serif", "arial black" => "sans-serif", "gadget" => "sans-serif", "comic sans ms" => "cursive", "comic sans" => "cursive", "courier" => "monospace", "courier new" => "monospace", "georgia" => "serif", "impact" => "sans-serif", "charcoal" => "sans-serif", "lucida console" => "monospace", "monaco" => "monospace", "lucida sans unicode" => "sans-serif", "lucida grande" => "sans-serif", "palatino linotype" => "serif", "book antiqua" => "serif", "palatino" => "serif", "tahoma" => "sans-serif", "geneva" => "sans-serif", "georgia" => "serif", "times" => "serif", "times new roman" => "serif", "trebuchet ms" => "sans-serif", "trebuchet" => "sans-serif", "verdana" => "sans-serif", "geneva" => "sans-serif", #symbol => "symbol", #webdings => "symbol", #wingdings => "symbol", #zapf dingbats => "symbol", "ms sans serif" => "sans-serif", "sans serif => sans-serif, geneva" => "sans-serif", "ms serif" => "serif", "new york" => "serif" }; my $UNUSED_font_specific_family_mapping = { 'serif' => [ "Times New Roman", "Bodoni", "Garamond", "Minion Web", "ITC Stone Serif", "MS Georgia", "Bitstream Cyberbit", "Adobe Minion Cyrillic", "Excelsior Cyrillic Upright", "Monotype Albion 70", "ER Bukinist", "New Peninim", "Raanana", "Ryumin Light-KL", "Kyokasho ICA", "Futo Min A101", "Lo Cicero Cherokee" ], 'sans-serif' => [ "MS Trebuchet", "ITC Avant Garde Gothic", "MS Arial", "MS Verdana", "Univers", "Futura", "ITC Stone Sans", "Gill Sans", "Akzidenz Grotesk", "Helvetica", "Attika", "Typiko New Era", "MS Tahoma", "Monotype Gill Sans 571", "Helvetica Greek", "Helvetica Cyrillic", "ER Univers", "Lucida Sans Unicode", "Bastion", "Arial Hebrew", "Shin Go", "Heisei Kaku Gothic W5" ], 'cursive' => [ "Caflisch Script", "Adobe Poetica", "Sanvito", "Ex Ponto", "Snell Roundhand", "Zapf-Chancery", "ER Architekt", "Corsiva", "DecoType Naskh", "Monotype Urdu 507" ], 'fantasy' => [ "Alpha Geometrique", "Critter", "Cottonwood", "FB Reactor", "Studz" ], 'monospace' => [ "Courier", "MS Courier New", "Prestige", "Everson Mono", "ER Kurier", "Osaka Monospaced", ] }; my $font_style_lookup = { 'normal' => "n", 'italic' => "i", 'oblique' => 'i' }; # Nothing that can currently be done for small-caps my $font_varient_lookup = { 'normal' => "", 'small-caps' => "" }; my $font_weight_lookup = { 'normal' => "n", 'bold' => "n", 'bolder' => "b", # filler for now 'lighter' => "n", # filler for now '100' => "n", '200' => "n", '300' => "b", '400' => "b", '500' => "b", '600' => "b", '700' => "b", '800' => "b", '900' => "b" }; my $font_size_absolute = { 'xx-small' => 8, 'x-small' =>10, 'small' =>12, 'medium' =>14, 'large' =>16, 'x-large' =>18, 'xx-large' =>20 }; # px, em, percentage, and relative, such as larger ## color, background-color my $color_name_lookup = { "aliceblue" => [240,248,255], "antiquewhite" => [250,235,215], "aqua" => [0,255,255], "aquamarine" => [127,255,212], "azure" => [240,255,255], "beige" => [245,245,220], "bisque" => [255,228,196], "black" => [0,0,0], "blanchedalmond" => [255,235,205], "blue" => [0,0,255], "blueviolet" => [138,43,226], "brown" => [165,42,42], "burlywood" => [222,184,135], "cadetblue" => [95,158,160], "chartreuse" => [127,255,0], "chocolate" => [210,105,30], "coral" => [255,127,80], "cornflowerblue" => [100,149,237], "cornsilk" => [255,248,220], "crimson" => [220,20,60], "cyan" => [0,255,255], "darkblue" => [0,0,139], "darkcyan" => [0,139,139], "darkgoldenrod" => [184,134,11], "darkgray" => [169,169,169], "darkgreen" => [0,100,0], "darkgrey" => [169,169,169], "darkkhaki" => [189,183,107], "darkmagenta" => [139,0,139], "darkolivegreen" => [85,107,47], "darkorange" => [255,140,0], "darkorchid" => [153,50,204], "darkred" => [139,0,0], "darksalmon" => [233,150,122], "darkseagreen" => [143,188,143], "darkslateblue" => [72,61,139], "darkslategray" => [47,79,79], "darkslategrey" => [47,79,79], "darkturquoise" => [0,206,209], "darkviolet" => [148,0,211], "deeppink" => [255,20,147], "deepskyblue" => [0,191,255], "dimgray" => [105,105,105], "dimgrey" => [105,105,105], "dodgerblue" => [30,144,255], "firebrick" => [178,34,34], "floralwhite" => [255,250,240], "forestgreen" => [34,139,34], "fuchsia" => [255,0,255], "gainsboro" => [220,220,220], "ghostwhite" => [248,248,255], "gold" => [255,215,0], "goldenrod" => [218,165,32], "gray" => [128,128,128], "green" => [0,128,0], "greenyellow" => [173,255,47], "grey" => [128,128,128], "honeydew" => [240,255,240], "hotpink" => [255,105,180], "indianred" => [205,92,92], "indigo" => [75,0,130], "ivory" => [255,255,240], "khaki" => [240,230,140], "lavender" => [230,230,250], "lavenderblush" => [255,240,245], "lawngreen" => [124,252,0], "lemonchiffon" => [255,250,205], "lightblue" => [173,216,230], "lightcoral" => [240,128,128], "lightcyan" => [224,255,255], "lightgoldenrodyellow" => [250,250,210], "lightgray" => [211,211,211], "lightgreen" => [144,238,144], "lightgrey" => [211,211,211], "lightpink" => [255,182,193], "lightsalmon" => [255,160,122], "lightseagreen" => [32,178,170], "lightskyblue" => [135,206,250], "lightslategray" => [119,136,153], "lightslategrey" => [119,136,153], "lightsteelblue" => [176,196,222], "lightyellow" => [255,255,224], "lime" => [0,255,0], "limegreen" => [50,205,50], "linen" => [250,240,230], "magenta" => [255,0,255], "maroon" => [128,0,0], "mediumaquamarine" => [102,205,170], "mediumblue" => [0,0,205], "mediumorchid" => [186,85,211], "mediumpurple" => [147,112,219], "mediumseagreen" => [60,179,113], "mediumslateblue" => [123,104,238], "mediumspringgreen" => [0,250,154], "mediumturquoise" => [72,209,204], "mediumvioletred" => [199,21,133], "midnightblue" => [25,25,112], "mintcream" => [245,255,250], "mistyrose" => [255,228,225], "moccasin" => [255,228,181], "navajowhite" => [255,222,173], "navy" => [0,0,128], "oldlace" => [253,245,230], "olive" => [128,128,0], "olivedrab" => [107,142,35], "orange" => [255,165,0], "orangered" => [255,69,0], "orchid" => [218,112,214], "palegoldenrod" => [238,232,170], "palegreen" => [152,251,152], "paleturquoise" => [175,238,238], "palevioletred" => [219,112,147], "papayawhip" => [255,239,213], "peachpuff" => [255,218,185], "peru" => [205,133,63], "pink" => [255,192,203], "plum" => [221,160,221], "powderblue" => [176,224,230], "purple" => [128,0,128], "red" => [255,0,0], "rosybrown" => [188,143,143], "royalblue" => [65,105,225], "saddlebrown" => [139,69,19], "salmon" => [250,128,114], "sandybrown" => [244,164,96], "seagreen" => [46,139,87], "seashell" => [255,245,238], "sienna" => [160,82,45], "silver" => [192,192,192], "skyblue" => [135,206,235], "slateblue" => [106,90,205], "slategray" => [112,128,144], "slategrey" => [112,128,144], "snow" => [255,250,250], "springgreen" => [0,255,127], "steelblue" => [70,130,180], "tan" => [210,180,140], "teal" => [0,128,128], "thistle" => [216,191,216], "tomato" => [255,99,71], "turquoise" => [64,224,208], "violet" => [238,130,238], "wheat" => [245,222,179], "white" => [255,255,255], "whitesmoke" => [245,245,245], "yellow" => [255,255,0], "yellowgreen" => [154,205,50 ] }; sub convert_font_size { my ($css_font_size) = @_; my $exp_font_size = undef; if ($css_font_size =~ m/^(\d+(?:\.\d*))px$/) { $exp_font_size = int($1); } return $exp_font_size; } sub convert_font_face { my ($css_font_face) = @_; my $exp_font_face = undef; if(lc($css_font_face) eq "bold"){ $exp_font_face = "b"; }else{ #for now - also need to take into account italic and italic bold. $exp_font_face = "r"; } return $exp_font_face; } sub convert_color { my ($css_color) = @_; my $exp_color; if ($css_color =~ m/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/) { my $r = int(100*$1/255); my $g = int(100*$2/255); my $b = int(100*$3/255); print STDERR "*** r = $r, g = $g, b = $b\n"; $exp_color = "$r $g $b"; print STDERR "*** exp color = $exp_color\n"; } elsif ($css_color =~ m/^transparent/i) { $exp_color = undef; } return $exp_color; } sub convert_font_family { my ($css_font_family) = @_; print STDERR "*** PASSING PARAMETER css font family: ".$css_font_family."\n"; my $exp_font_family; #use $font_specific_family_lookup and $font_generic_family_lookup #to find the appropriate font family tag to output to expeditee. if(defined $font_specific_family_lookup->{lc($css_font_family)}){ $exp_font_family = $css_font_family."_"; }else{ #to account for instances where a list of fonts is stored as the font family, e.g. "Arial,Segoe...Sans-Serif". #just extract the first font name from this list. my @font_family_vals = split(',',$css_font_family); if(scalar(@font_family_vals) > 0){ $exp_font_family = $font_family_vals[0]."_"; } } return $exp_font_family; } sub convert_font_style { my ($css_font_style) = @_; my $exp_font_style; return $exp_font_style; } 1;