Moshe, as I've already told you, your patch had a little bug with GLOBALS.

Attached is a correction for your patch.

Nuno

----- Original Message ----- 
> 
> "Wez Furlong" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
> >
> > Now, quit complaining and get coding ;-)
> >
> > --Wez.
> 
> http://moshe.i-com-it.com/patchs/livedocs-rtl3.patch.txt
> 
> this patch contains:
> 1. initial rtl support.
> 2. add some missing htmlspecialchars().
> i change the  htmlentities(); on <pre> into htmlspecialchars() coz
> htmlentities(); doesn't fit well for not english charsets, do i miss
> something?
> 
> --/moshe
Index: common.php
===================================================================
RCS file: /repository/livedocs/common.php,v
retrieving revision 1.12
diff -u -r1.12 common.php
--- common.php  5 May 2004 01:37:03 -0000       1.12
+++ common.php  5 May 2004 17:33:36 -0000
@@ -83,5 +83,15 @@
        $NOTESDB = false;
 }
 
+$rtl_langs = array('he','ar');
+define('RTL', isset($rtl_langs[$lang])?1:0);
+
+
+/* TODO: add all languages here */
+$chars = array('ar' => 'ISO-8859-6',
+               'he' => 'windows-1255', 
+               'ja' => 'UTF-8');
+
+define('CHARSET', isset($chars[$lang]) ? $chars[$lang]  : 'iso-8859-1');
 
 ?>
Index: style_mapping.php
===================================================================
RCS file: /repository/livedocs/style_mapping.php,v
retrieving revision 1.11
diff -u -r1.11 style_mapping.php
--- style_mapping.php   1 May 2004 11:34:50 -0000       1.11
+++ style_mapping.php   5 May 2004 17:33:36 -0000
@@ -150,7 +150,11 @@
                }
        }
 
-       return sprintf('<div class="copyright">Copyright &copy; %s by %s</div>', 
implode(", ", $y), $holder);
+       if(RTL) {
+               return sprintf('<div dir="ltr" class="copyright">Copyright &copy; %s 
by <span dir="rtl">%s</span>&nbsp;</div>', implode(", ", $y), $holder);
+       } else {
+               return sprintf('<div class="copyright">Copyright &copy; %s by 
%s</div>', implode(", ", $y), $holder);
+       }
 }
 
 function format_refpurpose($node) 
@@ -199,25 +203,28 @@
 
 function format_parameter($node) 
 {
-       return sprintf('<span class="%s">$%s</span>', $node->tagname, $node->content);
+       return sprintf('<span class="%s">$%s</span>', $node->tagname, 
htmlspecialchars($node->content, ENT_NOQUOTES));
 }
 
 function format_pubdate($node) 
 {
-       return sprintf('<div class="%s">Published on: %s</div>', $node->tagname, 
$node->content);
+       return sprintf('<div class="%s">Published on: %s</div>', $node->tagname, 
htmlspecialchars($node->content, ENT_NOQUOTES));
 }
 
 function format_ulink($node) 
 {
-       return sprintf('<a target="_blank" class="ulink" href="%s">%s</a>',
-               $node->attributes['url'],
-               $node->content
-               );
+       $dir = (RTL && !ereg("([�-�]+)",$node->content)) ? ' dir="ltr"' : "";
+       return sprintf('<a target="_blank" class="ulink" href="%s"%s>%s</a>',
+               $node->attributes['url'],
+               $dir,
+               htmlspecialchars($node->content, ENT_NOQUOTES)
+               );
+
 }
 
 function format_warning_title($node) 
 {
-       return sprintf('<span class="warning_title">%s</span>', $node->content);
+       return sprintf('<span class="warning_title">%s</span>', 
htmlspecialchars($node->content, ENT_NOQUOTES));
 }
 
 function format_link($node) 
@@ -232,11 +239,14 @@
                $caption = $node->attributes['linkend'];
        }
        $url = generate_url_for_id($lang, $node->attributes['linkend']);
-       return sprintf('<a class="%s" href="%s">%s</a>',
-               $node->tagname,
-               $url,
-               $caption
-               );
+       $dir = isset($node->attributes['dir']) ? ' dir="'.$node->attributes['dir'].'"' 
: '';
+
+       return sprintf('<a class="%s" href="%s"%s>%s</a>',
+               $node->tagname,
+               $url,
+               $dir,
+               $caption
+               );
 }
 
 function format_function($node) 
@@ -262,12 +272,18 @@
                return sprintf('<span class="%s">%s()</span>', $class, $node->content);
        }
 
-       $url = generate_url_for_id($lang, $dest);
-       return sprintf('<a class="%s" href="%s">%s()</a>',
-               $class,
-               $url,
-               $node->content
-               );
+       $dir = RTL ? ' dir="ltr"' : '';
+       if ($current_page == $dest) {
+               return sprintf('<span class="%s"%s>%s()</span>', $class, $dir, 
$node->content);
+       }
+ 
+       $url = generate_url_for_id($lang, $dest);
+       return sprintf('<a class="%s" href="%s"%s>%s()</a>',
+               $class,
+               $url,
+               $dir,
+               htmlspecialchars($node->content, ENT_NOQUOTES)
+               );
 }
 
 function format_listing($node) 
@@ -315,13 +331,14 @@
                case 'html':
                case 'xml':
                case 'c':
-                       $content = '<pre>' . htmlentities($content) . '</pre>';
+                       $content = '<pre>' . htmlspecialchars($content) . '</pre>';
                        break;
                default:
                        $content = htmlspecialchars($content);
        }
 
-       return sprintf('<div class="%scode">%s</div>', $node->attributes['role'], 
$content);
+       $dir = RTL ? ' dir="ltr"' : '';
+       return sprintf('<div class="%scode"%s>%s</div>', $node->attributes['role'], 
$dir, $content);
 }
 
 function format_params($node) 
@@ -395,8 +412,8 @@
                $params .= $p;
        }
 
-
-       return "<div class=\"methodsynopsis\"><span class=\"type\">$type</span> <span 
class=\"function\">$fname(</span>$params$optclose<span 
class=\"function\">)</span></div>";
+       $dir = RTL ? ' dir="ltr"' : '';
+       return "<div$dir class=\"methodsynopsis\"><span class=\"type\">$type</span> 
<span class=\"function\">$fname(</span>$params$optclose<span 
class=\"function\">)</span></div>";
 }
 
 function format_class_synopsis($node) 
@@ -545,4 +562,25 @@
 
        return $html . "</div>";
 }
+
+/* RTL support */
+if(RTL) {
+       $map['emphasis'] = 'format_emphasis';
+       $map['literal'] = 'format_ltr_span';
+       $map['option'] = 'format_ltr_span';
+       $map['term'] = 'format_ltr_span';
+       $map['varname'] = 'format_ltr_span';
+       $map['filename'] = 'format_ltr_span';
+       
+       function format_em($node)
+       {
+               return sprintf('<em class="%s" dir="ltr">%s</em>', $node->tagname, 
htmlspecialchars($node->content, ENT_NOQUOTES));     
+       }
+       
+       function format_ltr_span($node)
+       {
+               return sprintf('<span class="%s" dir="ltr">%s</span>', $node->tagname, 
htmlspecialchars($node->content, ENT_NOQUOTES)); 
+       }
+}
+
 ?>
Index: themes/default/html_format.php
===================================================================
RCS file: /repository/livedocs/themes/default/html_format.php,v
retrieving revision 1.7
diff -u -r1.7 html_format.php
--- themes/default/html_format.php      21 Mar 2004 15:06:55 -0000      1.7
+++ themes/default/html_format.php      5 May 2004 17:33:36 -0000
@@ -24,16 +24,20 @@
 
 function manual_page_header() 
 {
-       global $lang, $title, $css_url;
+       global $lang, $title, $css_url, $RTL, $CHARSET;
+       $charset = CHARSET;
+       $dir = RTL ? ' dir="rtl"' : '';
+
        $head =<<<HEAD
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd";>
 <html lang="$lang">
 <head>
+<meta http-equiv="Content-Type" content="text/html; charset="$charset"/>
 <title>$title</title>
 <link rel="stylesheet" href="$css_url" />
 </head>
-<body>
+<body$dir>
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tr><td height="1"></td><td rowspan="2" valign="top">
 HEAD;

Reply via email to