Вернемся к методу extractCommands.
Он всё еще великоват по размеру и его логика теряется во множестве условных операторов. К тому же метод содержит логически обособленные блоки, которые проще воспринимать отдельными методами.
Для начала попробуем вынести блок if (hasFill).
В строке, следующей за if (hasFill) добавим:
Код AS3:
fill = getFill();
C помощью CTRL+1 создадим метод и скопируем в него содержимое блока if до else. Закомментируем скопированный участок кода и из буфера обмена вставляем код в созданный метод.
Далее по очереди проходим по подсвеченым ошибкам и решаем что делать.
startColor - объявим локально.
node - объявим аргументом функции и передадим node в вызове.
thisColor - объявим локально.
Далее заменим присвоение переменной fill значения на return. Заодно удалим участки else, поскольку они оказываются ненужными. В итоге получаем такой метод:
Код AS3:
private function getFill(node:XMLNode) : Fill {
// parse for fill color specification
// if a hex number is specified, startColor will be > 0
// if a color name is specified, startColor will be 0
var startColor:Number = getAttribute(node, "fill").indexOf("#") + 1;
if (startColor == 0) {
// name specified instead of color number
var thisColor:Number = colors[getAttribute(node, "fill")];
// if (thisColor == undefined) {
if (isNaN(thisColor)) {
return new Fill(0, 0); // set invisible if undefined
}
return new Fill(thisColor, 100);
}
return new Fill(parseInt(getAttribute(node, "fill").substr(startColor, 6), 16), 100);
}
Тестируем. Работает.
Сносим закомментированный код и этот участок кода превращается во вполне удобоваримый:
Код AS3:
if (hasFill) {
fill = getFill(node);
} else {
fill = new Fill(0xffffff, 100);
}