<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: FontLoader v. 2.1</title>
	<atom:link href="http://etcs.ru/blog/as3/fontloader_2_1/feed/" rel="self" type="application/rss+xml" />
	<link>http://etcs.ru/blog/as3/fontloader_2_1/</link>
	<description></description>
	<lastBuildDate>Fri, 04 May 2012 10:39:26 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: etc</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-20505</link>
		<dc:creator>etc</dc:creator>
		<pubDate>Tue, 02 Feb 2010 06:10:58 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-20505</guid>
		<description>FontLoader, в общем, вам не подойдет.</description>
		<content:encoded><![CDATA[<p>FontLoader, в общем, вам не подойдет.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vitaliy</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-20504</link>
		<dc:creator>Vitaliy</dc:creator>
		<pubDate>Tue, 02 Feb 2010 06:06:10 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-20504</guid>
		<description>Витянуть значит экспортировать. Говарю сразу такие экспортери как Sothnic SWF Decompiler экспортируют шрифт только в еще одну swf, а толку от этого никакова. Мне нужен шрифт именно в ttf формате или ином юзабельном формате. 
Извиняюсь про Fontloader я невнимательно прочел, как я понимаю это какаето библиотека класов что ли.</description>
		<content:encoded><![CDATA[<p>Витянуть значит экспортировать. Говарю сразу такие экспортери как Sothnic SWF Decompiler экспортируют шрифт только в еще одну swf, а толку от этого никакова. Мне нужен шрифт именно в ttf формате или ином юзабельном формате.<br />
Извиняюсь про Fontloader я невнимательно прочел, как я понимаю это какаето библиотека класов что ли.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: etc</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-20502</link>
		<dc:creator>etc</dc:creator>
		<pubDate>Tue, 02 Feb 2010 02:03:54 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-20502</guid>
		<description>Это не программа. И что значит «вытянуть»?</description>
		<content:encoded><![CDATA[<p>Это не программа. И что значит «вытянуть»?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vitaliy</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-20501</link>
		<dc:creator>Vitaliy</dc:creator>
		<pubDate>Mon, 01 Feb 2010 20:49:08 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-20501</guid>
		<description>Скажите пожалуста эта прога может витянуть встроеный шрифт из swf-ки. Если нет, то не подскажите случайно чем это можна сделать.</description>
		<content:encoded><![CDATA[<p>Скажите пожалуста эта прога может витянуть встроеный шрифт из swf-ки. Если нет, то не подскажите случайно чем это можна сделать.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lordB8r</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-20391</link>
		<dc:creator>lordB8r</dc:creator>
		<pubDate>Tue, 10 Nov 2009 15:01:07 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-20391</guid>
		<description>trackback:

http://flexpletives.blogspot.com/2009/11/flex-embedded-fonts-images-and-compile.html</description>
		<content:encoded><![CDATA[<p>trackback:</p>
<p><a href="http://flexpletives.blogspot.com/2009/11/flex-embedded-fonts-images-and-compile.html" rel="nofollow">http://flexpletives.blogspot.com/2009/11/flex-embedded-fonts-images-and-compile.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: etc</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-19375</link>
		<dc:creator>etc</dc:creator>
		<pubDate>Thu, 25 Jun 2009 08:42:07 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-19375</guid>
		<description>В общем, суть понятна. Добавлю отправку события IO_ERROR при некорректном формате загруженных данных в ближайшее время.</description>
		<content:encoded><![CDATA[<p>В общем, суть понятна. Добавлю отправку события IO_ERROR при некорректном формате загруженных данных в ближайшее время.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Basmanov</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-19374</link>
		<dc:creator>Max Basmanov</dc:creator>
		<pubDate>Thu, 25 Jun 2009 08:24:24 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-19374</guid>
		<description>собственно сам файлик с изменениями
http://avaks.kiev.ua/max/fontloader.as
:)</description>
		<content:encoded><![CDATA[<p>собственно сам файлик с изменениями<br />
<a href="http://avaks.kiev.ua/max/fontloader.as" rel="nofollow">http://avaks.kiev.ua/max/fontloader.as</a><br />
 <img src='http://etcs.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Basmanov</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-19373</link>
		<dc:creator>Max Basmanov</dc:creator>
		<pubDate>Thu, 25 Jun 2009 08:19:17 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-19373</guid>
		<description>ок, ситуация следующая:
при битом линке на файл сервер выдает стартовую страницу. и вот здесь начинается самое интересное:
1.если использовать iFontLoader.load(new URLRequest(fntHost + fntName + &quot;.swf&quot;), true);
IOErrorEvent.IO_ERROR не подымается, а загрузчик переходит к функции 
private function analyze(bytes:ByteArray, delayed:Boolean = false):void {
и отдает ей загруженные байты.
2. функция analyze абсолютно не в курче, что там в этих байтах лежит и начинает их обрабатывать как совершенно нормальный файл.
3. внутри функции чозается от этих байтов SWFByteArray(bytes), в котором ризбираются заголовки и т.д., где оно и падает окончательно, т.к. в байтах лежит html, а далеко не swf.
4. в конструкторе SWFByteArray подымается иксепшн, который нигде не ловится и не обрабатывается и не превращается в ивент, что не позволяет его обработать далее и валит все приложение, которое попыталось подгрузить несуществующий шрифт.

что нужно сделать для решения проблемы:
1. добавляем в class SWFByteArray
	private var goodSWF:Boolean = true;
	public function get swfIsGood():Boolean {
		return goodSWF;
	}
2. в конструкторе находим и комментируем строчку
  throw new ArgumentError(&#039;Error #2124: Loaded file is an unknown type.!!!!&#039;);
вместо нее вставляем 
goodSWF = false;
3. кусок this.readHeader(); заменяем на
   try {
	this.readHeader();
   }catch (error:Error) {
	goodSWF = false;
   }	
4. косок 
   data.endian = endian;
   data.position = position;
меняем на 
  try{
	data.endian = endian;
	data.position = position;
  }catch (error:Error) {
	goodSWF = false;
  }
это нужно сделать т.к. в особо тяжких случаях возниказ иксепшн попытки чтения за пределами файла

5. в функции readFrameRate() класса SWFByteArray
перед блоком if добавляем try {
послеблока if (всего) добавляем
  }catch (error:Error) {
	goodSWF = false;
  }

6.  в функции readHeader() класса SWFByteArray
перед
	this._rect = this.readRect();		
	this.readFrameRate();		
	super.readShort(); // num of frames
добавляем try {
после
  }catch (error:Error) {
	goodSWF = false;
  }

и теперь самое главное:
в функции analyze класса FontLoader:
1. тип переменной  data меняем на SWFByteArray, получая:
  var data:SWFByteArray = new SWFByteArray(bytes); 

2. добавляем еще одну переменную 
  var tmpData:ByteArray;

3. дальше собственно идет обработка загруженных данных, чтобы все не падало там делаем следующее:
перед циклом while (data.bytesAvailable) { добавляем
if (data.swfIsGood) {

после окончания последнего блока if (this._fontCount) {
(собственно в самом конце функции)
добавляем
else {
 super.dispatchEvent(new Event(IOErrorEvent.IO_ERROR));
}

4. в цикле for (o in fontData) { меняем
  data = fontData[o] as ByteArray; на
tmpData = fontData[o] as ByteArray;

затем меняем
  if (data) { на
if (tmpData) {

затем меняем
  tempData.writeBytes(data); на
tempData.writeBytes(tmpData);


ВСЕ! :)

!теперь мы можем нормально отреагировать на загрузку неправильного файла. и ничего в иксепшн не упадет.</description>
		<content:encoded><![CDATA[<p>ок, ситуация следующая:<br />
при битом линке на файл сервер выдает стартовую страницу. и вот здесь начинается самое интересное:<br />
1.если использовать iFontLoader.load(new URLRequest(fntHost + fntName + &#8220;.swf&#8221;), true);<br />
IOErrorEvent.IO_ERROR не подымается, а загрузчик переходит к функции<br />
private function analyze(bytes:ByteArray, delayed:Boolean = false):void {<br />
и отдает ей загруженные байты.<br />
2. функция analyze абсолютно не в курче, что там в этих байтах лежит и начинает их обрабатывать как совершенно нормальный файл.<br />
3. внутри функции чозается от этих байтов SWFByteArray(bytes), в котором ризбираются заголовки и т.д., где оно и падает окончательно, т.к. в байтах лежит html, а далеко не swf.<br />
4. в конструкторе SWFByteArray подымается иксепшн, который нигде не ловится и не обрабатывается и не превращается в ивент, что не позволяет его обработать далее и валит все приложение, которое попыталось подгрузить несуществующий шрифт.</p>
<p>что нужно сделать для решения проблемы:<br />
1. добавляем в class SWFByteArray<br />
	private var goodSWF:Boolean = true;<br />
	public function get swfIsGood():Boolean {<br />
		return goodSWF;<br />
	}<br />
2. в конструкторе находим и комментируем строчку<br />
  throw new ArgumentError(&#8216;Error #2124: Loaded file is an unknown type.!!!!&#8217;);<br />
вместо нее вставляем<br />
goodSWF = false;<br />
3. кусок this.readHeader(); заменяем на<br />
   try {<br />
	this.readHeader();<br />
   }catch (error:Error) {<br />
	goodSWF = false;<br />
   }<br />
4. косок<br />
   data.endian = endian;<br />
   data.position = position;<br />
меняем на<br />
  try{<br />
	data.endian = endian;<br />
	data.position = position;<br />
  }catch (error:Error) {<br />
	goodSWF = false;<br />
  }<br />
это нужно сделать т.к. в особо тяжких случаях возниказ иксепшн попытки чтения за пределами файла</p>
<p>5. в функции readFrameRate() класса SWFByteArray<br />
перед блоком if добавляем try {<br />
послеблока if (всего) добавляем<br />
  }catch (error:Error) {<br />
	goodSWF = false;<br />
  }</p>
<p>6.  в функции readHeader() класса SWFByteArray<br />
перед<br />
	this._rect = this.readRect();<br />
	this.readFrameRate();<br />
	super.readShort(); // num of frames<br />
добавляем try {<br />
после<br />
  }catch (error:Error) {<br />
	goodSWF = false;<br />
  }</p>
<p>и теперь самое главное:<br />
в функции analyze класса FontLoader:<br />
1. тип переменной  data меняем на SWFByteArray, получая:<br />
  var data:SWFByteArray = new SWFByteArray(bytes); </p>
<p>2. добавляем еще одну переменную<br />
  var tmpData:ByteArray;</p>
<p>3. дальше собственно идет обработка загруженных данных, чтобы все не падало там делаем следующее:<br />
перед циклом while (data.bytesAvailable) { добавляем<br />
if (data.swfIsGood) {</p>
<p>после окончания последнего блока if (this._fontCount) {<br />
(собственно в самом конце функции)<br />
добавляем<br />
else {<br />
 super.dispatchEvent(new Event(IOErrorEvent.IO_ERROR));<br />
}</p>
<p>4. в цикле for (o in fontData) { меняем<br />
  data = fontData[o] as ByteArray; на<br />
tmpData = fontData[o] as ByteArray;</p>
<p>затем меняем<br />
  if (data) { на<br />
if (tmpData) {</p>
<p>затем меняем<br />
  tempData.writeBytes(data); на<br />
tempData.writeBytes(tmpData);</p>
<p>ВСЕ! <img src='http://etcs.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>!теперь мы можем нормально отреагировать на загрузку неправильного файла. и ничего в иксепшн не упадет.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: etc</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-19366</link>
		<dc:creator>etc</dc:creator>
		<pubDate>Fri, 19 Jun 2009 16:06:21 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-19366</guid>
		<description>Эмм, вообще говоря, все стандартные события Loader-а FontLoader высылает, в метатегах это указано дополнительно.</description>
		<content:encoded><![CDATA[<p>Эмм, вообще говоря, все стандартные события Loader-а FontLoader высылает, в метатегах это указано дополнительно.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Basmanov</title>
		<link>http://etcs.ru/blog/as3/fontloader_2_1/comment-page-1/#comment-19365</link>
		<dc:creator>Max Basmanov</dc:creator>
		<pubDate>Fri, 19 Jun 2009 15:09:19 +0000</pubDate>
		<guid isPermaLink="false">http://etcs.ru/?p=183#comment-19365</guid>
		<description>после длительных поисков, косяк нашелся...
протупил я :(

основная идея в следующем:
сервер при неправильном линке выдает стартовую страницу.
по итогу:
- при правильном линке все отлично
- при битом линке возникает эксепшин и мувик останавливается.

есть предложение:
добавить в класс FontLoader обработку эесепшинов подобного плана и свои события:
public static var FONTS_LOADED:String = &quot;fontsLoaded&quot;;
public static var IO_LOAD_ERROR:String = &quot;ioLoadError&quot;;
public static var SEC_LOAD_ERROR:String = &quot;secLoadError&quot;;
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);

private function completeHandler(e:Event):void {
  dispatchEvent(new Event(ClassLoader.CLASS_LOADED));
}
private function ioErrorHandler(e:Event):void {
  dispatchEvent(new Event(ClassLoader.IO_LOAD_ERROR));
}
private function securityErrorHandler(e:Event):void {
  dispatchEvent(new Event(ClassLoader.SEC_LOAD_ERROR));
}

а в местах возможного возникновения эксепшнов добавить их поимку и утилизацию с выдаванием ивента.

таким образом была бы модель нормальной обработки подобных ситуаций</description>
		<content:encoded><![CDATA[<p>после длительных поисков, косяк нашелся&#8230;<br />
протупил я <img src='http://etcs.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>основная идея в следующем:<br />
сервер при неправильном линке выдает стартовую страницу.<br />
по итогу:<br />
- при правильном линке все отлично<br />
- при битом линке возникает эксепшин и мувик останавливается.</p>
<p>есть предложение:<br />
добавить в класс FontLoader обработку эесепшинов подобного плана и свои события:<br />
public static var FONTS_LOADED:String = &#8220;fontsLoaded&#8221;;<br />
public static var IO_LOAD_ERROR:String = &#8220;ioLoadError&#8221;;<br />
public static var SEC_LOAD_ERROR:String = &#8220;secLoadError&#8221;;<br />
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);<br />
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);<br />
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);</p>
<p>private function completeHandler(e:Event):void {<br />
  dispatchEvent(new Event(ClassLoader.CLASS_LOADED));<br />
}<br />
private function ioErrorHandler(e:Event):void {<br />
  dispatchEvent(new Event(ClassLoader.IO_LOAD_ERROR));<br />
}<br />
private function securityErrorHandler(e:Event):void {<br />
  dispatchEvent(new Event(ClassLoader.SEC_LOAD_ERROR));<br />
}</p>
<p>а в местах возможного возникновения эксепшнов добавить их поимку и утилизацию с выдаванием ивента.</p>
<p>таким образом была бы модель нормальной обработки подобных ситуаций</p>
]]></content:encoded>
	</item>
</channel>
</rss>

