You are here

class rtf in Bibliography Module 6

Same name and namespace in other branches
  1. 6.2 modules/rtf/rtf_export.inc \rtf
  2. 7 modules/rtf/rtf_export.inc \rtf
  3. 7.2 modules/rtf/rtf_export.inc \rtf

Hierarchy

Expanded class hierarchy of rtf

4 string references to 'rtf'
biblio_admin_settings in ./biblio.admin.inc
Implementation of hook_settings().
theme_biblio_export_links in ./biblio_theme.inc
Creates a group of links for the various export functions
_biblio_export in ./biblio.import.export.inc
_build_biblio_link in ./biblio_theme.inc
Creates a link to export a node (or view) in EndNote Tagged format

File

./class_rtf.php, line 4

View source
class rtf {

  // {\colortbl;\red 0\green 0\blue 0;\red 255\green 0\ blue0;\red0 ...}
  var $colour_table = array();
  var $colour_rgb;

  // {\fonttbl{\f0}{\f1}{f...}}
  var $font_table = array();
  var $fonts_array = array();
  var $font_face;
  var $font_size;

  // {\info {\title <title>} {\author <author>} {\operator <operator>}}
  var $info_table = array();
  var $page_width;
  var $page_height;
  var $page_size;
  var $page_orientation;
  var $rtf_version;
  var $tab_width;
  var $document;
  var $buffer;
  var $inch;
  var $cm;
  var $mm;
  function rtf() {
    $this->inch = 1440;
    $this->cm = 567;
    $this->mm = 56.7;
    $this->fonts_array[] = array(
      "name" => "Arial",
      "family" => "swiss",
      "charset" => 0,
    );
    $this->fonts_array[] = array(
      "name" => "Times New Roman",
      "family" => "roman",
      "charset" => 0,
    );
    $this->fonts_array[] = array(
      "name" => "Verdana",
      "family" => "swiss",
      "charset" => 0,
    );
    $this->fonts_array[] = array(
      "name" => "Symbol",
      "family" => "roman",
      "charset" => 2,
    );
    $this
      ->setDefaultFontFace(0);
    $this
      ->setDefaultFontSize(24);
    $this
      ->setPaperSize(5);
    $this
      ->setPaperOrientation(1);
    $this->rtf_version = 1;
    $this->tab_width = 360;
  }
  function setDefaultFontFace($face) {
    $this->font_face = $face;

    // $font is interger
  }
  function setDefaultFontSize($size) {
    $this->font_size = $size;
  }
  function setTitle($title = "") {
    $this->info_table["title"] = $title;
  }
  function setAuthor($author = "") {
    $this->info_table["author"] = $author;
  }
  function setOperator($operator = "") {
    $this->info_table["operator"] = $operator;
  }
  function setPaperSize($size = 0) {

    // 1 => Letter (8.5 x 11 inch)
    // 2 => Legal (8.5 x 14 inch)
    // 3 => Executive (7.25 x 10.5 inch)
    // 4 => A3 (297 x 420 mm)
    // 5 => A4 (210 x 297 mm)
    // 6 => A5 (148 x 210 mm)
    // Orientation considered as Portrait
    switch ($size) {
      case 1:
        $this->page_width = floor(8.5 * $this->inch);
        $this->page_height = floor(11 * $this->inch);
        $this->page_size = 1;
        break;
      case 2:
        $this->page_width = floor(8.5 * $this->inch);
        $this->page_height = floor(14 * $this->inch);
        $this->page_size = 5;
        break;
      case 3:
        $this->page_width = floor(7.25 * $this->inch);
        $this->page_height = floor(10.5 * $this->inch);
        $this->page_size = 7;
        break;
      case 4:
        $this->page_width = floor(297 * $this->mm);
        $this->page_height = floor(420 * $this->mm);
        $this->page_size = 8;
        break;
      case 5:
      default:
        $this->page_width = floor(210 * $this->mm);
        $this->page_height = floor(297 * $this->mm);
        $this->page_size = 9;
        break;
      case 6:
        $this->page_width = floor(148 * $this->mm);
        $this->page_height = floor(210 * $this->mm);
        $this->page_size = 10;
        break;
    }
  }
  function setPaperOrientation($orientation = 0) {

    // 1 => Portrait
    // 2 => Landscape
    switch ($orientation) {
      case 1:
      default:
        $this->page_orientation = 1;
        break;
      case 2:
        $this->page_orientation = 2;
        break;
    }
  }
  function addColour($hexcode) {

    // Get the RGB values
    $this
      ->hex2rgb($hexcode);

    // Register in the colour table array
    $this->colour_table[] = array(
      "red" => $this->colour_rgb["red"],
      "green" => $this->colour_rgb["green"],
      "blue" => $this->colour_rgb["blue"],
    );
  }

  // Convert HEX to RGB (#FFFFFF => r255 g255 b255)
  function hex2rgb($hexcode) {
    $hexcode = str_replace("#", "", $hexcode);
    $rgb = array();
    $rgb["red"] = hexdec(substr($hexcode, 0, 2));
    $rgb["green"] = hexdec(substr($hexcode, 2, 2));
    $rgb["blue"] = hexdec(substr($hexcode, 4, 2));
    $this->colour_rgb = $rgb;
  }

  // Convert newlines into \par
  function nl2par($text) {
    $text = str_replace("\n", "\\par ", $text);
    return $text;
  }

  // Add a text string to the document buffer
  function addText($text) {
    $text = str_replace("\n", "", $text);
    $text = str_replace("\t", "", $text);
    $text = str_replace("\r", "", $text);
    $this->document .= $text;
  }

  // Ouput the RTF file
  function getDocument() {
    $this->buffer .= "{";

    // Header
    $this->buffer .= $this
      ->getHeader();

    // Font table
    $this->buffer .= $this
      ->getFontTable();

    // Colour table
    $this->buffer .= $this
      ->getColourTable();

    // File Information
    $this->buffer .= $this
      ->getInformation();

    // Default font values
    $this->buffer .= $this
      ->getDefaultFont();

    // Page display settings
    $this->buffer .= $this
      ->getPageSettings();

    // Parse the text into RTF
    $this->buffer .= $this
      ->parseDocument();
    $this->buffer .= "}";
    header("Content-Type: text/enriched\n");
    header("Content-Disposition: attachment; filename=rtf.rtf");
    echo $this->buffer;
  }

  // Header
  function getHeader() {
    $header_buffer = "\\rtf{$this->rtf_version}\\ansi\\deff0\\deftab{$this->tab_width}\n\n";
    return $header_buffer;
  }

  // Font table
  function getFontTable() {
    $font_buffer = "{\\fonttbl\n";
    foreach ($this->fonts_array as $fnum => $farray) {
      $font_buffer .= "{\\f{$fnum}\\f{$farray['family']}\\fcharset{$farray['charset']} {$farray['name']}}\n";
    }
    $font_buffer .= "}\n\n";
    return $font_buffer;
  }

  // Colour table
  function getColourTable() {
    $colour_buffer = "";
    if (sizeof($this->colour_table) > 0) {
      $colour_buffer = "{\\colortbl;\n";
      foreach ($this->colour_table as $cnum => $carray) {
        $colour_buffer .= "\\red{$carray['red']}\\green{$carray['green']}\\blue{$carray['blue']};\n";
      }
      $colour_buffer .= "}\n\n";
    }
    return $colour_buffer;
  }

  // Information
  function getInformation() {
    $info_buffer = "";
    if (sizeof($this->info_table) > 0) {
      $info_buffer = "{\\info\n";
      foreach ($this->info_table as $name => $value) {
        $info_buffer .= "{\\{$name} {$value}}";
      }
      $info_buffer .= "}\n\n";
    }
    return $info_buffer;
  }

  // Default font settings
  function getDefaultFont() {
    $font_buffer = "\\f{$this->font_face}\\fs{$this->font_size}\n";
    return $font_buffer;
  }

  // Page display settings
  function getPageSettings() {
    if ($this->page_orientation == 1) {
      $page_buffer = "\\paperw{$this->page_width}\\paperh{$this->page_height}\n";
    }
    else {
      $page_buffer = "\\paperw{$this->page_height}\\paperh{$this->page_width}\\landscape\n";
    }
    $page_buffer .= "\\pgncont\\pgndec\\pgnstarts1\\pgnrestart\n";
    return $page_buffer;
  }

  // Convert special characters to ASCII
  function specialCharacters($text) {
    $text_buffer = "";
    for ($i = 0; $i < strlen($text); $i++) {
      $text_buffer .= $this
        ->escapeCharacter($text[$i]);
    }
    return $text_buffer;
  }

  // Convert special characters to ASCII
  function escapeCharacter($character) {
    $escaped = "";
    if (ord($character) >= 0x0 && ord($character) < 0x20) {
      $escaped = "\\'" . dechex(ord($character));
    }
    if (ord($character) >= 0x20 && ord($character) < 0x80 || ord($character) == 0x9 || ord($character) == 0xa) {
      $escaped = $character;
    }
    if (ord($character) >= 0x80 and ord($character) < 0xff) {
      $escaped = "\\'" . dechex(ord($character));
    }
    switch (ord($character)) {
      case 0x5c:
      case 0x7b:
      case 0x7d:
        $escaped = "\\" . $character;
        break;
    }
    return $escaped;
  }

  // Parse the text input to RTF
  function parseDocument() {

    //$doc_buffer = $this->specialCharacters(html_entity_decode($this->document));
    $doc_buffer = html_entity_decode($this->document, ENT_QUOTES);
    $doc_buffer = utf8_decode($doc_buffer);
    $doc_buffer = $this
      ->specialCharacters($doc_buffer);
    if (preg_match("/<ul>(.*?)<\\/ul>/mi", $doc_buffer)) {
      $doc_buffer = str_replace("<ul>", "", $doc_buffer);
      $doc_buffer = str_replace("</ul>", "", $doc_buffer);
      $doc_buffer = preg_replace("/<li>(.*?)<\\/li>/mi", "\\f3\\'B7\\tab\\f{$this->font_face} \\1\\par", $doc_buffer);
    }
    $doc_buffer = preg_replace("/<p>(.*?)<\\/p>/mi", "\\1\\par ", $doc_buffer);
    $doc_buffer = preg_replace("/<strong>(.*?)<\\/strong>/mi", "\\b \\1\\b0 ", $doc_buffer);
    $doc_buffer = preg_replace("/<em>(.*?)<\\/em>/mi", "\\i \\1\\i0 ", $doc_buffer);
    $doc_buffer = preg_replace("/<i>(.*?)<\\/i>/mi", "\\i \\1\\i0 ", $doc_buffer);
    $doc_buffer = preg_replace("/<u>(.*?)<\\/u>/mi", "\\ul \\1\\ul0 ", $doc_buffer);
    $doc_buffer = preg_replace("/<strike>(.*?)<\\/strike>/mi", "\\strike \\1\\strike0 ", $doc_buffer);
    $doc_buffer = preg_replace("/<sub>(.*?)<\\/sub>/mi", "{\\sub \\1}", $doc_buffer);
    $doc_buffer = preg_replace("/<sup>(.*?)<\\/sup>/mi", "{\\super \\1}", $doc_buffer);

    //$doc_buffer = preg_replace("/<H1>(.*?)<\/H1>/mi", "\\pard\\qc\\fs40 \\1\\par\\pard\\fs{$this->font_size} ", $doc_buffer);

    //$doc_buffer = preg_replace("/<H2>(.*?)<\/H2>/mi", "\\pard\\qc\\fs32 \\1\\par\\pard\\fs{$this->font_size} ", $doc_buffer);
    $doc_buffer = preg_replace("/<h1>(.*?)<\\/h1>/mi", "\\fs48\\b \\1\\b0\\fs{$this->font_size}\\par ", $doc_buffer);
    $doc_buffer = preg_replace("/<h2>(.*?)<\\/h2>/mi", "\\fs36\\b \\1\\b0\\fs{$this->font_size}\\par ", $doc_buffer);
    $doc_buffer = preg_replace("/<h3>(.*?)<\\/h3>/mi", "\\fs27\\b \\1\\b0\\fs{$this->font_size}\\par ", $doc_buffer);
    $doc_buffer = preg_replace("/<hr(.*?)>/i", "\\brdrb\\brdrs\\brdrw30\\brsp20 \\pard\\par ", $doc_buffer);
    $doc_buffer = str_replace("<br>", "\\par ", $doc_buffer);
    $doc_buffer = str_replace("<br>", "\\par ", $doc_buffer);
    $doc_buffer = str_replace("<tab>", "\\tab ", $doc_buffer);
    $doc_buffer = $this
      ->nl2par($doc_buffer);
    return $doc_buffer;
  }

}

Members