1<?php 2if (!class_exists('PlantUmlDiagram')) { 3 class PlantUmlDiagram { 4 private $markup; 5 private $encoded; 6 private $basePath; 7 8 public function __construct($markup,$plantUmlUrl) { 9 $this->markup = nl2br($markup); 10 $this->encoded = $this->encodep($markup); 11 $this->basePath = $plantUmlUrl; 12 } 13 14 public function getMarkup() { 15 return $this->markup; 16 } 17 18 /** 19 * Get the SVG code 20 * 21 * @return string 22 */ 23 public function getSVG() 24 { 25 return (new DokuHTTPClient())->get($this->getSVGDiagramUrl()); 26 } 27 28 public function getSVGDiagramUrl() { 29 return $this->basePath."svg/".$this->encoded; 30 } 31 32 public function getPNGDiagramUrl() { 33 return $this->basePath."png/".$this->encoded; 34 } 35 36 public function getTXTDiagramUrl() { 37 return $this->basePath."txt/".$this->encoded; 38 } 39 40 private function encodep($text) { 41 $compressed = gzdeflate($text, 9); 42 return $this->encode64($compressed); 43 } 44 45 private function encode6bit($b) { 46 if ($b < 10) { 47 return chr(48 + $b); 48 } 49 $b -= 10; 50 if ($b < 26) { 51 return chr(65 + $b); 52 } 53 $b -= 26; 54 if ($b < 26) { 55 return chr(97 + $b); 56 } 57 $b -= 26; 58 if ($b == 0) { 59 return '-'; 60 } 61 if ($b == 1) { 62 return '_'; 63 } 64 return '?'; 65 } 66 67 private function append3bytes($b1, $b2, $b3) { 68 $c1 = $b1 >> 2; 69 $c2 = (($b1 & 0x3) << 4) | ($b2 >> 4); 70 $c3 = (($b2 & 0xF) << 2) | ($b3 >> 6); 71 $c4 = $b3 & 0x3F; 72 $r = ""; 73 $r .= $this->encode6bit($c1 & 0x3F); 74 $r .= $this->encode6bit($c2 & 0x3F); 75 $r .= $this->encode6bit($c3 & 0x3F); 76 $r .= $this->encode6bit($c4 & 0x3F); 77 return $r; 78 } 79 80 private function encode64($c) { 81 $str = ""; 82 $len = strlen($c); 83 for ($i = 0; $i < $len; $i+=3) { 84 if ($i+2==$len) { 85 $str .= $this->append3bytes(ord(substr($c, $i, 1)), ord(substr($c, $i+1, 1)), 0); 86 } else if ($i+1==$len) { 87 $str .= $this->append3bytes(ord(substr($c, $i, 1)), 0, 0); 88 } else { 89 $str .= $this->append3bytes(ord(substr($c, $i, 1)), ord(substr($c, $i+1, 1)), 90 ord(substr($c, $i+2, 1))); 91 } 92 } 93 return $str; 94 } 95 } 96} 97 98?> 99