Adds a th cell with a colspan that ends where the next known cell begins.

@param string $rowName
Row name, group or range.
@param string $colName
Column name, group or range.
@param string $content
HTML cell content.

@return $this
@throws \Exception
16976
function thOpenEnd($rowName, $colName, $content) {
    return $this->tbody->thOpenEnd($rowName, $colName, $content);
  }
1307512
function tdOpenEnd($rowName, $colName, $content) {
    $this->cellContents[$rowName][$colName] = $content;
    $this->openEndCells[$rowName][$colName] = true;
    return $this;
  }
1346747
public function appendContent($content)
    {
        if ($this->isVoid) {
            throw new Exception\RuntimeException(
                'Void elements can\'t contain content.'
            );
        }

        $this->content .= $content;

        return $this;
    }
610559
public function add(string $content, array $options = [])
    {
        $options = array_intersect_key($options, self::$columns_options_def) + self::$columns_options_def;
        $options['content'] = $content;

        $this->columns[] = $options;

        return $this;
    }
1305931
protected function renderRowGroup($groups, $index, $colspan)
    {
        if ($groups && isset($groups[$index])) {
            foreach ($groups[$index] as $grow) {
                if ($this->paging) {
                    $grow[3] = "display:none;" . $grow[3];
                }
                echo "<tr from='$grow[0]' to='$grow[1]' class='row-group" . ($grow[4] ? " $grow[4]" : "") . "' " . ($grow[3] ? "style='$grow[3]'" : "") . ">";
                if (strpos($grow[2], "<td") === 0) {
                    echo $grow[2];
                } else {
                    echo "<td colspan='$colspan'>$grow[2]</td>";
                }
                echo "</tr>";
            }
        }
    }
1240742
public function setRowSpan($rowSpan)
    {
        Expect::int($rowSpan);

        $this->attributes->set('rowspan', $rowSpan);

        return $this;
    }
1365430
public function tableCell($content, array $options = [])
    {
        return $this->formatTemplate('tablecell', [
            'attrs' => $this->templater()->formatAttributes($options),
            'content' => $content
        ]);
    }
699830
public function addElement($elementName, $content, $attributes = null)
    {
        $this->elements[$elementName]['name'] = $elementName;
        $this->elements[$elementName]['content'] = $content;
        $this->elements[$elementName]['attributes'] = $attributes;
    }
407235
private function addCell($column, $data, $row, $header = false) {
        $c = $this->rowDefinition[$column];
        $data = $this->fetchDataByUserFunc($c, $data, $column, $row, $header, false);
        if ($this->trigger(self::EV_CELL_ADD, [$column, $data, $c, $row, $header]) === false) {
            $data = '';
        }
        if ($this->drawByUserFunc($data, $column, $row, $header) === false) {
            $h = $this->getRowHeight();
            if ((!$header && $c['isMultiLine']) || ($header && $c['isMultiLineHeader'])) {
                // for multicell, if maxh = null, set it to cell's height, so
                // vertical alignment can work
                $y = $this->pdf->GetY();
                if ($c['valign'] === 'M' && $c['isHtml'] && $this->rowDefinition['_content'][$column] < $h) {
                    // try to center vertically the best way we can the cell
                    // when it's html content
                    $pos = $y + (($h - $this->rowDefinition['_content'][$column]) / 2);
                    $h = $this->rowDefinition['_content'][$column];
                    $c['x'] = $this->pdf->GetX();
                    $c['y'] = $pos;
                }

                $this->pdf->MultiCell($c['width'], $h, $data, $c['border'],
                    $c['align'], $c['fill'], $c['ln'], $c['x'], $c['y'],
                    $c['reseth'], $c['stretch'], $c['isHtml'],
                    $c['autoPadding'], $c['maxh'] === null ? $h : $c['maxh'],
                    $c['valign'], $c['fitcell']);

                if ($c['isHtml']) {
                    // reset position after drawing the multicell html content
                    $x = $this->pdf->GetX();
                    $this->pdf->SetY($y);
                    $this->pdf->SetX($x);
                }
            } else {
                $this->pdf->Cell($c['width'], $h, $data, $c['border'],
                    $c['ln'], $c['align'], $c['fill'], $c['link'],
                    $c['stretch'], $c['ignoreHeight'], $c['calign'],
                    $c['valign']);
            }
        }
        $this->trigger(self::EV_CELL_ADDED, [$column, $data, $c, $row, $header]);
        return $this;
    }
895057
function setColspan($colspan) {
    if ($colspan === $this->colspan) {
      // Nothing to do.
      return $this;
    }
    $clone = $this->setAttribute('colspan', $colspan > 1 ? $colspan : null);
    $clone->colspan = $colspan;
    return $clone;
  }
668963
public function add($content)
    {
        // Load
        $json = $this->load();

        // Create JSON elements Array:
        foreach ($content["elements"] as $key => $value) {
            // delete columns and labels of irre-fields from elements
            if ($key == "columns" || $key == "labels") {
                foreach ($value as $index => $column) {
                    if (!$content["tca"][$index]["inlineParent"]) {
                        $contentColumns[] = $column;
                    } else {
                        unset($value[$index]);
                        unset($value[$index]);
                    }
                    if ($key === 'labels'
                        && empty($column)
                        && isset($json[$content['type']]['tca'][$content['elements']['columns'][$index]])
                    ) {
                        // If using a mask field with empty label, we have to set the "default" label
                        $label = '';
                        foreach ($json[$content['type']]['elements'] as $element) {
                            if (in_array($content['elements']['columns'][$index], $element['columns'], true)) {
                                $i = array_search($content['elements']['columns'][$index], $element['columns'], true);
                                if (!empty($element['labels'][$i])) {
                                    $label = $element['labels'][$i];
                                    break;
                                }
                            }
                        }
                        $value[$index] = $label;
                    }
                }
            }
            $json[$content["type"]]["elements"][$content["elements"]["key"]][$key] = $value;
        }

        $contentColumns = array();
        $columns = array();

        // delete columns and labels of irre-fields from elements
        if ($content["elements"]["columns"]) {
            foreach ($content["elements"]["columns"] as $index => $column) {
                if (!$content["tca"][$index]["inlineParent"]) {
                    $contentColumns[] = $column;
                } else {
                    unset($content["elements"]["columns"][$index]);
                    unset($content["elements"]["labels"][$index]);
                }
                $columns[] = $column;
            }
        }

        // Create JSON sql Array:
        if (is_array($content["sql"])) {
            foreach ($content["sql"] as $table => $sqlArray) {
                foreach ($sqlArray as $index => $type) {
                    $fieldname = "tx_mask_" . $columns[$index];
                    $json[$table]["sql"][$fieldname][$table][$fieldname] = $type;
                }
            }
        }

        // Create JSON tca Array:
        if (is_array($content["tca"])) {


            foreach ($content["tca"] as $key => $value) {
                $inlineField = false;

                // if this field is inline-field
                if ($value["inlineParent"]) {
                    $type = $value["inlineParent"];
                    $inlineField = true;
                } else {
                    $type = $content["type"];
                }

                $json[$type]["tca"][$columns[$key]] = $value;

                // add rte flag if inline and rte
                if ($inlineField) {
                    if ($content["elements"]["options"][$key] == "rte") {
                        $json[$type]["tca"][$columns[$key]]["rte"] = "1";
                    }
                }

                // Only add columns to elements if it is no inlinefield
                if (!$inlineField) {
                    $json[$type]["elements"][$content["elements"]["key"]]["columns"][$key] = "tx_mask_" . $columns[$key];
                }
                $json[$type]["tca"]["tx_mask_" . $columns[$key]] = $json[$type]["tca"][$columns[$key]];
                $json[$type]["tca"]["tx_mask_" . $columns[$key]]["key"] = $columns[$key];

                if ($inlineField) {
                    $json[$type]["tca"]["tx_mask_" . $columns[$key]]["order"] = $key;
                }

                unset($json[$type]["tca"][$columns[$key]]);
            }
        }

        // sort content elements by key before saving
        $this->sortJson($json);
        $this->write($json);
    }
392789
public function addElement($col, $name = null) {
		// Width
		if (is_int($col)) {
			$col = new TableCol([self::ATTR_WIDTH => $col . '%']);
		}
		// Attributes or class
		else if (is_array($col) || is_string($col)) {
			$col = new TableCol($col);
		}
		// Instance
		else if (! $col instanceof TableCol) {
			throw new Exception('Element must be an instance of the TableCol or a array or a string');
		}
		
		return parent::addElement($col, $name);
	}
1105894
public function orIsNull(string $columnName)
    {
        $this->addCondition('OR', $this->dialect()->quoteName($columnName) . ' IS NULL');

        return $this;
    }
785632
public function orderByDesc(string $columnName) : OneToManyRelationDefiner
    {
        $this->orderByColumnNameDirectionMap[$columnName] = Ordering::DESC;

        return $this;
    }
231611
public void addTemplate( int row,
                             int column,
                             String content ) {
        if ( this.sourceBuilder == null ) {
            throw new DecisionTableParseException(
                    "Unexpected content \"" + content + "\" in cell " +
                            RuleSheetParserUtil.rc2name( row, column ) + ", leave this cell blank" );
        }
        this.sourceBuilder.addTemplate( row, column, content );
    }
354389
public function addRowNameIfNotExists($rowName) {
    if (!isset($this->rows[$rowName])) {
      $this->rowNames[] = $rowName;
      $this->rows[$rowName] = $this->iRow++;
    }
    return $this;

  }
716107
public function setColspan($colspan)
    {
        if (is_int($colspan) === true) {
            $this->colspan = $colspan;
        } else {
            $msg = "The 'colspan' argument must be an integer, '" . gettype($colspan) . "' given.";
            throw new InvalidArgumentException($msg);
        }
    }