original_string: public function forms()
      {
          if (null === $this->forms) {
              $header = $this->header();
  
              // Call event to allow filling the page header form dynamically (e.g. use case: Comments plugin)
              $grav = Grav::instance();
              $grav->fireEvent('onFormPageHeaderProcessed', new Event(['page' => $this, 'header' => $header]));
  
              $rules = $header->rules ?? null;
              if (!\is_array($rules)) {
                  $rules = [];
              }
  
              $forms = [];
  
              // First grab page.header.form
              $form = $this->normalizeForm($header->form ?? null, null, $rules);
              if ($form) {
                  $forms[$form['name']] = $form;
              }
  
              // Append page.header.forms (override singular form if it clashes)
              $headerForms = $header->forms ?? null;
              if (\is_array($headerForms)) {
                  foreach ($headerForms as $name => $form) {
                      $form = $this->normalizeForm($form, $name, $rules);
                      if ($form) {
                          $forms[$form['name']] = $form;
                      }
                  }
              }
  
              $this->forms = $forms;
          }
  
          return $this->forms;
      }
code: public function forms()
      {
          if (null === $this->forms) {
              $header = $this->header();
  
              // Call event to allow filling the page header form dynamically (e.g. use case: Comments plugin)
              $grav = Grav::instance();
              $grav->fireEvent('onFormPageHeaderProcessed', new Event(['page' => $this, 'header' => $header]));
  
              $rules = $header->rules ?? null;
              if (!\is_array($rules)) {
                  $rules = [];
              }
  
              $forms = [];
  
              // First grab page.header.form
              $form = $this->normalizeForm($header->form ?? null, null, $rules);
              if ($form) {
                  $forms[$form['name']] = $form;
              }
  
              // Append page.header.forms (override singular form if it clashes)
              $headerForms = $header->forms ?? null;
              if (\is_array($headerForms)) {
                  foreach ($headerForms as $name => $form) {
                      $form = $this->normalizeForm($form, $name, $rules);
                      if ($form) {
                          $forms[$form['name']] = $form;
                      }
                  }
              }
  
              $this->forms = $forms;
          }
  
          return $this->forms;
      }
code_tokens: public function forms ( ) { if ( null === $ this -> forms ) { $ header = $ this -> header ( ) ; // Call event to allow filling the page header form dynamically (e.g. use case: Comments plugin) $ grav = Grav :: instance ( ) ; $ grav -> fireEvent ( 'onFormPageHeaderProcessed' , new Event ( [ 'page' => $ this , 'header' => $ header ] ) ) ; $ rules = $ header -> rules ?? null ; if ( ! \ is_array ( $ rules ) ) { $ rules = [ ] ; } $ forms = [ ] ; // First grab page.header.form $ form = $ this -> normalizeForm ( $ header -> form ?? null , null , $ rules ) ; if ( $ form ) { $ forms [ $ form [ 'name' ] ] = $ form ; } // Append page.header.forms (override singular form if it clashes) $ headerForms = $ header -> forms ?? null ; if ( \ is_array ( $ headerForms ) ) { foreach ( $ headerForms as $ name => $ form ) { $ form = $ this -> normalizeForm ( $ form , $ name , $ rules ) ; if ( $ form ) { $ forms [ $ form [ 'name' ] ] = $ form ; } } } $ this -> forms = $ forms ; } return $ this -> forms ; }
docstring: Returns normalized list of name => form pairs.
  
  @return array
docstring_tokens: Returns normalized list of name = > form pairs .