diff --git a/nur_src/v/bs3/vc/CTable.php b/nur_src/v/bs3/vc/CTable.php index c207a9d..4f66fce 100644 --- a/nur_src/v/bs3/vc/CTable.php +++ b/nur_src/v/bs3/vc/CTable.php @@ -78,6 +78,7 @@ class CTable extends ComponentPrintable implements IParametrable { "rows" => ["?iterable", null, "source des lignes à afficher"], "filter_func" => ["?callable", null, "fonction permettant de filter les éléments à afficher"], "map_func" => ["?callable", null, "fonction permettant de mapper les éléments"], + #XXX ajouter "map" qui prend directement un tableau comme celui retourné par map_func() "cols" => ["?array", null, "colonnes à extraire et à afficher"], "exclude_cols" => ["?array", null, "colonnes à exclure de la liste calculée automatiquement"], "add_cols" => ["?array", null, "colonnes à ajouter à la liste calculée automatiquement"], @@ -358,10 +359,29 @@ class CTable extends ComponentPrintable implements IParametrable { $mapCtx = $this->mapCtx; $row = $this->_currentRow($this->rowKey); if ($filterCtx !== null) { - if (!func::_call($filterCtx, [$row, $this->rowKey])) return null; + if (!func::_call($filterCtx, [$row, $this->rowKey, $this->rowIndex])) return null; + } + if ($mapCtx !== null) { + # si la valeur est séquentielle, c'est une clé dans $row + # si la valeur est associative et que c'est une fonction, elle est appelée + # avec la valeur + $result = func::_call($mapCtx, [$row, $this->rowKey, $this->rowIndex]); + $index = 0; + $mapped = []; + foreach ($result as $key => $value) { + if ($key === $index) { + $index++; + $mapped[$value] = A::get($row, $value); + } elseif (is_callable($value)) { + $mapped[$key] = func::call($value, A::get($row, $key), $key, $row, $this->rowKey, $this->rowIndex); + } else { + $mapped[$key] = $value; + } + } + $row = $mapped; + } else { + $row = $this->ensureArray($row); } - if ($mapCtx !== null) $row = func::_call($mapCtx, [$row]); - else $row = $this->ensureArray($row); return $row; } diff --git a/src/text/Word.php b/src/text/Word.php index f7506ac..7d79728 100644 --- a/src/text/Word.php +++ b/src/text/Word.php @@ -44,7 +44,7 @@ class Word { $spec = substr($spec, strlen($ms[0])); } elseif (preg_match('/^m(asc(ulin)?)?\s*:\s*/i', $spec, $ms)) { $fem = false; - $spec = substr($spec, $ms[0]); + $spec = substr($spec, strlen($ms[0])); } elseif (preg_match('/\s*\|f(?:[eé]m(?:inin)?)?\s*$/iu', $spec, $ms, PREG_OFFSET_CAPTURE)) { $fem = true; $spec = substr($spec, 0, $ms[0][1]);