1<?php 2 3require_once(HTML2PS_DIR.'value.generic.php'); 4 5class MarginSideValue { 6 var $value; 7 var $auto; 8 var $percentage; 9 var $_units; 10 11 function calc($base, $base_font_size = 0) { 12 if (!is_null($this->percentage)) { 13 return $base * $this->percentage / 100; 14 } else { 15 return $this->_units->toPt($base_font_size); 16 }; 17 } 18 19 function calcPercentage($base) { 20 if (is_null($this->percentage)) { 21 return; 22 }; 23 24 $this->value = $base * $this->percentage / 100; 25 } 26 27 function ©() { 28 $value =& new MarginSideValue; 29 $value->value = $this->value; 30 $value->auto = $this->auto; 31 $value->percentage = $this->percentage; 32 $value->_units = $this->_units; 33 return $value; 34 } 35 36 function is_default() { 37 return 38 $this->value == 0 && 39 !$this->auto && 40 !$this->percentage; 41 } 42 43 function init($data) { 44 $len = strlen($data); 45 $is_percentage = false; 46 if ($len > 0) { 47 $is_percentage = ($data{$len-1} === '%'); 48 }; 49 50 $value = new MarginSideValue; 51 $value->_units = Value::fromString($data); 52 $value->value = $data; 53 $value->percentage = $is_percentage ? (int)($data) : null; 54 $value->auto = $data === 'auto'; 55 56 return $value; 57 } 58 59 function units2pt($base) { 60 if (is_null($this->percentage)) { 61 $this->value = $this->_units->toPt($base); 62 }; 63 } 64} 65 66class MarginValue extends CSSValue { 67 var $top; 68 var $bottom; 69 var $left; 70 var $right; 71 72 function doInherit(&$state) { 73 if ($this->top === CSS_PROPERTY_INHERIT) { 74 $value = $state->getInheritedProperty(CSS_MARGIN_TOP); 75 $this->top = $value->copy(); 76 }; 77 78 if ($this->bottom === CSS_PROPERTY_INHERIT) { 79 $value = $state->getInheritedProperty(CSS_MARGIN_BOTTOM); 80 $this->bottom = $value->copy(); 81 }; 82 83 if ($this->right === CSS_PROPERTY_INHERIT) { 84 $value = $state->getInheritedProperty(CSS_MARGIN_RIGHT); 85 $this->right = $value->copy(); 86 }; 87 88 if ($this->left === CSS_PROPERTY_INHERIT) { 89 $value = $state->getInheritedProperty(CSS_MARGIN_LEFT); 90 $this->left = $value->copy(); 91 }; 92 } 93 94 function ©() { 95 $value =& new MarginValue; 96 $value->top = ($this->top === CSS_PROPERTY_INHERIT) ? CSS_PROPERTY_INHERIT : $this->top->copy(); 97 $value->bottom = ($this->bottom === CSS_PROPERTY_INHERIT) ? CSS_PROPERTY_INHERIT : $this->bottom->copy(); 98 $value->left = ($this->left === CSS_PROPERTY_INHERIT) ? CSS_PROPERTY_INHERIT : $this->left->copy(); 99 $value->right = ($this->right === CSS_PROPERTY_INHERIT) ? CSS_PROPERTY_INHERIT : $this->right->copy(); 100 return $value; 101 } 102 103 function init($data) { 104 $value = new MarginValue; 105 $value->top = MarginSideValue::init($data[0]); 106 $value->right = MarginSideValue::init($data[1]); 107 $value->bottom = MarginSideValue::init($data[2]); 108 $value->left = MarginSideValue::init($data[3]); 109 return $value; 110 } 111 112 function is_default() { 113 return 114 $this->left->is_default() && 115 $this->right->is_default() && 116 $this->top->is_default() && 117 $this->bottom->is_default(); 118 } 119 120 function units2pt($base) { 121 $this->top->units2pt($base); 122 $this->bottom->units2pt($base); 123 $this->left->units2pt($base); 124 $this->right->units2pt($base); 125 } 126 127 function calcPercentages($base) { 128 $this->top->calcPercentage($base); 129 $this->bottom->calcPercentage($base); 130 $this->left->calcPercentage($base); 131 $this->right->calcPercentage($base); 132 } 133} 134 135?>