コード例 #1
0
 static function extractListOptions($rawArgs)
 {
     $name = trim(array_shift($rawArgs));
     // remove first element, since this is the counter name
     if ($name === "") {
         $name = self::$prevName;
         // not set? get previous
     } else {
         self::$prevName = $name;
         // is set? set as previous for next usage
     }
     if (!isset(self::$lists[$name])) {
         self::$lists[$name] = array();
     }
     foreach ($rawArgs as $rawArg) {
         //Convert args with "=" into an array of options
         $pair = explode('=', self::$frame->expand($rawArg), 2);
         if (count($pair) === 2) {
             $param = trim($pair[0]);
             //Convert to lower case so it is case-insensitive
             $value = trim($pair[1]);
             switch ($param) {
                 case wfMessage('ext-numeralpha-list-type-label')->text():
                     if (isset(self::$listTypes[$value])) {
                         self::$lists[$name]['type'] = self::$listTypes[$value];
                     }
                     break;
                 case wfMessage('ext-numeralpha-list-set-label')->text():
                     $newCountValue = intVal($value);
                     break;
                 case wfMessage('ext-numeralpha-list-pad-length')->text():
                     self::$lists[$name]['padlength'] = intVal($value);
                     break;
                 case wfMessage('ext-numeralpha-list-pad-char')->text():
                     self::$lists[$name]['padchar'] = $value;
                     break;
                 case wfMessage('ext-numeralpha-list-prefix')->text():
                     self::$lists[$name]['prefix'] = $value;
                     break;
                 case wfMessage('ext-numeralpha-list-suffix')->text():
                     self::$lists[$name]['suffix'] = $value;
                     break;
             }
         }
     }
     // either set count value or increment existing value
     if (isset($newCountValue)) {
         self::$lists[$name]['count'] = $newCountValue;
     } else {
         if (isset(self::$lists[$name]['count'])) {
             self::$lists[$name]['count']++;
         } else {
             self::$lists[$name]['count'] = 1;
         }
     }
     // set default list type if not already set
     if (!isset(self::$lists[$name]['type'])) {
         self::$lists[$name]['type'] = 'numeral';
     }
     // set pad length and character for numeral type only
     if (self::$lists[$name]['type'] === 'numeral') {
         // set default pad length if not already set
         if (!isset(self::$lists[$name]['padlength'])) {
             self::$lists[$name]['padlength'] = 1;
         }
         // set default pad character if not already set
         if (!isset(self::$lists[$name]['padchar'])) {
             self::$lists[$name]['padchar'] = '0';
         }
     }
     // set list counter prefix and suffix character(s)
     if (!isset(self::$lists[$name]['prefix'])) {
         self::$lists[$name]['prefix'] = '';
     }
     if (!isset(self::$lists[$name]['suffix'])) {
         self::$lists[$name]['suffix'] = '';
     }
     return self::$lists[$name];
 }
コード例 #2
0
 static function extractListOptions($rawArgs)
 {
     $name = trim(array_shift($rawArgs));
     // remove first element, since this is the counter name
     if ($name === "") {
         $name = self::$prevName;
         // not set? get previous
     } else {
         self::$prevName = $name;
         // is set? set as previous for next usage
     }
     if (!isset(self::$lists[$name])) {
         self::$lists[$name] = array('levels' => array());
     }
     foreach ($rawArgs as $rawArg) {
         //Convert args with "=" into an array of options
         $pair = explode('=', self::$frame->expand($rawArg), 2);
         if (count($pair) === 2) {
             $param = trim($pair[0]);
             //Convert to lower case so it is case-insensitive
             $value = trim($pair[1]);
             switch ($param) {
                 case wfMessage('ext-numeralpha-list-type-label')->text():
                     if (isset(self::$listTypes[$value])) {
                         //self::$lists[ $name ][ 'type' ]
                         $newType = self::$listTypes[$value];
                     }
                     break;
                 case wfMessage('ext-numeralpha-list-set-label')->text():
                     $newCountValue = intVal($value);
                     if ($newCountValue < 1) {
                         $newCountValue = 1;
                     }
                     break;
                 case wfMessage('ext-numeralpha-list-pad-length')->text():
                     $newPadlength = intVal($value);
                     break;
                 case wfMessage('ext-numeralpha-list-pad-char')->text():
                     $newPadchar = $value;
                     break;
                 case wfMessage('ext-numeralpha-list-prefix')->text():
                     self::$lists[$name]['prefix'] = $value;
                     break;
                 case wfMessage('ext-numeralpha-list-suffix')->text():
                     self::$lists[$name]['suffix'] = $value;
                     break;
                 case wfMessage('ext-numeralpha-list-level-label')->text():
                     self::$lists[$name]['level'] = intVal($value);
                     break;
                 case wfMessage('ext-numeralpha-list-level-prefix-label')->text():
                     self::$lists[$name]['level prefix'] = $value;
                     break;
                 case wfMessage('ext-numeralpha-list-format-label')->text():
                     if ($value === wfMessage('ext-numeralpha-list-format-outline')->text()) {
                         self::$lists[$name]['format'] = 'outline';
                     } else {
                         self::$lists[$name]['format'] = 'standard';
                     }
                     break;
                 case wfMessage('ext-numeralpha-list-format-outline-glue')->text():
                     self::$lists[$name]['glue'] = $value;
                     break;
             }
         }
     }
     // if level not specifed, use the previous level if there is one
     if (!isset(self::$lists[$name]['level'])) {
         if (isset(self::$lists[$name]['prev-level'])) {
             self::$lists[$name]['level'] = self::$lists[$name]['prev-level'];
         } else {
             // otherwise set level to 1
             self::$lists[$name]['level'] = 1;
         }
     }
     self::$lists[$name]['prev-level'] = self::$lists[$name]['level'];
     // if user inputs level 1, equates to array index zero
     $levelIndex = self::$lists[$name]['level'] - 1;
     // if level has been used before (and hasn't been reset due to lower
     // level being used) then increase the count on this level
     if (isset(self::$lists[$name]['levels'][$levelIndex])) {
         self::$lists[$name]['levels'][$levelIndex]['count']++;
     }
     /** this is addressed by the for loop below
     		else {
     			// @todo FIXME this shoudln't be necessary
     			self::$lists[ $name ][ 'levels' ][ $levelIndex ] = array( 'count' => 1);
     		}
     		*/
     // Make sure all levels are set. Fill in blanks with 1.
     // Is this excessive?
     for ($i = 0; $i <= $levelIndex; $i++) {
         if (!isset(self::$lists[$name]['levels'][$i])) {
             self::$lists[$name]['levels'][$i] = array('count' => 1, 'type' => 'numeral', 'padlength' => '1', 'padchar' => '0');
         }
     }
     //print_r(self::$lists[ $name ][ 'levels' ]);
     // if indices exist beyond the desired level, cut the array of levels
     // down just to the zeroth index through the desired index
     /** replaced by the for loop below
     		if ( isset( self::$lists[ $name ][ 'levels' ][ $levelIndex + 1 ] ) ) {
     			self::$lists[ $name ][ 'levels' ] = array_slice(
     				self::$lists[ $name ][ 'levels' ],
     				0,
     				self::$lists[ $name ][ 'level' ] // AKA $levelIndex + 1
     			);
     		}
     		*/
     for ($i = self::$lists[$name]['level']; $i < count(self::$lists[$name]['levels']); $i++) {
         self::$lists[$name]['levels'][$i]['count'] = 0;
     }
     // despite all the level-working above, if user has specified a new
     // count value, override:
     if (isset($newCountValue)) {
         self::$lists[$name]['levels'][$levelIndex]['count'] = $newCountValue;
     }
     // set new type if necessary
     if (isset($newType)) {
         self::$lists[$name]['levels'][$levelIndex]['type'] = $newType;
     }
     /** fixed in the for loop  that fills out missing levels
     		elseif ( ! isset( self::$lists[ $name ][ 'levels' ][ $levelIndex ][ 'type' ] ) ) {
     			self::$lists[ $name ][ 'levels' ][ $levelIndex ][ 'type' ] = 'numeral';
     		}
     		*/
     // set pad length and character for numeral type only
     if (self::$lists[$name]['levels'][$levelIndex]['type'] === 'numeral') {
         // set default pad length if not already set
         if (isset($newPadlength)) {
             self::$lists[$name]['levels'][$levelIndex]['padlength'] = $newPadlength;
         } elseif (!isset(self::$lists[$name]['levels'][$levelIndex]['padlength'])) {
             self::$lists[$name]['levels'][$levelIndex]['padlength'] = 1;
         }
         // set default pad character if not already set
         if (isset($newPadchar)) {
             self::$lists[$name]['levels'][$levelIndex]['padchar'] = $newPadchar;
         } elseif (!isset(self::$lists[$name]['levels'][$levelIndex]['padchar'])) {
             self::$lists[$name]['levels'][$levelIndex]['padchar'] = '0';
         }
     }
     // set list counter prefix, suffix, and glue character(s)
     if (!isset(self::$lists[$name]['prefix'])) {
         self::$lists[$name]['prefix'] = '';
     }
     if (!isset(self::$lists[$name]['suffix'])) {
         self::$lists[$name]['suffix'] = '';
     }
     if (!isset(self::$lists[$name]['glue'])) {
         self::$lists[$name]['glue'] = '.';
     }
     // level prefix = string applied before counter, x times per level
     if (!isset(self::$lists[$name]['level prefix'])) {
         self::$lists[$name]['level prefix'] = '';
     }
     self::$lists[$name]['full level prefix'] = str_repeat(self::$lists[$name]['level prefix'], self::$lists[$name]['level']);
     return self::$lists[$name];
 }