텍스트 서식 지정



TextBlock 객체는 텍스트 행을 만들기 위한 팩토리입니다. TextBlock의 내용은 TextElement 객체를 통해 할당됩니다. ElementFormat 객체는 텍스트 서식 지정을 처리합니다. ElementFormat 클래스는 기준선 정렬, 커닝, 자간, 텍스트 회전, 글꼴 크기, 색상 및 대/소문자와 같은 속성을 정의합니다. 여기에는 FontDescription(글꼴을 사용한 작업 참조)도 포함됩니다.

ElementFormat 객체 사용

ElementFormat 객체의 생성자는 FontDescription을 비롯한 다양한 선택적 매개 변수를 사용합니다. 생성자 외부에서 이러한 속성을 설정할 수도 있습니다. 다음 예제에서는 간단한 텍스트 행을 정의하고 표시할 때 다양한 객체의 관계를 보여 줍니다.

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class ElementFormatExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
        private var str:String; 
        private var tl:TextLine; 
 
        public function ElementFormatExample() 
        { 
            fd.fontName = "Garamond"; 
            ef = new ElementFormat(fd); 
            ef.fontSize = 30; 
            ef.color = 0xFF0000; 
            str = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            tl = tb.createTextLine(null,600); 
            addChild(tl); 
        } 
    } 
}

글꼴 색상 및 투명도(알파)

ElementFormat 객체의 color 속성은 글꼴 색상을 설정합니다. 이 값은 색상의 RGB 구성 요소를 나타내는 정수입니다. 예를 들어, 빨강은 0xFF0000이고 녹색은 0x00FF00입니다. 기본값은 검정색(0x000000)입니다.

alpha 속성은 요소(TextElementGraphicElement)의 알파 투명도 값을 설정합니다. 값은 0(완전 투명)에서 1(완전 불투명) 사이일 수 있습니다. 기본값은 1입니다. alpha가 0인 요소는 보이지 않지만 활성 상태입니다. 이 값에 상속된 알파 값이 곱해져 요소를 보다 투명하게 만듭니다.

var ef:ElementFormat = new ElementFormat(); 
ef.alpha = 0.8; 
ef.color = 0x999999; 

기준선 정렬 및 이동

행에서 가장 큰 텍스트의 글꼴과 크기에 따라 주 기준선이 결정됩니다. TextBlock.baselineFontDescriptionTextBlock.baselineFontSize를 설정하여 이러한 값을 재정의할 수 있습니다. 텍스트 내의 여러 기준선 중 하나와 주 기준선을 정렬할 수 있습니다. 여기에는 어센트 선 및 디센트 선이나 표의 문자 맨 위, 중앙 또는 맨 아래가 포함됩니다.

어센트 선, 기준선, 디센트 선 및 x 높이를 보여 주는 텍스트

A.
어센트

B.
기준선

C.
디센트

D.
x 높이

ElementFormat 객체의 세 가지 속성에 따라 기준선 및 정렬 특성이 결정됩니다. alignmentBaseline 속성은 TextElement 또는 GraphicElement의 주 기준선을 설정합니다. 이 기준선은 요소의 "물리기” 선이며 모든 텍스트의 주 기준선은 이 위치에 정렬됩니다.

dominantBaseline 속성은 요소의 여러 기준선 중 사용할 기준선을 지정하며, 이 값에 따라 행에 있는 요소의 수직 위치가 결정됩니다. 기본값은 TextBaseline.ROMAN이지만 IDEOGRAPHIC_TOP 또는 IDEOGRAPHIC_BOTTOM 기준선이 주 기준선이 되도록 설정할 수도 있습니다.

baselineShift 속성은 Y축에서 설정된 픽셀 수만큼 기준선을 이동합니다. 일반(회전되지 않은) 텍스트에서 양수 값은 기준선을 아래로 이동하고 음수 값은 위로 이동합니다.

입력 체계 대/소문자

ElementFormatTypographicCase 속성은 대문자, 소문자 또는 작은 대문자와 같은 텍스트 대/소문자를 지정합니다.

 
var ef_Upper:ElementFormat = new ElementFormat(); 
ef_Upper.typographicCase = TypographicCase.UPPERCASE; 
 
var ef_SmallCaps:ElementFormat = new ElementFormat(); 
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; 

텍스트 회전

텍스트 블록이나 텍스트 세그먼트 내의 글리프를 90도 증분으로 회전할 수 있습니다. TextRotation 클래스는 텍스트 블록 및 글리프 회전을 설정하기 위해 다음 상수를 정의합니다.

상수

설명

AUTO

"auto"

반시계 방향으로 90도 회전하도록 지정합니다. 일반적으로 아시아권 언어의 수직 텍스트에서 회전이 필요한 글리프만 회전하는 데 사용됩니다.

ROTATE_0

"rotate_0"

회전을 지정하지 않습니다.

ROTATE_180

"rotate_180"

180도 회전하도록 지정합니다.

ROTATE_270

"rotate_270"

270도 회전하도록 지정합니다.

ROTATE_90

"rotate_90"

시계 방향으로 90도 회전하도록 지정합니다.

텍스트 블록의 텍스트 행을 회전하려면 TextBlock.createTextLine() 메서드를 호출하여 텍스트 행을 만들기 전에 TextBlock.lineRotation 속성을 설정합니다.

텍스트 블록이나 세그먼트 내의 글리프를 회전하려면 ElementFormat.textRotation 속성을 글리프가 회전할 각도로 설정합니다. 글리프는 한 문자를 구성하는 모양 또는 여러 글리프로 구성된 한 문자의 일부입니다. 예를 들어, 문자 a와 i의 점은 글리프입니다.

글리프 회전은 행을 수직으로 회전하지만 행 내의 문자를 회전하지 않으려는 일부 아시아권 언어에서 적합합니다. 아시아권 언어의 텍스트 회전에 대한 자세한 내용은 동아시아 텍스트 양쪽 정렬을 참조하십시오.

아시아권 언어의 텍스트와 마찬가지로 텍스트 블록과 내부 글리프를 모두 회전하는 예제는 다음과 같습니다. 또한 이 예제에서는 일본어 글꼴을 사용합니다.

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class RotationExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
        private var str:String; 
        private var tl:TextLine; 
 
        public function RotationExample() 
        { 
            fd.fontName = "MS Mincho"; 
            ef = new ElementFormat(fd); 
            ef.textRotation = TextRotation.AUTO; 
            str = "This is rotated Japanese text"; 
            te = new TextElement(str, ef); 
            tb.lineRotation = TextRotation.ROTATE_90; 
            tb.content = te; 
            tl = tb.createTextLine(null,600); 
            addChild(tl); 
        } 
    } 
}

ElementFormat 잠금 및 복제

ElementFormat 객체를 임의 유형의 ContentElement에 할당하면 해당 locked 속성이 자동으로 true로 설정됩니다. 잠긴 ElementFormat 객체를 수정하려고 하면 IllegalOperationError가 발생합니다. TextElement 인스턴스에 할당하기 전에 이러한 객체를 완전히 정의하는 것이 좋습니다.

기존 ElementFormat 인스턴스를 수정하려면 먼저 해당 locked 속성을 확인합니다. true이면 clone() 메서드를 사용하여 객체의 잠기지 않은 복사본을 만듭니다. 이 잠기지 않은 객체의 속성은 변경할 수 있으며, 그런 다음 TextElement 인스턴스에 할당할 수 있습니다. 이 객체에서 만든 모든 새 행은 새 서식을 갖습니다. 동일한 객체에서 이전 형식을 사용하여 만든 이전 행은 변경되지 않습니다.

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class ElementFormatCloneExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef1:ElementFormat; 
        private var ef2:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
 
        public function ElementFormatCloneExample() 
        { 
            fd.fontName = "Garamond"; 
            ef1 = new ElementFormat(fd); 
            ef1.fontSize = 24; 
            var str:String = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            var tx1:TextLine = tb.createTextLine(null,600); 
            addChild(tx1); 
             
            ef2 = (ef1.locked) ? ef1.clone() : ef1; 
            ef2.fontSize = 32; 
            tb.content.elementFormat = ef2; 
            var tx2:TextLine = tb.createTextLine(null,600); 
            addChild(tx2); 
        } 
    } 
}