Changeset 75146 in spip-zone
- Timestamp:
- Aug 30, 2013, 9:12:02 PM (8 years ago)
- Location:
- _galaxie_/code.spip.net/autodoc/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
_galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/TwigZora.php
r75131 r75146 14 14 use Zend\Config\Factory; 15 15 use Zend\Config\Config; 16 use dflydev\markdown\MarkdownExtraParser; 17 16 18 17 19 /** … … 150 152 public function getFilters() 151 153 { 154 $parser = new MarkdownExtraParser(); 155 152 156 return array( 157 /** 158 * Surcharge du filtre fournit par twig pour corriger quelques usages 159 */ 160 'markdown' => new \Twig_SimpleFilter('markdown', 161 function ($value) use ($parser) { 162 163 $value = TwigZora::prepare_markdown($value); 164 return $parser->transform($value); 165 } 166 ), 153 167 /** 154 168 * Trier des éléments d'une Collection selon une demande … … 392 406 ), 393 407 ); 408 } 409 410 411 412 413 414 /** 415 * Prépare le texte au passage dans markdown 416 * 417 * - Homogénéise l'indentation du texte. On enlève l'indentation 418 * de chaque ligne. Sauf la première ligne : en effet, phpdocumentor 419 * effectue un trim() sur l'ensemble du texte, ce qui enlève les 420 * espacements sur cette première ligne. 421 * 422 * - Indente le contenu intérieur d'un code (commence par ``` et fini 423 * par ```) en sautant une ligne et en enlevant les ``` 424 * 425 * @param string $texte Le texte à préparer 426 * @return string Texte modifié 427 **/ 428 public static function prepare_markdown($texte) { 429 430 // pas de saut de ligne = rien à faire 431 if (false === strpos($texte, "\n")) { 432 return $texte; 433 } 434 435 // 1) 436 // on essaie de calculer le nombre d'espacements à gauche des lignes 437 // pour les enlever. Pour cela, il ne faut pas tenir compte de la 438 // première ligne, car phpdocumentor effectue un trim() 439 $texte = explode("\n", $texte); 440 $espace = 10; 441 foreach ($texte as $k => $t) { 442 if ($k) { 443 $esp = strlen($t) - strlen(ltrim($t)); 444 $espace = min($espace, $esp); 445 } 446 } 447 448 // on a ici normalement l'espace minimum. 449 // on enlève cet espacement sur chaque ligne 450 if ($espace) { 451 foreach ($texte as $k => $t) { 452 if (strlen($t) - strlen(ltrim($t)) > 0) { 453 $texte[$k] = substr($t, $espace); 454 } 455 } 456 } 457 458 // 2) 459 // A) gerer un peu les codes 460 // 461 // Le problème se pose avec les tags, pas vraiment avec 462 // une description de fonction qui peut se satisfaire d'un 463 // décallage de 4 espaces. 464 // 465 // Cependant, dans un tag, par exemple @example, si l'on veut 466 // commencer directement par le code, cela ne fonctionne pas car 467 // on ne sait pas qu'il y a une indentation 468 // 469 // B) On gère également les listes avec * ou - 470 // 471 // Si une ligne (hors bloc de code) commence par * ou - 472 // et que la ligne précédente n'est pas vide ou n'est pas une liste 473 // alors on ajoute une ligne vide… 474 $is_code = false; 475 $new_texte = array(); 476 477 foreach ($texte as $k => $t) { 478 $ligne = ltrim($t); 479 480 if (!$is_code) { 481 $debut = substr($ligne,0,3); 482 // du code qui commence ? 483 if ($debut === '```') { 484 $is_code = true; 485 $esp = substr($t,0,strlen($t) - strlen($ligne)); 486 $new_texte[] = "\n\n" . $esp . substr($ligne, 3); 487 } 488 // sinon… du texte 489 else { 490 if ($k and $ligne and ($ligne[0] == '-' OR $ligne[0] == '*') 491 and ($prev = trim($texte[$k-1])) 492 and ($prev[0] != '-' AND $prev[0] != '*')) { 493 $new_texte[] = ""; 494 } 495 $new_texte[] = $t; 496 } 497 } 498 // que du code… à indenter 499 else { 500 $t = ' ' . $t; 501 if (substr(rtrim($t),-3) === '```') { 502 $new_texte[] = substr(rtrim($t),0,-3) . "\n"; 503 $is_code = false; 504 } else { 505 $new_texte[] = $t; 506 } 507 } 508 } 509 $texte = $new_texte; 510 511 $texte = implode("\n", $texte); 512 return $texte; 394 513 } 395 514 -
_galaxie_/code.spip.net/autodoc/trunk/templates/zora/inclure/descriptions/functions.twig
r75141 r75146 73 73 74 74 {% if argument.description %} 75 <div class="description">{{argument.description| raw }}</div>75 <div class="description">{{argument.description|markdown|raw }}</div> 76 76 {% endif %} 77 77 </div><!-- .param -->
Note: See TracChangeset
for help on using the changeset viewer.