Complete.Org: Mailing Lists: Archives: freeciv-i18n: January 2003:
[freeciv-i18n] Re: Manual translation and updates
Home

[freeciv-i18n] Re: Manual translation and updates

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: Freeciv I18n <freeciv-i18n@xxxxxxxxxxx>
Cc: Brandon Craig Rhodes <brandon@xxxxxxxxxxxxxx>
Subject: [freeciv-i18n] Re: Manual translation and updates
From: Christian Knoke <chrisk@xxxxxxxx>
Date: Wed, 22 Jan 2003 20:51:00 +0100

On Wed, Jan 22, 2003 at 08:41:48PM +0100, Christian Knoke wrote:
> 
> -- Binary/unsupported file stripped by Ecartis --
> -- Type: application/x-httpd-php

Ok, then:

manual.phtml
-------------------------------------------------------
<?php

// serves manual pages, corrects links, and inserts IMG attributes
// Accepted arguments: section and tiles
// No Doctype header, this will be inserted from the *.html file

  // include the php-code finder
  ini_set("include_path",
        ini_get("include_path") . ':' . $_SERVER['DOCUMENT_ROOT']
  );
  include_once("php_code/php_code_find.php");
  // includes for support routines
   include_once(php_code_find("fallback_find_file.php"));
   include_once(php_code_find("shared_variables.php"));

  function fallback_glob($pattern, $reldir = ".") {
    // search files both local and global, replace global with local files
    // if they do exist. Returns keyed array(filename => /path/to/filename)

    $arglobal = glob ($_SERVER['DOCUMENT_ROOT'] . "/$pattern");
    $arlocal = glob (dirname($_SERVER['SCRIPT_FILENAME']) . 
"/$reldir/$pattern");
    foreach ($arglobal as $path) { $ar[basename($path)] = $path;}
    foreach ($arlocal as $path) { $ar[basename($path)] = $path;}
    return $ar;
  }

  function man_error($what_error) {
    global $webmaster;
    echo "<table border=\"1\" style=\"font-size:xx-small\">\n";
    echo "<tr><th>$what_error</th><tr><td>";
    echo "Please contact the maintainer";
    if ($webmaster != "") {
      echo ", $webmaster";
    }
    echo ".</td></tr></table></font>\n";
  }

  function createTag ($part1, $pngname) {
    global $pngsize, $tiles;
    return $part1 . "src=\"{$tiles}/{$pngname}\" " . $pngsize[$pngname] . ">";
  }

  function createLink ($part1, $sect, $internal) {
    global $self, $tiles;
    return "{$part1}\"{$self}?section={$sect}&tiles={$tiles}{$internal}\">";
  }

  // initialize variables
  $self = basename($_SERVER["SCRIPT_NAME"]);
  $tilesets = array ("trident", "hires", "isotrident");
  $section = $_GET['section'];
  $tiles = $_GET['tiles'];
  if ($section == "") {$section = "over";}
  if ($tiles == "") {$tiles = "trident";}

  // valid url?
  if (!file_exists(fallback_find_file("manual/html/game-{$section}.html","..")) 
|| 
      !in_array ($tiles, $tilesets)) {
    // Bad URI's in the *.html files, bad (user manipulated?) links
    man_error("The requested manual section is not available.");
    exit;
  }
  
  // create files array with relative pathnames, local files have precedence
  $pngarray = fallback_glob("manual/$tiles/*.png", "..");

  // check for up to date *local* pngsize.spec
  $spec_valid = file_exists("$tiles/pngsize.spec");
  if ($spec_valid) {
    $stat = stat ("$tiles/pngsize.spec");
    $mtime = $stat[10];
    foreach ($pngarray as $filename => $path) {
      $stat = stat ($path);
      if ($stat[10] > $mtime) {
        $spec_valid = FALSE;
        break;
      }
    }
  }

  // read valid spec or create new one
  if ($spec_valid) {
    // read pngsize.spec and check
    $fd = fopen ("$tiles/pngsize.spec", "r");
    while (!feof ($fd)) {
      fscanf ($fd, "%s => %s %s\n", &$path, &$size1, &$size2);
      $filename = basename($path);
      $pngsize[$filename] = "$size1 $size2";
      if ($pngarray[$filename] != $path) { 
        $spec_valid = FALSE; 
        break;
      }
    }
    fclose ($fd);
    $spec_valid = $spec_valid && (count ($pngsize) == count ($pngarray));
    if (!$spec_valid) {
      // This should happen very rarely
      // If reload doesn't help, there is something essential wrong
      unlink ("$tiles/pngsize.spec");
      man_error("An Error has occured creating the manual page.<br>" . 
                "Please reload the page from the server.<br>" .
                "If this doesn't help:<br>");
      exit;
    }
  } else {
    // create pngsize data
    $pngsize = NULL;
    foreach ($pngarray as $filename => $path) {
      $size = GetImageSize ($path);
      $pngsize[$filename] = $size[3];
    }

    // write pngsize.spec
    $fd = fopen ("$tiles/pngsize.spec", "w");
    foreach ($pngsize as $filename => $sizestring) {
      fwrite ($fd, "$pngarray[$filename] => $sizestring\n");
    }
    if (!fclose ($fd)) { 
      // This means write errors
      man_error("Failed to create pngsize.spec file");
      exit;
    }
  }

  // read real manual section and replace links and img tags
  $htmlstr = file_get_contents(fallback_find_file(
             "manual/html/game-{$section}.html", ".."));
  // target looks like this: <img align="right" src="citywork.png">
  $htmlstr = preg_replace ('/(<img.+?)src=\s*"(.+?)"\s*>/e', 
             'createTag ("$1", "$2")', $htmlstr);
  // target looks like this: <a href="game-units.html#unit%3Asettlers">
  $htmlstr = preg_replace ('/(<a\s*href=\s*)"game-(\w+?)\.html([^"]*)">/e',
             'createLink ("$1", "$2", "$3")', $htmlstr);

  // output manual page
  print ($htmlstr);
?>
---------------------------------------------------------------

manphp.sh
--------------------------------------------------------------
#!/bin/bash

# run from /manual/ directory
# trident, isotrident, and hires directories need write permission for httpd
# also in website_l10n/de/.. they need to exist and have wr perm


mkdir html
mv trident/*.html trident/style.css html/
cd html

for i in *.html ; do
sed 's% height=".*" width=".*">%>%g' < $i > $i.new
mv $i.new $i
sed 's/href="game.html/href="game-over.html/g' < $i > $i.new
mv $i.new $i
sed 's%="style.css"%="html/style.css"%g' < $i > $i.new
mv $i.new $i
sed 's%href="/manual/"%href="./"%g' < $i > $i.new
mv $i.new $i
done
mv game.html game-over.html
---------------------------------------------------------------

manual.phtml.locale
-------------------------------------------------------------
<?php include($_SERVER["DOCUMENT_ROOT"] . "/mymanual/manual.phtml"); ?>
---------------------------------------------------------------

-- 
Christian Knoke     * * *      http://www.enter.de/~c.knoke/
* * * * * * * * *  Ceterum censeo Microsoft esse dividendum.


[Prev in Thread] Current Thread [Next in Thread]