コード例 #1
0
 function OpenDoc_ChangeCellType(&$Txt, &$Loc, $Ope, $IsMerging, &$Value)
 {
     // change the type of a cell in an ODS file
     $Loc->PrmLst['odsok'] = true;
     // avoid the field to be processed twice
     if ($Ope === 'odsStr') {
         return true;
     }
     static $OpeLst = array('odsNum' => 'float', 'odsPercent' => 'percentage', 'odsCurr' => 'currency', 'odsBool' => 'boolean', 'odsDate' => 'date', 'odsTime' => 'time');
     $AttStr = 'office:value-type="string"';
     $AttStr_len = strlen($AttStr);
     if (!isset($OpeLst[$Ope])) {
         return false;
     }
     $t0 = clsTinyButStrong::f_Xml_FindTagStart($Txt, 'table:table-cell', true, $Loc->PosBeg, false, true);
     if ($t0 === false) {
         return false;
     }
     // error in the XML structure
     $te = strpos($Txt, '>', $t0);
     if ($te === false || $te > $Loc->PosBeg) {
         return false;
     }
     // error in the XML structure
     $len = $te - $t0 + 1;
     $tag = substr($Txt, $t0, $len);
     $p = strpos($tag, $AttStr);
     if ($p === false) {
         return false;
     }
     // error: the cell was expected to have a string contents since it contains a TBS tag.
     // replace the current string with blanck chars
     $len = $Loc->PosEnd - $Loc->PosBeg + 1;
     $Txt = substr_replace($Txt, str_repeat(' ', $len), $Loc->PosBeg, $len);
     // prepare special formating for the value
     $type = $OpeLst[$Ope];
     $att_new = 'office:value-type="' . $type . '"';
     $newfrm = false;
     switch ($type) {
         case 'float':
             $att_new .= ' office:value="[]"';
             break;
         case 'percentage':
             $att_new .= ' office:value="[]"';
             break;
         case 'currency':
             $att_new .= ' office:value="[]"';
             if (isset($Loc->PrmLst['currency'])) {
                 $att_new .= ' office:currency="' . $Loc->PrmLst['currency'] . '"';
             }
             break;
         case 'boolean':
             $att_new .= ' office:boolean-value="[]"';
             break;
         case 'date':
             $att_new .= ' office:date-value="[]"';
             $newfrm = 'yyyy-mm-ddThh:nn:ss';
             break;
         case 'time':
             $att_new .= ' office:time-value="[]"';
             $newfrm = '"PT"hh"H"nn"M"ss"S"';
             break;
     }
     // replace the sring attribute with the new attribute
     //$diff = strlen($att_new) - $AttStr_len;
     $p_att = $t0 + $p;
     $p_fld = $p_att + strpos($att_new, '[');
     // new position of the fields in $Txt
     $Txt = substr_replace($Txt, $att_new, $p_att, $AttStr_len);
     // move the TBS field
     $Loc->PosBeg = $p_fld;
     $Loc->PosEnd = $p_fld + 1;
     if ($IsMerging) {
         // the field is currently beeing merged
         if ($type === 'boolean') {
             if ($Value) {
                 $Value = 'true';
             } else {
                 $Value = 'false';
             }
         } elseif ($newfrm !== false) {
             $prm = array('frm' => $newfrm);
             $Value = $this->TBS->meth_Misc_Format($Value, $prm);
         }
         $Loc->ConvStr = false;
         $Loc->ConvProtect = false;
     } else {
         if ($newfrm !== false) {
             $Loc->PrmLst['frm'] = $newfrm;
         }
     }
 }
コード例 #2
0
 /**
  * Search a start tag of an element in the TXT contents, and return an object if it is found.
  * Instead of a TXT content, it can be an object of the class. Thus, the object is linked to a copy
  *  of the source of the parent element. The parent element can receive the changes of the object using method UpdateParent().
  */
 static function FindStartTag(&$TxtOrObj, $Tag, $PosBeg, $Forward = true)
 {
     if (is_object($TxtOrObj)) {
         $TxtOrObj->FindEndTag();
         $Txt = $TxtOrObj->GetSrc();
         if ($Txt === false) {
             return false;
         }
         $Parent =& $TxtOrObj;
     } else {
         $Txt =& $TxtOrObj;
         $Parent = false;
     }
     $PosBeg = clsTinyButStrong::f_Xml_FindTagStart($Txt, $Tag, true, $PosBeg, $Forward, true);
     if ($PosBeg === false) {
         return false;
     }
     return new clsTbsXmlLoc($Txt, $Tag, $PosBeg, null, $Parent);
 }
コード例 #3
0
 function tag_ChangeCellType(&$Txt, $Loc, $Type)
 {
     // Change the cell type. This function assumes that the current cell has a type set to String. String type is expected since the cell contains a TBS tag.
     if ($Type === 'String') {
         return true;
     }
     $t0 = clsTinyButStrong::f_Xml_FindTagStart($Txt, 'Data', true, $Loc->PosBeg, false, true);
     if ($t0 === false) {
         return false;
     }
     // error in the XML structure
     $te = strpos($Txt, '>', $t0);
     if ($te === false || $te > $Loc->PosBeg) {
         return false;
     }
     // error in the XML structure
     $len = $te - $t0 + 1;
     $tag = substr($Txt, $t0, $len);
     $len = strlen($tag);
     $att = ' ss:Type="String"';
     $att2 = ' ss:Type="' . $Type . '"';
     $tag = str_replace($att, $att2, $tag);
     $Txt = substr_replace($Txt, $tag, $t0, $len);
     $diff = strlen($tag) - $len;
     if ($diff !== 0) {
         $Loc->PosBeg += $diff;
         $Loc->PosEnd += $diff;
     }
     $this->tag_ChangeCellFormat($Loc, $Type);
     return true;
 }