original_string: private function _parse_sections($str, $media_queries = array())
      {
          // Pre-process: collapse all whitespace and strip whitespace around '>',
          // '.', ':', '+', '#'
  
          $patterns = array("/[\\s\n]+/", "/\\s+([>.:+#])\\s+/");
          $replacements = array(" ", "\\1");
          $str = preg_replace($patterns, $replacements, $str);
          $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss();
  
          $sections = explode("}", $str);
          if ($DEBUGCSS) print '[_parse_sections';
          foreach ($sections as $sect) {
              $i = mb_strpos($sect, "{");
              if ($i === false) { continue; }
  
              //$selectors = explode(",", mb_substr($sect, 0, $i));
              $selectors = preg_split("/,(?![^\(]*\))/", mb_substr($sect, 0, $i),0, PREG_SPLIT_NO_EMPTY);
              if ($DEBUGCSS) print '[section';
  
              $style = $this->_parse_properties(trim(mb_substr($sect, $i + 1)));
  
              // Assign it to the selected elements
              foreach ($selectors as $selector) {
                  $selector = trim($selector);
  
                  if ($selector == "") {
                      if ($DEBUGCSS) print '#empty#';
                      continue;
                  }
                  if ($DEBUGCSS) print '#' . $selector . '#';
                  //if ($DEBUGCSS) { if (strpos($selector,'p') !== false) print '!!!p!!!#'; }
  
                  //FIXME: tag the selector with a hash of the media query to separate it from non-conditional styles (?), xpath comments are probably not what we want to do here
                  if (count($media_queries) > 0) {
                      $style->set_media_queries($media_queries);
                  }
                  $this->add_style($selector, $style);
              }
  
              if ($DEBUGCSS) {
                  print 'section]';
              }
          }
  
          if ($DEBUGCSS) {
              print '_parse_sections]';
          }
      }
code: private function _parse_sections($str, $media_queries = array())
      {
          // Pre-process: collapse all whitespace and strip whitespace around '>',
          // '.', ':', '+', '#'
  
          $patterns = array("/[\\s\n]+/", "/\\s+([>.:+#])\\s+/");
          $replacements = array(" ", "\\1");
          $str = preg_replace($patterns, $replacements, $str);
          $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss();
  
          $sections = explode("}", $str);
          if ($DEBUGCSS) print '[_parse_sections';
          foreach ($sections as $sect) {
              $i = mb_strpos($sect, "{");
              if ($i === false) { continue; }
  
              //$selectors = explode(",", mb_substr($sect, 0, $i));
              $selectors = preg_split("/,(?![^\(]*\))/", mb_substr($sect, 0, $i),0, PREG_SPLIT_NO_EMPTY);
              if ($DEBUGCSS) print '[section';
  
              $style = $this->_parse_properties(trim(mb_substr($sect, $i + 1)));
  
              // Assign it to the selected elements
              foreach ($selectors as $selector) {
                  $selector = trim($selector);
  
                  if ($selector == "") {
                      if ($DEBUGCSS) print '#empty#';
                      continue;
                  }
                  if ($DEBUGCSS) print '#' . $selector . '#';
                  //if ($DEBUGCSS) { if (strpos($selector,'p') !== false) print '!!!p!!!#'; }
  
                  //FIXME: tag the selector with a hash of the media query to separate it from non-conditional styles (?), xpath comments are probably not what we want to do here
                  if (count($media_queries) > 0) {
                      $style->set_media_queries($media_queries);
                  }
                  $this->add_style($selector, $style);
              }
  
              if ($DEBUGCSS) {
                  print 'section]';
              }
          }
  
          if ($DEBUGCSS) {
              print '_parse_sections]';
          }
      }
code_tokens: private function _parse_sections ( $ str , $ media_queries = array ( ) ) { // Pre-process: collapse all whitespace and strip whitespace around '>', // '.', ':', '+', '#' $ patterns = array ( "/[\\s\n]+/" , "/\\s+([>.:+#])\\s+/" ) ; $ replacements = array ( " " , "\\1" ) ; $ str = preg_replace ( $ patterns , $ replacements , $ str ) ; $ DEBUGCSS = $ this -> _dompdf -> getOptions ( ) -> getDebugCss ( ) ; $ sections = explode ( "}" , $ str ) ; if ( $ DEBUGCSS ) print '[_parse_sections' ; foreach ( $ sections as $ sect ) { $ i = mb_strpos ( $ sect , "{" ) ; if ( $ i === false ) { continue ; } //$selectors = explode(",", mb_substr($sect, 0, $i)); $ selectors = preg_split ( "/,(?![^\(]*\))/" , mb_substr ( $ sect , 0 , $ i ) , 0 , PREG_SPLIT_NO_EMPTY ) ; if ( $ DEBUGCSS ) print '[section' ; $ style = $ this -> _parse_properties ( trim ( mb_substr ( $ sect , $ i + 1 ) ) ) ; // Assign it to the selected elements foreach ( $ selectors as $ selector ) { $ selector = trim ( $ selector ) ; if ( $ selector == "" ) { if ( $ DEBUGCSS ) print '#empty#' ; continue ; } if ( $ DEBUGCSS ) print '#' . $ selector . '#' ; //if ($DEBUGCSS) { if (strpos($selector,'p') !== false) print '!!!p!!!#'; } //FIXME: tag the selector with a hash of the media query to separate it from non-conditional styles (?), xpath comments are probably not what we want to do here if ( count ( $ media_queries ) > 0 ) { $ style -> set_media_queries ( $ media_queries ) ; } $ this -> add_style ( $ selector , $ style ) ; } if ( $ DEBUGCSS ) { print 'section]' ; } } if ( $ DEBUGCSS ) { print '_parse_sections]' ; } }
docstring: parse selector + rulesets
  
  @param string $str CSS selectors and rulesets
  @param array $media_queries
docstring_tokens: parse selector + rulesets