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]; }
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]; }