Metni denetlemeFlash Player 10 ve üstü, Adobe AIR 1.5 ve üstü FTE, yaslama ve karakter aralığının işlenmesine yönelik yeni bir metin biçimlendirme denetimleri kümesi sağlar (karakter aralığı ve izleme). Satırların bölünme şeklinin denetlenmesi ve satırların içindeki sekme duraklarının ayarlanmasına yönelik özellikler de vardır. Metni yaslamaMetnin yaslanması, sözcükler ve bazen harfler arasındaki aralığın ayarlanması yoluyla bir paragraftaki tüm satırların aynı uzunluğa getirilmesini sağlar. Böylece metin iki tarafta da aynı hizada olurken, sözcükler ve harfler arasındaki aralıklar değişiklik gösterir. Gazete ve dergilerdeki metin sütunları genellikle yaslanır. SpaceJustifier sınıfındaki lineJustfication özelliği, bir metin bloğundaki satırların yaslanmasını denetlemenize olanak sağlar. LineJustification sınıfı, yaslama seçeneğini belirtmek için kullanabileceğiniz sabitler tanımlar: ALL_BUT_LAST, metnin son satırı dışındaki tüm satırlarını yaslar; ALL_INCLUDING_LAST, son satır da dahil olmak üzere metnin tamamını yaslar; varsayılan değer olan UNJUSTIFIED ise metni yaslanmamış şekilde bırakır. Metni yaslamak için, lineJustification özelliğini SpaceJustifier sınıfının bir örneğine ayarlayın ve bu örneği bir TextBlock örneğinin textJustifier özelliğine atayın. Aşağıdaki örnek, metnin son satırı hariç tüm satırlarının yaslandığı bir paragraf oluşturur. package { import flash.text.engine.*; import flash.display.Sprite; public class JustifyExample extends Sprite { public function JustifyExample() { var str:String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut " + "enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut " + "aliquip ex ea commodo consequat."; var format:ElementFormat = new ElementFormat(); var textElement:TextElement=new TextElement(str,format); var spaceJustifier:SpaceJustifier=new SpaceJustifier("en",LineJustification.ALL_BUT_LAST); var textBlock:TextBlock = new TextBlock(); textBlock.content=textElement; textBlock.textJustifier=spaceJustifier; createLines(textBlock); } private function createLines(textBlock:TextBlock):void { var yPos=20; var textLine:TextLine=textBlock.createTextLine(null,150); while (textLine) { addChild(textLine); textLine.x=15; yPos+=textLine.textHeight+2; textLine.y=yPos; textLine=textBlock.createTextLine(textLine,150); } } } } Sözcüklerin yanı sıra harfler arasında da farklı aralıklar kullanmak için, SpaceJustifier.letterspacing özelliğini true değerine ayarlayın. Harf aralığının etkinleştirilmesi, bazen basit yaslama sonucu ortaya çıkabilen, sözcükler arasındaki görünümü bozan boşlukları azaltır. Doğu Asya metnini yaslamaDoğu Asya metninin yaslanmasında dikkate alınması gereken ek noktalar vardır. Bu metinler yukarıdan aşağıya doğru yazılabilir ve kinsoku olarak da bilinen bazı karakterler, satırın başında ya da sonunda bulunamaz. JustificationStyle sınıfı, bu karakterleri işlemeye yönelik seçenekleri belirten aşağıdaki sabitleri tanımlar: PRIORITIZE_LEAST_ADJUSTMENT, en iyi sonucu hangisinin oluşturduğuna bağlı olarak, yaslamayı satırın genişletilmesine veya sıkıştırılmasına dayandırır. PUSH_IN_KINSOKU, yaslamayı satırın sonundaki kinsokunun sıkıştırılmasına veya herhangi bir kinsoku yoksa ya da bu boşluk yeterli değilse kinsokunun genişletilmesine dayandırır. PUSH_OUT_ONLY, yaslamayı satırın genişletilmesine dayandırır. Bir dikey Asya metni bloğu oluşturmak için, TextBlock.lineRotation özelliğini TextRotation.ROTATE_90 olarak ve ElementFormat.textRotation özelliğini varsayılan değer olan TextRotation.AUTO olarak ayarlayın. textRotation değerinin AUTO olarak ayarlanması, satır döndürüldüğünde metindeki gliflerin yana dönmek yerine dikey kalmasını sağlar. AUTO ayarı, glifin Unicode özellikleri tarafından belirtildiği gibi, yalnızca tam genişlikteki glifler ve geniş glifler için saat yönünün tersine 90° dönüş sağlar. Aşağıdaki örnek, dikey bir Japonca metin bloğu görüntüler ve bunu PUSH_IN_KINSOKU seçeneğini kullanarak yaslar.
package { import flash.text.engine.*; import flash.display.Stage; import flash.display.Sprite; import flash.system.Capabilities; public class EastAsianJustifyExample extends Sprite { public function EastAsianJustifyExample() { var Japanese_txt:String = String.fromCharCode( 0x5185, 0x95A3, 0x5E9C, 0x304C, 0x300C, 0x653F, 0x5E9C, 0x30A4, 0x30F3, 0x30BF, 0x30FC, 0x30CD, 0x30C3, 0x30C8, 0x30C6, 0x30EC, 0x30D3, 0x300D, 0x306E, 0x52D5, 0x753B, 0x914D, 0x4FE1, 0x5411, 0x3051, 0x306B, 0x30A2, 0x30C9, 0x30D3, 0x30B7, 0x30B9, 0x30C6, 0x30E0, 0x30BA, 0x793E, 0x306E) var textBlock:TextBlock = new TextBlock(); var font:FontDescription = new FontDescription(); var format:ElementFormat = new ElementFormat(); format.fontSize = 12; format.color = 0xCC0000; format.textRotation = TextRotation.AUTO; textBlock.baselineZero = TextBaseline.IDEOGRAPHIC_CENTER; var eastAsianJustifier:EastAsianJustifier = new EastAsianJustifier("ja", LineJustification.ALL_BUT_LAST); eastAsianJustifier.justificationStyle = JustificationStyle.PUSH_IN_KINSOKU; textBlock.textJustifier = eastAsianJustifier; textBlock.lineRotation = TextRotation.ROTATE_90; var linePosition:Number = this.stage.stageWidth - 75; if (Capabilities.os.search("Mac OS") > -1) // set fontName: Kozuka Mincho Pro R font.fontName = String.fromCharCode(0x5C0F, 0x585A, 0x660E, 0x671D) + " Pro R"; else font.fontName = "Kozuka Mincho Pro R"; textBlock.content = new TextElement(Japanese_txt, format); var previousLine:TextLine = null; while (true) { var textLine:TextLine = textBlock.createTextLine(previousLine, 200); if (textLine == null) break; textLine.y = 20; textLine.x = linePosition; linePosition -= 25; addChild(textLine); previousLine = textLine; } } } } Karakter aralığı ve izlemeKarakter aralığı ve izleme, bir metin bloğundaki bitişik karakter çiftlerinin arasındaki mesafeyi etkiler. Karakter aralığı, "WA" veya "Va" gibi karakter çiftlerinin birbirinin yakınına nasıl "yerleştirildiğini" denetler. Karakter aralığı, ElementFormat nesnesinde ayarlanır. Varsayılan olarak etkindir (Kerning.ON) ve yalnızca Kanji, Hiragana veya Katakana dışındaki karakterler arasında karakter aralığı uygulanacak şekilde OFF ya da AUTO olarak ayarlanabilir. İzleme, metin bloğundaki tüm karakterlerin arasına belirli sayıda piksel ekler veya karakterlerin arasından belirli sayıda piksel çıkarır ve ElementFormat nesnesinden ayarlanır. Hem gömülü fontlarla hem de aygıt fontlarıyla çalışır. FTE iki izleme özelliğini destekler: bir karakterin sol tarafında piksel ekleme/çıkarma işlemi yapan trackingLeft ve sağ tarafında ekleme/çıkarma işlemi yapan trackingRight. Karakter aralığı kullanılıyorsa, her karakter çifti için karakter aralığı değerlerine izleme değeri eklenir veya karakter aralığı değerlerinden izleme değeri çıkarılır.
var ef1:ElementFormat = new ElementFormat(); ef1.kerning = Kerning.OFF; var ef2:ElementFormat = new ElementFormat(); ef2.kerning = Kerning.ON; ef2.trackingLeft = 0.8; ef2.trackingRight = 0.8; var ef3:ElementFormat = new ElementFormat(); ef3.trackingRight = -0.2; Kaydırılan metin için satır kesmeleriElementFormat nesnesinin breakOpportunity özelliği, kaydırılan metin birden çok satıra kesildiğinde, kesme için hangi karakterlerin kullanılabileceğini belirler. Varsayılan değer olan BreakOpportunity.AUTO, sözcükler arasında ve kısa çizgilerde kesme gibi standart Unicode özelliklerini kullanır. BreakOpportunity.ALL değerinin kullanılması, tüm karakterlerin satır kesme olanağı olarak değerlendirilmesini sağlar ve bu, bir yolu izleyen metin gibi efektler oluşturmak için kullanışlıdır. var ef:ElementFormat = new ElementFormat(); ef.breakOpportunity = BreakOpportunity.ALL; Sekme duraklarıMetin bloğunda sekme durakları ayarlamak için, TabStop sınıfının örneklerini oluşturarak sekme duraklarını tanımlayın. TabStop() yapıcısının parametreleri, metnin sekme durağıyla nasıl hizalandığını belirtir. Bu parametreler, sekme durağının konumunu belirtir ve ondalık hizalaması için, dize olarak ifade edilen hizalama değerini belirtir. Genellikle bu değer bir ondalık işaretidir ancak virgül, dolar işareti veya örneğin Yen ya da Euro sembolü de olabilir. Aşağıdaki kod satırı, tab1 adında bir sekme durağı oluşturur. var tab1:TabStop = new TabStop(TabAlignment.DECIMAL, 50, "."); Bir metin bloğu için sekme durakları oluşturduktan sonra, bunları bir TextBlock örneğinin tabStops özelliğine atayın. Ancak tabStops özelliği bir Vektör gerektiğinden, ilk olarak Vektör öğesini oluşturmanız ve sekme duraklarını buna eklemeniz gerekir. Vektör, metin bloğuna bir sekme durağı kümesi atamanıza olanak sağlar. Aşağıdaki örnek bir Vector<TabStop> örneği oluşturur ve buna bir TabStop nesnesi kümesi ekler. Ardından sekme duraklarını bir TextBlock örneğinin tabStops özelliğine ayar. var tabStops:Vector.<TabStop> = new Vector.<TabStop>(); tabStops.push(tab1, tab2, tab3, tab4); textBlock.tabStops = tabStops Vektörler hakkında daha fazla bilgi için, bkz. Dizilerle çalışma. Aşağıdaki örnek, her bir TabStop hizalama seçeneğinin etkisini gösterir. package { import flash.text.engine.*; import flash.display.Sprite; public class TabStopExample extends Sprite { public function TabStopExample() { var format:ElementFormat = new ElementFormat(); format.fontDescription = new FontDescription("Arial"); format.fontSize = 16; var tabStops:Vector.<TabStop> = new Vector.<TabStop>(); tabStops.push( new TabStop(TabAlignment.START, 20), new TabStop(TabAlignment.CENTER, 140), new TabStop(TabAlignment.DECIMAL, 260, "."), new TabStop(TabAlignment.END, 380)); var textBlock:TextBlock = new TextBlock(); textBlock.content = new TextElement( "\tt1\tt2\tt3\tt4\n" + "\tThis line aligns on 1st tab\n" + "\t\t\t\tThis is the end\n" + "\tThe following fragment centers on the 2nd tab:\t\t\n" + "\t\tit's on me\t\t\n" + "\tThe following amounts align on the decimal point:\n" + "\t\t\t45.00\t\n" + "\t\t\t75,320.00\t\n" + "\t\t\t6,950.00\t\n" + "\t\t\t7.01\t\n", format); textBlock.tabStops = tabStops; var yPosition:Number = 60; var previousTextLine:TextLine = null; var textLine:TextLine; var i:int; for (i = 0; i < 10; i++) { textLine = textBlock.createTextLine(previousTextLine, 1000, 0); textLine.x = 20; textLine.y = yPosition; addChild(textLine); yPosition += 25; previousTextLine = textLine; } } } } |
|