2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali-toolkit/internal/text/layouts/layout-engine.h>
23 #include <dali-toolkit/internal/text/layouts/layout-parameters.h>
24 #include <dali-toolkit/internal/text/text-run-container.h>
25 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <toolkit-text-utils.h>
30 using namespace Toolkit;
33 // Tests the LayoutEngine methods.
35 //////////////////////////////////////////////////////////
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44 std::string description;
47 unsigned int numberOfFonts;
48 FontDescriptionRun* fontDescriptions;
50 unsigned int totalNumberOfGlyphs;
52 unsigned int numberOfLines;
54 Layout::Engine::Type layout;
55 unsigned int startIndex;
56 unsigned int numberOfGlyphs;
61 void Print( const LineRun& line )
63 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
64 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
65 std::cout << " width : " << line.width << std::endl;
66 std::cout << " ascender : " << line.ascender << std::endl;
67 std::cout << " descender : " << line.descender << std::endl;
68 std::cout << " extraLength : " << line.extraLength << std::endl;
69 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
70 std::cout << " direction : " << line.direction << std::endl;
71 std::cout << " ellipsis : " << line.ellipsis << std::endl;
74 bool LayoutTextTest( const LayoutTextData& data )
77 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
78 fontClient.SetDpi( 96u, 96u );
80 char* pathNamePtr = get_current_dir_name();
81 const std::string pathName( pathNamePtr );
84 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
88 // 1) Create the model.
89 LogicalModelPtr logicalModel;
90 VisualModelPtr visualModel;
94 Vector<FontDescriptionRun> fontDescriptionRuns;
95 if( 0u != data.numberOfFonts )
97 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
98 data.fontDescriptions,
99 data.fontDescriptions + data.numberOfFonts );
102 LayoutOptions options;
103 options.reorder = false;
104 options.align = false;
105 CreateTextModel( data.text,
115 // 2) Clear the layout.
116 Vector<LineRun>& lines = visualModel->mLines;
118 const Length numberOfCharacters = logicalModel->mText.Count();
119 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
120 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
121 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
123 LineIndex startRemoveIndex = 0u;
125 if( 0u != lines.Count() )
127 startRemoveIndex = lines.Count();
128 LineIndex endRemoveIndex = startRemoveIndex;
129 ClearGlyphRuns( data.startIndex,
130 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
135 // Update the character runs of the lines.
136 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
137 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
138 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
139 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
140 ClearCharacterRuns( startCharacterIndex,
141 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
146 lines.Erase( lines.Begin() + startRemoveIndex,
147 lines.Begin() + endRemoveIndex );
150 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
152 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
153 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
156 Layout::Engine engine;
157 engine.SetMetrics( metrics );
158 engine.SetLayout( data.layout );
160 const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
161 float outlineWidth = visualModel->GetOutlineWidth();
163 Layout::Parameters layoutParameters( data.textArea,
164 logicalModel->mText.Begin(),
165 logicalModel->mLineBreakInfo.Begin(),
166 logicalModel->mWordBreakInfo.Begin(),
167 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
168 visualModel->mGlyphs.Begin(),
169 visualModel->mGlyphsToCharacters.Begin(),
170 visualModel->mCharactersPerGlyph.Begin(),
171 visualModel->mCharactersToGlyph.Begin(),
172 visualModel->mGlyphsPerCharacter.Begin(),
174 Text::HorizontalAlignment::BEGIN,
175 Text::LineWrap::WORD,
180 layoutParameters.isLastNewParagraph = isLastNewParagraph;
182 // The initial glyph and the number of glyphs to layout.
183 layoutParameters.startGlyphIndex = data.startIndex;
184 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
185 layoutParameters.startLineIndex = startRemoveIndex;
186 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
188 layoutSize = Vector2::ZERO;
190 bool isAutoScroll = false;
191 const bool updated = engine.LayoutText( layoutParameters,
198 // 4) Compare the results.
200 if( updated != data.updated )
202 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
206 if( layoutSize != data.layoutSize )
208 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
212 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
214 const Vector2& position = *( glyphPositions.Begin() + index );
216 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
218 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
221 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
223 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
228 if( lines.Count() != data.numberOfLines )
230 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
234 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
236 const LineRun& line = *( lines.Begin() + index );
237 const LineRun& expectedLine = *( data.lines + index );
239 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
241 std::cout << " Different line info for line : " << index << std::endl;
243 std::cout << " expected" << std::endl;
244 Print( expectedLine );
247 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
249 std::cout << " Different line info for line : " << index << std::endl;
251 std::cout << " expected" << std::endl;
252 Print( expectedLine );
256 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
258 std::cout << " Different line info for line : " << index << std::endl;
260 std::cout << " expected" << std::endl;
261 Print( expectedLine );
264 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
266 std::cout << " Different line info for line : " << index << std::endl;
268 std::cout << " expected" << std::endl;
269 Print( expectedLine );
273 if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
275 std::cout << " Different line info for line : " << index << std::endl;
277 std::cout << " expected" << std::endl;
278 Print( expectedLine );
282 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
284 std::cout << " Different line info for line : " << index << std::endl;
286 std::cout << " expected" << std::endl;
287 Print( expectedLine );
291 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
293 std::cout << " Different line info for line : " << index << std::endl;
295 std::cout << " expected" << std::endl;
296 Print( expectedLine );
300 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
302 std::cout << " Different line info for line : " << index << std::endl;
304 std::cout << " expected" << std::endl;
305 Print( expectedLine );
309 if( line.ellipsis != expectedLine.ellipsis )
311 std::cout << " Different line info for line : " << index << std::endl;
313 std::cout << " expected" << std::endl;
314 Print( expectedLine );
318 // Do not compare the alignment offset as it's not calculated in the layout.
319 // Do not compare the line direction as it's not set in the layout.
325 //////////////////////////////////////////////////////////
327 struct ReLayoutRightToLeftLinesData
329 std::string description;
332 unsigned int numberOfFonts;
333 FontDescriptionRun* fontDescriptions;
334 unsigned int totalNumberOfGlyphs;
336 unsigned int startIndex;
337 unsigned int numberOfCharacters;
340 bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
343 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
344 fontClient.SetDpi( 96u, 96u );
346 char* pathNamePtr = get_current_dir_name();
347 const std::string pathName( pathNamePtr );
350 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
351 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
352 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
354 // 1) Create the model.
355 LogicalModelPtr logicalModel;
356 VisualModelPtr visualModel;
360 Vector<FontDescriptionRun> fontDescriptionRuns;
361 if( 0u != data.numberOfFonts )
363 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
364 data.fontDescriptions,
365 data.fontDescriptions + data.numberOfFonts );
368 LayoutOptions options;
369 options.reorder = false;
370 options.align = false;
371 CreateTextModel( data.text,
381 // 2) Call the ReLayoutRightToLeftLines() method.
382 Layout::Engine engine;
383 engine.SetMetrics( metrics );
385 float outlineWidth = visualModel->GetOutlineWidth();
386 Layout::Parameters layoutParameters( data.textArea,
387 logicalModel->mText.Begin(),
388 logicalModel->mLineBreakInfo.Begin(),
389 logicalModel->mWordBreakInfo.Begin(),
390 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
391 visualModel->mGlyphs.Begin(),
392 visualModel->mGlyphsToCharacters.Begin(),
393 visualModel->mCharactersPerGlyph.Begin(),
394 visualModel->mCharactersToGlyph.Begin(),
395 visualModel->mGlyphsPerCharacter.Begin(),
396 visualModel->mGlyphs.Count(),
397 Text::HorizontalAlignment::BEGIN,
398 Text::LineWrap::WORD,
403 layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
404 layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
406 engine.ReLayoutRightToLeftLines( layoutParameters,
408 data.numberOfCharacters,
409 visualModel->mGlyphPositions );
411 // 3) Compare the results.
412 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
414 if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
416 std::cout << " Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
420 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
422 const Vector2& position = *( glyphPositions.Begin() + index );
424 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
426 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
429 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
431 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
439 //////////////////////////////////////////////////////////
443 std::string description;
446 unsigned int numberOfFonts;
447 FontDescriptionRun* fontDescriptions;
448 Text::HorizontalAlignment::Type horizontalAlignment;
449 Text::VerticalAlignment::Type verticalAlignment;
450 unsigned int startIndex;
451 unsigned int numberOfCharacters;
452 unsigned int numberOfLines;
454 Dali::LayoutDirection::Type layoutDirection;
455 bool matchSystemLanguageDirection;
458 bool AlignTest( const AlignData& data )
461 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
462 fontClient.SetDpi( 96u, 96u );
464 char* pathNamePtr = get_current_dir_name();
465 const std::string pathName( pathNamePtr );
468 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
469 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
470 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
472 // 1) Create the model.
473 LogicalModelPtr logicalModel;
474 VisualModelPtr visualModel;
478 Vector<FontDescriptionRun> fontDescriptionRuns;
479 if( 0u != data.numberOfFonts )
481 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
482 data.fontDescriptions,
483 data.fontDescriptions + data.numberOfFonts );
486 LayoutOptions options;
487 options.align = false;
488 CreateTextModel( data.text,
498 // Call the Align method.
499 Layout::Engine engine;
500 engine.SetMetrics( metrics );
502 float alignmentOffset = 0.f;
503 engine.Align( data.textArea,
505 data.numberOfCharacters,
506 data.horizontalAlignment,
509 data.layoutDirection,
510 data.matchSystemLanguageDirection );
513 if( data.numberOfLines != visualModel->mLines.Count() )
515 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
519 const LineRun* const linesBuffer = visualModel->mLines.Begin();
520 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
522 const LineRun& line = *( linesBuffer + index );
524 if( line.alignmentOffset != *( data.lineOffsets + index ) )
526 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
535 //////////////////////////////////////////////////////////
537 // UtcDaliTextLayoutSetGetLayout
538 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
539 // UtcDaliTextLayoutSetGetHorizontalAlignment
540 // UtcDaliTextLayoutSetGetVerticalAlignment
541 // UtcDaliTextLayoutSetGetCursorWidth
542 // UtcDaliTextLayoutNoText
543 // UtcDaliTextLayoutSmallTextArea01
544 // UtcDaliTextLayoutSmallTextArea02
545 // UtcDaliTextLayoutMultilineText01
546 // UtcDaliTextLayoutMultilineText02
547 // UtcDaliTextLayoutMultilineText03
548 // UtcDaliTextLayoutMultilineText04
549 // UtcDaliTextLayoutMultilineText05
550 // UtcDaliTextUpdateLayout01
551 // UtcDaliTextUpdateLayout02
552 // UtcDaliTextUpdateLayout03
553 // UtcDaliTextLayoutEllipsis01
554 // UtcDaliTextLayoutEllipsis02
555 // UtcDaliTextLayoutEllipsis03
556 // UtcDaliTextLayoutEllipsis04
557 // UtcDaliTextLayoutEllipsis04
558 // UtcDaliTextReorderLayout01
559 // UtcDaliTextReorderLayout02
560 // UtcDaliTextReorderLayout03
561 // UtcDaliTextReorderLayout04
562 // UtcDaliTextAlign01
563 // UtcDaliTextAlign02
564 // UtcDaliTextAlign03
565 // UtcDaliTextAlign04
566 // UtcDaliTextAlign05
567 // UtcDaliTextAlign06
568 // UtcDaliTextAlign07
569 // UtcDaliTextAlign08
570 // UtcDaliTextAlign09
572 //////////////////////////////////////////////////////////
574 int UtcDaliTextLayoutSetGetLayout(void)
576 ToolkitTestApplication application;
577 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
579 Layout::Engine engine;
581 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
583 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
584 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
586 tet_result(TET_PASS);
590 int UtcDaliTextLayoutSetGetCursorWidth(void)
592 ToolkitTestApplication application;
595 Layout::Engine engine;
597 DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
599 engine.SetCursorWidth( 2 );
600 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
602 tet_result(TET_PASS);
606 int UtcDaliTextLayoutNoText(void)
608 ToolkitTestApplication application;
609 tet_infoline(" UtcDaliTextLayoutNoText");
611 Size textArea(100.f, 60.f);
612 Size layoutSize = Vector2::ZERO;
613 LayoutTextData data =
625 Layout::Engine::MULTI_LINE_BOX,
632 if( !LayoutTextTest( data ) )
634 tet_result(TET_FAIL);
637 tet_result(TET_PASS);
641 int UtcDaliTextLayoutSmallTextArea01(void)
643 ToolkitTestApplication application;
644 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
646 // Won't layout the text in multi-line if the width is too small.
648 const std::string fontFamily( "TizenSans" );
650 // Set a known font description
651 FontDescriptionRun fontDescriptionRun;
652 fontDescriptionRun.characterRun.characterIndex = 0u;
653 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
654 fontDescriptionRun.familyLength = fontFamily.size();
655 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
656 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
657 fontDescriptionRun.familyDefined = true;
658 fontDescriptionRun.weightDefined = false;
659 fontDescriptionRun.widthDefined = false;
660 fontDescriptionRun.slantDefined = false;
661 fontDescriptionRun.sizeDefined = false;
663 Vector<FontDescriptionRun> fontDescriptionRuns;
664 fontDescriptionRuns.PushBack( fontDescriptionRun );
665 Size textArea(1.f, 1.f);
666 Size layoutSize = Vector2::ZERO;
667 LayoutTextData data =
669 "Layout text in a small area",
673 fontDescriptionRuns.Begin(),
679 Layout::Engine::MULTI_LINE_BOX,
686 if( !LayoutTextTest( data ) )
688 tet_result(TET_FAIL);
691 tet_result(TET_PASS);
695 int UtcDaliTextLayoutSmallTextArea02(void)
697 ToolkitTestApplication application;
698 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
700 // Will layout the text in single line as it can be scrolled.
702 const std::string fontFamily( "TizenSans" );
704 // Set a known font description
705 FontDescriptionRun fontDescriptionRun;
706 fontDescriptionRun.characterRun.characterIndex = 0u;
707 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
708 fontDescriptionRun.familyLength = fontFamily.size();
709 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
710 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
711 fontDescriptionRun.familyDefined = true;
712 fontDescriptionRun.weightDefined = false;
713 fontDescriptionRun.widthDefined = false;
714 fontDescriptionRun.slantDefined = false;
715 fontDescriptionRun.sizeDefined = false;
717 Vector<FontDescriptionRun> fontDescriptionRuns;
718 fontDescriptionRuns.PushBack( fontDescriptionRun );
719 Size textArea(1.f, 1.f);
720 Size layoutSize(80.f, 19.f);
721 float positions[] = { 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f };
722 struct LineRun line =
735 Vector<LineRun> lines;
736 lines.PushBack( line );
738 LayoutTextData data =
740 "Layout text in a small area",
744 fontDescriptionRuns.Begin(),
750 Layout::Engine::SINGLE_LINE_BOX,
757 if( !LayoutTextTest( data ) )
759 tet_result(TET_FAIL);
762 tet_result(TET_PASS);
766 int UtcDaliTextLayoutMultilineText01(void)
768 ToolkitTestApplication application;
769 tet_infoline(" UtcDaliTextLayoutMultilineText01");
771 // Layout some lines of left to right text.
773 const std::string fontFamily( "TizenSans" );
775 // Set a known font description
776 FontDescriptionRun fontDescriptionRun1;
777 fontDescriptionRun1.characterRun.characterIndex = 0u;
778 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
779 fontDescriptionRun1.familyLength = fontFamily.size();
780 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
781 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
782 fontDescriptionRun1.familyDefined = true;
783 fontDescriptionRun1.weightDefined = false;
784 fontDescriptionRun1.widthDefined = false;
785 fontDescriptionRun1.slantDefined = false;
786 fontDescriptionRun1.sizeDefined = false;
788 FontDescriptionRun fontDescriptionRun2;
789 fontDescriptionRun2.characterRun.characterIndex = 18u;
790 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
791 fontDescriptionRun2.familyLength = fontFamily.size();
792 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
793 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
794 fontDescriptionRun2.familyDefined = true;
795 fontDescriptionRun2.weightDefined = false;
796 fontDescriptionRun2.widthDefined = false;
797 fontDescriptionRun2.slantDefined = false;
798 fontDescriptionRun2.sizeDefined = false;
800 Vector<FontDescriptionRun> fontDescriptionRuns;
801 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
802 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
803 Size textArea(100.f, 300.f);
804 Size layoutSize(95.f, 95.f);
807 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
808 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f, 42.f, -12.f,
809 1.f, -12.f, 9.f, -9.f, 17.f, -9.f, 27.f, -9.f, 36.f, -9.f, 45.f, -11.f, 51.f, -0.f,
810 1.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f, -9.f, 35.f, -9.f, 41.f, -9.f, 50.f, -9.f, 59.f, -11.f, 65.f, -0.f,
811 1.f, -12.f, 5.f, -12.f, 9.f, -9.f, 19.f, -9.f, 28.f, -9.f, 35.f, -0.f, 41.f, -9.f, 50.f, -12.f, 54.f, -0.f, 59.f, -11.f, 66.f, -9.f, 75.f, -9.f, 83.f, -11.f, 91.f, -2.f
813 struct LineRun line0 =
826 struct LineRun line1 =
839 struct LineRun line2 =
852 struct LineRun line3 =
865 struct LineRun line4 =
878 Vector<LineRun> lines;
879 lines.PushBack( line0 );
880 lines.PushBack( line1 );
881 lines.PushBack( line2 );
882 lines.PushBack( line3 );
883 lines.PushBack( line4 );
885 LayoutTextData data =
887 "Layout simple multi-line text",
888 "Hello world demo.\n"
889 "Layout different lines of text.",
892 fontDescriptionRuns.Begin(),
898 Layout::Engine::MULTI_LINE_BOX,
905 if( !LayoutTextTest( data ) )
907 tet_result(TET_FAIL);
910 tet_result(TET_PASS);
914 int UtcDaliTextLayoutMultilineText02(void)
916 ToolkitTestApplication application;
917 tet_infoline(" UtcDaliTextLayoutMultilineText02");
919 // Layout some lines of bidirectional text.
921 const std::string fontFamily1( "TizenSans" );
923 // Set a known font description
924 FontDescriptionRun fontDescriptionRun1;
925 fontDescriptionRun1.characterRun.characterIndex = 0u;
926 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
927 fontDescriptionRun1.familyLength = fontFamily1.size();
928 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
929 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
930 fontDescriptionRun1.familyDefined = true;
931 fontDescriptionRun1.weightDefined = false;
932 fontDescriptionRun1.widthDefined = false;
933 fontDescriptionRun1.slantDefined = false;
934 fontDescriptionRun1.sizeDefined = false;
936 const std::string fontFamily2( "TizenSansHebrew" );
938 // Set a known font description
939 FontDescriptionRun fontDescriptionRun2;
940 fontDescriptionRun2.characterRun.characterIndex = 17u;
941 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
942 fontDescriptionRun2.familyLength = fontFamily2.size();
943 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
944 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
945 fontDescriptionRun2.familyDefined = true;
946 fontDescriptionRun2.weightDefined = false;
947 fontDescriptionRun2.widthDefined = false;
948 fontDescriptionRun2.slantDefined = false;
949 fontDescriptionRun2.sizeDefined = false;
951 const std::string fontFamily3( "TizenSans" );
953 // Set a known font description
954 FontDescriptionRun fontDescriptionRun3;
955 fontDescriptionRun3.characterRun.characterIndex = 26u;
956 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
957 fontDescriptionRun3.familyLength = fontFamily3.size();
958 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
959 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
960 fontDescriptionRun3.familyDefined = true;
961 fontDescriptionRun3.weightDefined = false;
962 fontDescriptionRun3.widthDefined = false;
963 fontDescriptionRun3.slantDefined = false;
964 fontDescriptionRun3.sizeDefined = false;
966 const std::string fontFamily4( "TizenSansHebrew" );
968 // Set a known font description
969 FontDescriptionRun fontDescriptionRun4;
970 fontDescriptionRun4.characterRun.characterIndex = 28u;
971 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
972 fontDescriptionRun4.familyLength = fontFamily4.size();
973 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
974 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
975 fontDescriptionRun4.familyDefined = true;
976 fontDescriptionRun4.weightDefined = false;
977 fontDescriptionRun4.widthDefined = false;
978 fontDescriptionRun4.slantDefined = false;
979 fontDescriptionRun4.sizeDefined = false;
981 const std::string fontFamily5( "TizenSans" );
983 // Set a known font description
984 FontDescriptionRun fontDescriptionRun5;
985 fontDescriptionRun5.characterRun.characterIndex = 38u;
986 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
987 fontDescriptionRun5.familyLength = fontFamily5.size();
988 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
989 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
990 fontDescriptionRun5.familyDefined = true;
991 fontDescriptionRun5.weightDefined = false;
992 fontDescriptionRun5.widthDefined = false;
993 fontDescriptionRun5.slantDefined = false;
994 fontDescriptionRun5.sizeDefined = false;
996 Vector<FontDescriptionRun> fontDescriptionRuns;
997 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
998 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
999 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1000 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
1001 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
1002 Size textArea(100.f, 300.f);
1003 Size layoutSize(80.f, 114.f);
1006 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1007 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1008 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
1009 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1010 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1011 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f,
1013 struct LineRun line0 =
1026 struct LineRun line1 =
1039 struct LineRun line2 =
1052 struct LineRun line3 =
1065 struct LineRun line4 =
1078 struct LineRun line5 =
1091 Vector<LineRun> lines;
1092 lines.PushBack( line0 );
1093 lines.PushBack( line1 );
1094 lines.PushBack( line2 );
1095 lines.PushBack( line3 );
1096 lines.PushBack( line4 );
1097 lines.PushBack( line5 );
1099 LayoutTextData data =
1101 "Layout bidirectional text.",
1102 "Hello world demo שלום עולם.\n"
1103 "שלום עולם hello world demo.",
1106 fontDescriptionRuns.Begin(),
1112 Layout::Engine::MULTI_LINE_BOX,
1119 if( !LayoutTextTest( data ) )
1121 tet_result(TET_FAIL);
1124 tet_result(TET_PASS);
1128 int UtcDaliTextLayoutMultilineText03(void)
1130 ToolkitTestApplication application;
1131 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1133 // Layout a long word which doesn't fit in the width of the text area.
1135 const std::string fontFamily( "TizenSans" );
1137 // Set a known font description
1138 FontDescriptionRun fontDescriptionRun;
1139 fontDescriptionRun.characterRun.characterIndex = 0u;
1140 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1141 fontDescriptionRun.familyLength = fontFamily.size();
1142 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1143 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1144 fontDescriptionRun.familyDefined = true;
1145 fontDescriptionRun.weightDefined = false;
1146 fontDescriptionRun.widthDefined = false;
1147 fontDescriptionRun.slantDefined = false;
1148 fontDescriptionRun.sizeDefined = false;
1150 Vector<FontDescriptionRun> fontDescriptionRuns;
1151 fontDescriptionRuns.PushBack( fontDescriptionRun );
1152 Size textArea(100.f, 300.f);
1153 Size layoutSize(96.f, 57.f);
1156 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -9.f, 47.f, -9.f, 57.f, -9.f, 63.f, -13.f, 66.f, -13.f, 75.f, -13.f, 84.f, -9.f,
1157 1.f, -9.f, 13.f, -9.f, 23.f, -13.f, 31.f, -9.f, 40.f, -13.f, 44.f, -13.f, 47.f, -9.f, 56.f, -9.f, 67.f, -9.f, 77.f, -9.f, 83.f, -13.f, 86.f, -13.f,
1158 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f,
1160 struct LineRun line0 =
1173 struct LineRun line1 =
1186 struct LineRun line2 =
1199 Vector<LineRun> lines;
1200 lines.PushBack( line0 );
1201 lines.PushBack( line1 );
1202 lines.PushBack( line2 );
1204 LayoutTextData data =
1206 "Layout a long word which doesn't fit in the width of the text area.",
1207 "Helloworlddemohelloworlddemo.",
1210 fontDescriptionRuns.Begin(),
1216 Layout::Engine::MULTI_LINE_BOX,
1223 if( !LayoutTextTest( data ) )
1225 tet_result(TET_FAIL);
1228 tet_result(TET_PASS);
1232 int UtcDaliTextLayoutMultilineText04(void)
1234 ToolkitTestApplication application;
1235 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1237 // Layout simple text ending with a \n. It has to add a void line at the end.
1239 const std::string fontFamily( "TizenSans" );
1241 // Set a known font description
1242 FontDescriptionRun fontDescriptionRun;
1243 fontDescriptionRun.characterRun.characterIndex = 0u;
1244 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1245 fontDescriptionRun.familyLength = fontFamily.size();
1246 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1247 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1248 fontDescriptionRun.familyDefined = true;
1249 fontDescriptionRun.weightDefined = false;
1250 fontDescriptionRun.widthDefined = false;
1251 fontDescriptionRun.slantDefined = false;
1252 fontDescriptionRun.sizeDefined = false;
1254 Vector<FontDescriptionRun> fontDescriptionRuns;
1255 fontDescriptionRuns.PushBack( fontDescriptionRun );
1256 Size textArea(100.f, 300.f);
1257 Size layoutSize(83.f, 38.f);
1260 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -2.f, 82.f, -12.f
1262 struct LineRun line0 =
1274 struct LineRun line1 =
1287 Vector<LineRun> lines;
1288 lines.PushBack( line0 );
1289 lines.PushBack( line1 );
1291 LayoutTextData data =
1293 "Layout simple text ending with a \n.",
1297 fontDescriptionRuns.Begin(),
1303 Layout::Engine::MULTI_LINE_BOX,
1310 if( !LayoutTextTest( data ) )
1312 tet_result(TET_FAIL);
1315 tet_result(TET_PASS);
1319 int UtcDaliTextLayoutMultilineText05(void)
1321 ToolkitTestApplication application;
1322 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1324 // Layout simple text with one character with a different font size.
1326 const std::string fontFamily( "TizenSans" );
1328 // Set a known font description
1329 FontDescriptionRun fontDescriptionRun1;
1330 fontDescriptionRun1.characterRun.characterIndex = 0u;
1331 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1332 fontDescriptionRun1.familyLength = fontFamily.size();
1333 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1334 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1335 fontDescriptionRun1.familyDefined = true;
1336 fontDescriptionRun1.weightDefined = false;
1337 fontDescriptionRun1.widthDefined = false;
1338 fontDescriptionRun1.slantDefined = false;
1339 fontDescriptionRun1.sizeDefined = false;
1341 FontDescriptionRun fontDescriptionRun2;
1342 fontDescriptionRun2.characterRun.characterIndex = 6u;
1343 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1344 fontDescriptionRun2.familyLength = fontFamily.size();
1345 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1346 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1347 fontDescriptionRun2.size = 1280u;
1348 fontDescriptionRun2.familyDefined = true;
1349 fontDescriptionRun2.weightDefined = false;
1350 fontDescriptionRun2.widthDefined = false;
1351 fontDescriptionRun2.slantDefined = false;
1352 fontDescriptionRun2.sizeDefined = true;
1354 FontDescriptionRun fontDescriptionRun3;
1355 fontDescriptionRun3.characterRun.characterIndex = 7u;
1356 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1357 fontDescriptionRun3.familyLength = fontFamily.size();
1358 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1359 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1360 fontDescriptionRun3.familyDefined = true;
1361 fontDescriptionRun3.weightDefined = false;
1362 fontDescriptionRun3.widthDefined = false;
1363 fontDescriptionRun3.slantDefined = false;
1364 fontDescriptionRun3.sizeDefined = false;
1366 Vector<FontDescriptionRun> fontDescriptionRuns;
1367 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1368 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1369 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1370 Size textArea(100.f, 300.f);
1371 Size layoutSize(89.f, 51.f);
1374 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 60.f, -9.f, 70.f, -9.f, 76.f, -13.f, 79.f, -13.f, 88.f, -0.f,
1375 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f
1377 struct LineRun line0 =
1390 struct LineRun line1 =
1403 Vector<LineRun> lines;
1404 lines.PushBack( line0 );
1405 lines.PushBack( line1 );
1407 LayoutTextData data =
1409 "Layout simple text with one character with a different font size.",
1410 "Hello world demo.",
1413 fontDescriptionRuns.Begin(),
1419 Layout::Engine::MULTI_LINE_BOX,
1426 if( !LayoutTextTest( data ) )
1428 tet_result(TET_FAIL);
1431 tet_result(TET_PASS);
1435 int UtcDaliTextUpdateLayout01(void)
1437 ToolkitTestApplication application;
1438 tet_infoline(" UtcDaliTextUpdateLayout01");
1440 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1442 const std::string fontLatin( "TizenSans" );
1443 const std::string fontHebrew( "TizenSansHebrew" );
1444 const std::string fontArabic( "TizenSansArabic" );
1446 // Set a known font description
1447 FontDescriptionRun fontDescriptionRun01;
1448 fontDescriptionRun01.characterRun.characterIndex = 0u;
1449 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1450 fontDescriptionRun01.familyLength = fontLatin.size();
1451 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1452 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1453 fontDescriptionRun01.familyDefined = true;
1454 fontDescriptionRun01.weightDefined = false;
1455 fontDescriptionRun01.widthDefined = false;
1456 fontDescriptionRun01.slantDefined = false;
1457 fontDescriptionRun01.sizeDefined = false;
1459 // Set a known font description
1460 FontDescriptionRun fontDescriptionRun02;
1461 fontDescriptionRun02.characterRun.characterIndex = 17u;
1462 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1463 fontDescriptionRun02.familyLength = fontHebrew.size();
1464 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1465 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1466 fontDescriptionRun02.familyDefined = true;
1467 fontDescriptionRun02.weightDefined = false;
1468 fontDescriptionRun02.widthDefined = false;
1469 fontDescriptionRun02.slantDefined = false;
1470 fontDescriptionRun02.sizeDefined = false;
1472 // Set a known font description
1473 FontDescriptionRun fontDescriptionRun03;
1474 fontDescriptionRun03.characterRun.characterIndex = 26u;
1475 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1476 fontDescriptionRun03.familyLength = fontLatin.size();
1477 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1478 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1479 fontDescriptionRun03.familyDefined = true;
1480 fontDescriptionRun03.weightDefined = false;
1481 fontDescriptionRun03.widthDefined = false;
1482 fontDescriptionRun03.slantDefined = false;
1483 fontDescriptionRun03.sizeDefined = false;
1485 // Set a known font description
1486 FontDescriptionRun fontDescriptionRun04;
1487 fontDescriptionRun04.characterRun.characterIndex = 28u;
1488 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1489 fontDescriptionRun04.familyLength = fontArabic.size();
1490 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1491 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1492 fontDescriptionRun04.familyDefined = true;
1493 fontDescriptionRun04.weightDefined = false;
1494 fontDescriptionRun04.widthDefined = false;
1495 fontDescriptionRun04.slantDefined = false;
1496 fontDescriptionRun04.sizeDefined = false;
1498 // Set a known font description
1499 FontDescriptionRun fontDescriptionRun05;
1500 fontDescriptionRun05.characterRun.characterIndex = 42u;
1501 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1502 fontDescriptionRun05.familyLength = fontLatin.size();
1503 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1504 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1505 fontDescriptionRun05.familyDefined = true;
1506 fontDescriptionRun05.weightDefined = false;
1507 fontDescriptionRun05.widthDefined = false;
1508 fontDescriptionRun05.slantDefined = false;
1509 fontDescriptionRun05.sizeDefined = false;
1511 // Set a known font description
1512 FontDescriptionRun fontDescriptionRun06;
1513 fontDescriptionRun06.characterRun.characterIndex = 54u;
1514 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1515 fontDescriptionRun06.familyLength = fontHebrew.size();
1516 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1517 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1518 fontDescriptionRun06.familyDefined = true;
1519 fontDescriptionRun06.weightDefined = false;
1520 fontDescriptionRun06.widthDefined = false;
1521 fontDescriptionRun06.slantDefined = false;
1522 fontDescriptionRun06.sizeDefined = false;
1524 // Set a known font description
1525 FontDescriptionRun fontDescriptionRun07;
1526 fontDescriptionRun07.characterRun.characterIndex = 64u;
1527 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1528 fontDescriptionRun07.familyLength = fontHebrew.size();
1529 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1530 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1531 fontDescriptionRun07.familyDefined = true;
1532 fontDescriptionRun07.weightDefined = false;
1533 fontDescriptionRun07.widthDefined = false;
1534 fontDescriptionRun07.slantDefined = false;
1535 fontDescriptionRun07.sizeDefined = false;
1537 // Set a known font description
1538 FontDescriptionRun fontDescriptionRun08;
1539 fontDescriptionRun08.characterRun.characterIndex = 74u;
1540 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1541 fontDescriptionRun08.familyLength = fontLatin.size();
1542 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1543 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1544 fontDescriptionRun08.familyDefined = true;
1545 fontDescriptionRun08.weightDefined = false;
1546 fontDescriptionRun08.widthDefined = false;
1547 fontDescriptionRun08.slantDefined = false;
1548 fontDescriptionRun08.sizeDefined = false;
1550 // Set a known font description
1551 FontDescriptionRun fontDescriptionRun09;
1552 fontDescriptionRun09.characterRun.characterIndex = 92u;
1553 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1554 fontDescriptionRun09.familyLength = fontLatin.size();
1555 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1556 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1557 fontDescriptionRun09.familyDefined = true;
1558 fontDescriptionRun09.weightDefined = false;
1559 fontDescriptionRun09.widthDefined = false;
1560 fontDescriptionRun09.slantDefined = false;
1561 fontDescriptionRun09.sizeDefined = false;
1563 // Set a known font description
1564 FontDescriptionRun fontDescriptionRun10;
1565 fontDescriptionRun10.characterRun.characterIndex = 104u;
1566 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1567 fontDescriptionRun10.familyLength = fontArabic.size();
1568 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1569 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1570 fontDescriptionRun10.familyDefined = true;
1571 fontDescriptionRun10.weightDefined = false;
1572 fontDescriptionRun10.widthDefined = false;
1573 fontDescriptionRun10.slantDefined = false;
1574 fontDescriptionRun10.sizeDefined = false;
1576 // Set a known font description
1577 FontDescriptionRun fontDescriptionRun11;
1578 fontDescriptionRun11.characterRun.characterIndex = 118u;
1579 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1580 fontDescriptionRun11.familyLength = fontHebrew.size();
1581 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1582 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1583 fontDescriptionRun11.familyDefined = true;
1584 fontDescriptionRun11.weightDefined = false;
1585 fontDescriptionRun11.widthDefined = false;
1586 fontDescriptionRun11.slantDefined = false;
1587 fontDescriptionRun11.sizeDefined = false;
1589 // Set a known font description
1590 FontDescriptionRun fontDescriptionRun12;
1591 fontDescriptionRun12.characterRun.characterIndex = 128u;
1592 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1593 fontDescriptionRun12.familyLength = fontLatin.size();
1594 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1595 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1596 fontDescriptionRun12.familyDefined = true;
1597 fontDescriptionRun12.weightDefined = false;
1598 fontDescriptionRun12.widthDefined = false;
1599 fontDescriptionRun12.slantDefined = false;
1600 fontDescriptionRun12.sizeDefined = false;
1602 // Set a known font description
1603 FontDescriptionRun fontDescriptionRun13;
1604 fontDescriptionRun13.characterRun.characterIndex = 145u;
1605 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1606 fontDescriptionRun13.familyLength = fontHebrew.size();
1607 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1608 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1609 fontDescriptionRun13.familyDefined = true;
1610 fontDescriptionRun13.weightDefined = false;
1611 fontDescriptionRun13.widthDefined = false;
1612 fontDescriptionRun13.slantDefined = false;
1613 fontDescriptionRun13.sizeDefined = false;
1615 // Set a known font description
1616 FontDescriptionRun fontDescriptionRun14;
1617 fontDescriptionRun14.characterRun.characterIndex = 154u;
1618 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1619 fontDescriptionRun14.familyLength = fontLatin.size();
1620 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1621 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1622 fontDescriptionRun14.familyDefined = true;
1623 fontDescriptionRun14.weightDefined = false;
1624 fontDescriptionRun14.widthDefined = false;
1625 fontDescriptionRun14.slantDefined = false;
1626 fontDescriptionRun14.sizeDefined = false;
1628 // Set a known font description
1629 FontDescriptionRun fontDescriptionRun15;
1630 fontDescriptionRun15.characterRun.characterIndex = 156u;
1631 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1632 fontDescriptionRun15.familyLength = fontHebrew.size();
1633 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1634 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1635 fontDescriptionRun15.familyDefined = true;
1636 fontDescriptionRun15.weightDefined = false;
1637 fontDescriptionRun15.widthDefined = false;
1638 fontDescriptionRun15.slantDefined = false;
1639 fontDescriptionRun15.sizeDefined = false;
1641 // Set a known font description
1642 FontDescriptionRun fontDescriptionRun16;
1643 fontDescriptionRun16.characterRun.characterIndex = 166u;
1644 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1645 fontDescriptionRun16.familyLength = fontLatin.size();
1646 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1647 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1648 fontDescriptionRun16.familyDefined = true;
1649 fontDescriptionRun16.weightDefined = false;
1650 fontDescriptionRun16.widthDefined = false;
1651 fontDescriptionRun16.slantDefined = false;
1652 fontDescriptionRun16.sizeDefined = false;
1654 // Set a known font description
1655 FontDescriptionRun fontDescriptionRun17;
1656 fontDescriptionRun17.characterRun.characterIndex = 178u;
1657 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1658 fontDescriptionRun17.familyLength = fontArabic.size();
1659 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1660 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1661 fontDescriptionRun17.familyDefined = true;
1662 fontDescriptionRun17.weightDefined = false;
1663 fontDescriptionRun17.widthDefined = false;
1664 fontDescriptionRun17.slantDefined = false;
1665 fontDescriptionRun17.sizeDefined = false;
1667 Vector<FontDescriptionRun> fontDescriptionRuns;
1668 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1669 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1670 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1671 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1672 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1673 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1674 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1675 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1676 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1677 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1678 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1679 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1680 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1681 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1682 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1683 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1684 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1685 Size textArea(100.f, 300.f);
1686 Size layoutSize(92.f, 361.f);
1689 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1690 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1691 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
1692 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 67.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
1693 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1694 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1695 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1696 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1697 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f, 42.f, -12.f,
1698 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1699 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
1700 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1701 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1702 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1703 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
1704 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1705 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1706 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
1709 struct LineRun line01 =
1722 struct LineRun line02 =
1735 struct LineRun line03 =
1748 struct LineRun line04 =
1761 struct LineRun line05 =
1774 struct LineRun line06 =
1787 struct LineRun line07 =
1800 struct LineRun line08 =
1813 struct LineRun line09 =
1826 struct LineRun line10 =
1839 struct LineRun line11 =
1852 struct LineRun line12 =
1865 struct LineRun line13 =
1878 struct LineRun line14 =
1891 struct LineRun line15 =
1904 struct LineRun line16 =
1917 struct LineRun line17 =
1930 struct LineRun line18 =
1943 struct LineRun line19 =
1956 Vector<LineRun> lines;
1957 lines.PushBack( line01 );
1958 lines.PushBack( line02 );
1959 lines.PushBack( line03 );
1960 lines.PushBack( line04 );
1961 lines.PushBack( line05 );
1962 lines.PushBack( line06 );
1963 lines.PushBack( line07 );
1964 lines.PushBack( line08 );
1965 lines.PushBack( line09 );
1966 lines.PushBack( line10 );
1967 lines.PushBack( line11 );
1968 lines.PushBack( line12 );
1969 lines.PushBack( line13 );
1970 lines.PushBack( line14 );
1971 lines.PushBack( line15 );
1972 lines.PushBack( line16 );
1973 lines.PushBack( line17 );
1974 lines.PushBack( line18 );
1975 lines.PushBack( line19 );
1977 LayoutTextData data =
1979 "Layout bidirectional text.",
1980 "Hello world demo שלום עולם.\n"
1981 "مرحبا بالعالم hello world שלום עולם\n"
1982 "שלום עולם hello world demo.\n"
1983 "hello world مرحبا بالعالم שלום עולם\n"
1984 "Hello world demo שלום עולם.\n"
1985 "שלום עולם hello world مرحبا بالعالم\n",
1988 fontDescriptionRuns.Begin(),
1994 Layout::Engine::MULTI_LINE_BOX,
2001 if( !LayoutTextTest( data ) )
2003 tet_result(TET_FAIL);
2006 tet_result(TET_PASS);
2010 int UtcDaliTextUpdateLayout02(void)
2012 ToolkitTestApplication application;
2013 tet_infoline(" UtcDaliTextUpdateLayout02");
2015 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2017 const std::string fontLatin( "TizenSans" );
2018 const std::string fontHebrew( "TizenSansHebrew" );
2019 const std::string fontArabic( "TizenSansArabic" );
2021 // Set a known font description
2022 FontDescriptionRun fontDescriptionRun01;
2023 fontDescriptionRun01.characterRun.characterIndex = 0u;
2024 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2025 fontDescriptionRun01.familyLength = fontLatin.size();
2026 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2027 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2028 fontDescriptionRun01.familyDefined = true;
2029 fontDescriptionRun01.weightDefined = false;
2030 fontDescriptionRun01.widthDefined = false;
2031 fontDescriptionRun01.slantDefined = false;
2032 fontDescriptionRun01.sizeDefined = false;
2034 // Set a known font description
2035 FontDescriptionRun fontDescriptionRun02;
2036 fontDescriptionRun02.characterRun.characterIndex = 17u;
2037 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2038 fontDescriptionRun02.familyLength = fontHebrew.size();
2039 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2040 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2041 fontDescriptionRun02.familyDefined = true;
2042 fontDescriptionRun02.weightDefined = false;
2043 fontDescriptionRun02.widthDefined = false;
2044 fontDescriptionRun02.slantDefined = false;
2045 fontDescriptionRun02.sizeDefined = false;
2047 // Set a known font description
2048 FontDescriptionRun fontDescriptionRun03;
2049 fontDescriptionRun03.characterRun.characterIndex = 26u;
2050 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2051 fontDescriptionRun03.familyLength = fontLatin.size();
2052 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2053 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2054 fontDescriptionRun03.familyDefined = true;
2055 fontDescriptionRun03.weightDefined = false;
2056 fontDescriptionRun03.widthDefined = false;
2057 fontDescriptionRun03.slantDefined = false;
2058 fontDescriptionRun03.sizeDefined = false;
2060 // Set a known font description
2061 FontDescriptionRun fontDescriptionRun04;
2062 fontDescriptionRun04.characterRun.characterIndex = 28u;
2063 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2064 fontDescriptionRun04.familyLength = fontArabic.size();
2065 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2066 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2067 fontDescriptionRun04.familyDefined = true;
2068 fontDescriptionRun04.weightDefined = false;
2069 fontDescriptionRun04.widthDefined = false;
2070 fontDescriptionRun04.slantDefined = false;
2071 fontDescriptionRun04.sizeDefined = false;
2073 // Set a known font description
2074 FontDescriptionRun fontDescriptionRun05;
2075 fontDescriptionRun05.characterRun.characterIndex = 42u;
2076 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2077 fontDescriptionRun05.familyLength = fontLatin.size();
2078 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2079 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2080 fontDescriptionRun05.familyDefined = true;
2081 fontDescriptionRun05.weightDefined = false;
2082 fontDescriptionRun05.widthDefined = false;
2083 fontDescriptionRun05.slantDefined = false;
2084 fontDescriptionRun05.sizeDefined = false;
2086 // Set a known font description
2087 FontDescriptionRun fontDescriptionRun06;
2088 fontDescriptionRun06.characterRun.characterIndex = 54u;
2089 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2090 fontDescriptionRun06.familyLength = fontHebrew.size();
2091 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2092 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2093 fontDescriptionRun06.familyDefined = true;
2094 fontDescriptionRun06.weightDefined = false;
2095 fontDescriptionRun06.widthDefined = false;
2096 fontDescriptionRun06.slantDefined = false;
2097 fontDescriptionRun06.sizeDefined = false;
2099 // Set a known font description
2100 FontDescriptionRun fontDescriptionRun07;
2101 fontDescriptionRun07.characterRun.characterIndex = 64u;
2102 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2103 fontDescriptionRun07.familyLength = fontHebrew.size();
2104 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2105 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2106 fontDescriptionRun07.familyDefined = true;
2107 fontDescriptionRun07.weightDefined = false;
2108 fontDescriptionRun07.widthDefined = false;
2109 fontDescriptionRun07.slantDefined = false;
2110 fontDescriptionRun07.sizeDefined = false;
2112 // Set a known font description
2113 FontDescriptionRun fontDescriptionRun08;
2114 fontDescriptionRun08.characterRun.characterIndex = 74u;
2115 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2116 fontDescriptionRun08.familyLength = fontLatin.size();
2117 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2118 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2119 fontDescriptionRun08.familyDefined = true;
2120 fontDescriptionRun08.weightDefined = false;
2121 fontDescriptionRun08.widthDefined = false;
2122 fontDescriptionRun08.slantDefined = false;
2123 fontDescriptionRun08.sizeDefined = false;
2125 // Set a known font description
2126 FontDescriptionRun fontDescriptionRun09;
2127 fontDescriptionRun09.characterRun.characterIndex = 92u;
2128 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2129 fontDescriptionRun09.familyLength = fontLatin.size();
2130 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2131 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2132 fontDescriptionRun09.familyDefined = true;
2133 fontDescriptionRun09.weightDefined = false;
2134 fontDescriptionRun09.widthDefined = false;
2135 fontDescriptionRun09.slantDefined = false;
2136 fontDescriptionRun09.sizeDefined = false;
2138 // Set a known font description
2139 FontDescriptionRun fontDescriptionRun10;
2140 fontDescriptionRun10.characterRun.characterIndex = 104u;
2141 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2142 fontDescriptionRun10.familyLength = fontArabic.size();
2143 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2144 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2145 fontDescriptionRun10.familyDefined = true;
2146 fontDescriptionRun10.weightDefined = false;
2147 fontDescriptionRun10.widthDefined = false;
2148 fontDescriptionRun10.slantDefined = false;
2149 fontDescriptionRun10.sizeDefined = false;
2151 // Set a known font description
2152 FontDescriptionRun fontDescriptionRun11;
2153 fontDescriptionRun11.characterRun.characterIndex = 118u;
2154 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2155 fontDescriptionRun11.familyLength = fontHebrew.size();
2156 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2157 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2158 fontDescriptionRun11.familyDefined = true;
2159 fontDescriptionRun11.weightDefined = false;
2160 fontDescriptionRun11.widthDefined = false;
2161 fontDescriptionRun11.slantDefined = false;
2162 fontDescriptionRun11.sizeDefined = false;
2164 // Set a known font description
2165 FontDescriptionRun fontDescriptionRun12;
2166 fontDescriptionRun12.characterRun.characterIndex = 128u;
2167 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2168 fontDescriptionRun12.familyLength = fontLatin.size();
2169 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2170 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2171 fontDescriptionRun12.familyDefined = true;
2172 fontDescriptionRun12.weightDefined = false;
2173 fontDescriptionRun12.widthDefined = false;
2174 fontDescriptionRun12.slantDefined = false;
2175 fontDescriptionRun12.sizeDefined = false;
2177 // Set a known font description
2178 FontDescriptionRun fontDescriptionRun13;
2179 fontDescriptionRun13.characterRun.characterIndex = 145u;
2180 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2181 fontDescriptionRun13.familyLength = fontHebrew.size();
2182 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2183 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2184 fontDescriptionRun13.familyDefined = true;
2185 fontDescriptionRun13.weightDefined = false;
2186 fontDescriptionRun13.widthDefined = false;
2187 fontDescriptionRun13.slantDefined = false;
2188 fontDescriptionRun13.sizeDefined = false;
2190 // Set a known font description
2191 FontDescriptionRun fontDescriptionRun14;
2192 fontDescriptionRun14.characterRun.characterIndex = 154u;
2193 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2194 fontDescriptionRun14.familyLength = fontLatin.size();
2195 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2196 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2197 fontDescriptionRun14.familyDefined = true;
2198 fontDescriptionRun14.weightDefined = false;
2199 fontDescriptionRun14.widthDefined = false;
2200 fontDescriptionRun14.slantDefined = false;
2201 fontDescriptionRun14.sizeDefined = false;
2203 // Set a known font description
2204 FontDescriptionRun fontDescriptionRun15;
2205 fontDescriptionRun15.characterRun.characterIndex = 156u;
2206 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2207 fontDescriptionRun15.familyLength = fontHebrew.size();
2208 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2209 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2210 fontDescriptionRun15.familyDefined = true;
2211 fontDescriptionRun15.weightDefined = false;
2212 fontDescriptionRun15.widthDefined = false;
2213 fontDescriptionRun15.slantDefined = false;
2214 fontDescriptionRun15.sizeDefined = false;
2216 // Set a known font description
2217 FontDescriptionRun fontDescriptionRun16;
2218 fontDescriptionRun16.characterRun.characterIndex = 166u;
2219 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2220 fontDescriptionRun16.familyLength = fontLatin.size();
2221 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2222 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2223 fontDescriptionRun16.familyDefined = true;
2224 fontDescriptionRun16.weightDefined = false;
2225 fontDescriptionRun16.widthDefined = false;
2226 fontDescriptionRun16.slantDefined = false;
2227 fontDescriptionRun16.sizeDefined = false;
2229 // Set a known font description
2230 FontDescriptionRun fontDescriptionRun17;
2231 fontDescriptionRun17.characterRun.characterIndex = 178u;
2232 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2233 fontDescriptionRun17.familyLength = fontArabic.size();
2234 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2235 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2236 fontDescriptionRun17.familyDefined = true;
2237 fontDescriptionRun17.weightDefined = false;
2238 fontDescriptionRun17.widthDefined = false;
2239 fontDescriptionRun17.slantDefined = false;
2240 fontDescriptionRun17.sizeDefined = false;
2242 Vector<FontDescriptionRun> fontDescriptionRuns;
2243 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2244 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2245 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2246 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2247 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2248 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2249 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2250 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2251 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2252 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2253 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2254 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2255 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2256 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2257 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2258 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2259 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2260 Size textArea(100.f, 300.f);
2261 Size layoutSize(92.f, 361.f);
2264 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2265 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2266 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
2267 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 67.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
2268 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2269 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2270 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2271 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2272 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f, 42.f, -12.f,
2273 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2274 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
2275 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2276 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2277 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2278 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
2279 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2280 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2281 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
2284 struct LineRun line01 =
2297 struct LineRun line02 =
2310 struct LineRun line03 =
2323 struct LineRun line04 =
2336 struct LineRun line05 =
2349 struct LineRun line06 =
2362 struct LineRun line07 =
2375 struct LineRun line08 =
2388 struct LineRun line09 =
2401 struct LineRun line10 =
2414 struct LineRun line11 =
2427 struct LineRun line12 =
2440 struct LineRun line13 =
2453 struct LineRun line14 =
2466 struct LineRun line15 =
2479 struct LineRun line16 =
2492 struct LineRun line17 =
2505 struct LineRun line18 =
2518 struct LineRun line19 =
2531 Vector<LineRun> lines;
2532 lines.PushBack( line01 );
2533 lines.PushBack( line02 );
2534 lines.PushBack( line03 );
2535 lines.PushBack( line04 );
2536 lines.PushBack( line05 );
2537 lines.PushBack( line06 );
2538 lines.PushBack( line07 );
2539 lines.PushBack( line08 );
2540 lines.PushBack( line09 );
2541 lines.PushBack( line10 );
2542 lines.PushBack( line11 );
2543 lines.PushBack( line12 );
2544 lines.PushBack( line13 );
2545 lines.PushBack( line14 );
2546 lines.PushBack( line15 );
2547 lines.PushBack( line16 );
2548 lines.PushBack( line17 );
2549 lines.PushBack( line18 );
2550 lines.PushBack( line19 );
2552 LayoutTextData data =
2554 "Layout bidirectional text.",
2555 "Hello world demo שלום עולם.\n"
2556 "مرحبا بالعالم hello world שלום עולם\n"
2557 "שלום עולם hello world demo.\n"
2558 "hello world مرحبا بالعالم שלום עולם\n"
2559 "Hello world demo שלום עולם.\n"
2560 "שלום עולם hello world مرحبا بالعالم\n",
2563 fontDescriptionRuns.Begin(),
2569 Layout::Engine::MULTI_LINE_BOX,
2576 if( !LayoutTextTest( data ) )
2578 tet_result(TET_FAIL);
2581 tet_result(TET_PASS);
2585 int UtcDaliTextUpdateLayout03(void)
2587 ToolkitTestApplication application;
2588 tet_infoline(" UtcDaliTextUpdateLayout03");
2590 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2592 const std::string fontLatin( "TizenSans" );
2593 const std::string fontHebrew( "TizenSansHebrew" );
2594 const std::string fontArabic( "TizenSansArabic" );
2596 // Set a known font description
2597 FontDescriptionRun fontDescriptionRun01;
2598 fontDescriptionRun01.characterRun.characterIndex = 0u;
2599 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2600 fontDescriptionRun01.familyLength = fontLatin.size();
2601 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2602 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2603 fontDescriptionRun01.familyDefined = true;
2604 fontDescriptionRun01.weightDefined = false;
2605 fontDescriptionRun01.widthDefined = false;
2606 fontDescriptionRun01.slantDefined = false;
2607 fontDescriptionRun01.sizeDefined = false;
2609 // Set a known font description
2610 FontDescriptionRun fontDescriptionRun02;
2611 fontDescriptionRun02.characterRun.characterIndex = 17u;
2612 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2613 fontDescriptionRun02.familyLength = fontHebrew.size();
2614 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2615 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2616 fontDescriptionRun02.familyDefined = true;
2617 fontDescriptionRun02.weightDefined = false;
2618 fontDescriptionRun02.widthDefined = false;
2619 fontDescriptionRun02.slantDefined = false;
2620 fontDescriptionRun02.sizeDefined = false;
2622 // Set a known font description
2623 FontDescriptionRun fontDescriptionRun03;
2624 fontDescriptionRun03.characterRun.characterIndex = 26u;
2625 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2626 fontDescriptionRun03.familyLength = fontLatin.size();
2627 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2628 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2629 fontDescriptionRun03.familyDefined = true;
2630 fontDescriptionRun03.weightDefined = false;
2631 fontDescriptionRun03.widthDefined = false;
2632 fontDescriptionRun03.slantDefined = false;
2633 fontDescriptionRun03.sizeDefined = false;
2635 // Set a known font description
2636 FontDescriptionRun fontDescriptionRun04;
2637 fontDescriptionRun04.characterRun.characterIndex = 28u;
2638 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2639 fontDescriptionRun04.familyLength = fontArabic.size();
2640 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2641 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2642 fontDescriptionRun04.familyDefined = true;
2643 fontDescriptionRun04.weightDefined = false;
2644 fontDescriptionRun04.widthDefined = false;
2645 fontDescriptionRun04.slantDefined = false;
2646 fontDescriptionRun04.sizeDefined = false;
2648 // Set a known font description
2649 FontDescriptionRun fontDescriptionRun05;
2650 fontDescriptionRun05.characterRun.characterIndex = 42u;
2651 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2652 fontDescriptionRun05.familyLength = fontLatin.size();
2653 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2654 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2655 fontDescriptionRun05.familyDefined = true;
2656 fontDescriptionRun05.weightDefined = false;
2657 fontDescriptionRun05.widthDefined = false;
2658 fontDescriptionRun05.slantDefined = false;
2659 fontDescriptionRun05.sizeDefined = false;
2661 // Set a known font description
2662 FontDescriptionRun fontDescriptionRun06;
2663 fontDescriptionRun06.characterRun.characterIndex = 54u;
2664 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2665 fontDescriptionRun06.familyLength = fontHebrew.size();
2666 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2667 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2668 fontDescriptionRun06.familyDefined = true;
2669 fontDescriptionRun06.weightDefined = false;
2670 fontDescriptionRun06.widthDefined = false;
2671 fontDescriptionRun06.slantDefined = false;
2672 fontDescriptionRun06.sizeDefined = false;
2674 // Set a known font description
2675 FontDescriptionRun fontDescriptionRun07;
2676 fontDescriptionRun07.characterRun.characterIndex = 64u;
2677 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2678 fontDescriptionRun07.familyLength = fontHebrew.size();
2679 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2680 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2681 fontDescriptionRun07.familyDefined = true;
2682 fontDescriptionRun07.weightDefined = false;
2683 fontDescriptionRun07.widthDefined = false;
2684 fontDescriptionRun07.slantDefined = false;
2685 fontDescriptionRun07.sizeDefined = false;
2687 // Set a known font description
2688 FontDescriptionRun fontDescriptionRun08;
2689 fontDescriptionRun08.characterRun.characterIndex = 74u;
2690 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2691 fontDescriptionRun08.familyLength = fontLatin.size();
2692 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2693 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2694 fontDescriptionRun08.familyDefined = true;
2695 fontDescriptionRun08.weightDefined = false;
2696 fontDescriptionRun08.widthDefined = false;
2697 fontDescriptionRun08.slantDefined = false;
2698 fontDescriptionRun08.sizeDefined = false;
2700 // Set a known font description
2701 FontDescriptionRun fontDescriptionRun09;
2702 fontDescriptionRun09.characterRun.characterIndex = 92u;
2703 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2704 fontDescriptionRun09.familyLength = fontLatin.size();
2705 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2706 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2707 fontDescriptionRun09.familyDefined = true;
2708 fontDescriptionRun09.weightDefined = false;
2709 fontDescriptionRun09.widthDefined = false;
2710 fontDescriptionRun09.slantDefined = false;
2711 fontDescriptionRun09.sizeDefined = false;
2713 // Set a known font description
2714 FontDescriptionRun fontDescriptionRun10;
2715 fontDescriptionRun10.characterRun.characterIndex = 104u;
2716 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2717 fontDescriptionRun10.familyLength = fontArabic.size();
2718 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2719 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2720 fontDescriptionRun10.familyDefined = true;
2721 fontDescriptionRun10.weightDefined = false;
2722 fontDescriptionRun10.widthDefined = false;
2723 fontDescriptionRun10.slantDefined = false;
2724 fontDescriptionRun10.sizeDefined = false;
2726 // Set a known font description
2727 FontDescriptionRun fontDescriptionRun11;
2728 fontDescriptionRun11.characterRun.characterIndex = 118u;
2729 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2730 fontDescriptionRun11.familyLength = fontHebrew.size();
2731 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2732 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2733 fontDescriptionRun11.familyDefined = true;
2734 fontDescriptionRun11.weightDefined = false;
2735 fontDescriptionRun11.widthDefined = false;
2736 fontDescriptionRun11.slantDefined = false;
2737 fontDescriptionRun11.sizeDefined = false;
2739 // Set a known font description
2740 FontDescriptionRun fontDescriptionRun12;
2741 fontDescriptionRun12.characterRun.characterIndex = 128u;
2742 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2743 fontDescriptionRun12.familyLength = fontLatin.size();
2744 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2745 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2746 fontDescriptionRun12.familyDefined = true;
2747 fontDescriptionRun12.weightDefined = false;
2748 fontDescriptionRun12.widthDefined = false;
2749 fontDescriptionRun12.slantDefined = false;
2750 fontDescriptionRun12.sizeDefined = false;
2752 // Set a known font description
2753 FontDescriptionRun fontDescriptionRun13;
2754 fontDescriptionRun13.characterRun.characterIndex = 145u;
2755 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2756 fontDescriptionRun13.familyLength = fontHebrew.size();
2757 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2758 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2759 fontDescriptionRun13.familyDefined = true;
2760 fontDescriptionRun13.weightDefined = false;
2761 fontDescriptionRun13.widthDefined = false;
2762 fontDescriptionRun13.slantDefined = false;
2763 fontDescriptionRun13.sizeDefined = false;
2765 // Set a known font description
2766 FontDescriptionRun fontDescriptionRun14;
2767 fontDescriptionRun14.characterRun.characterIndex = 154u;
2768 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2769 fontDescriptionRun14.familyLength = fontLatin.size();
2770 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2771 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2772 fontDescriptionRun14.familyDefined = true;
2773 fontDescriptionRun14.weightDefined = false;
2774 fontDescriptionRun14.widthDefined = false;
2775 fontDescriptionRun14.slantDefined = false;
2776 fontDescriptionRun14.sizeDefined = false;
2778 // Set a known font description
2779 FontDescriptionRun fontDescriptionRun15;
2780 fontDescriptionRun15.characterRun.characterIndex = 156u;
2781 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2782 fontDescriptionRun15.familyLength = fontHebrew.size();
2783 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2784 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2785 fontDescriptionRun15.familyDefined = true;
2786 fontDescriptionRun15.weightDefined = false;
2787 fontDescriptionRun15.widthDefined = false;
2788 fontDescriptionRun15.slantDefined = false;
2789 fontDescriptionRun15.sizeDefined = false;
2791 // Set a known font description
2792 FontDescriptionRun fontDescriptionRun16;
2793 fontDescriptionRun16.characterRun.characterIndex = 166u;
2794 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2795 fontDescriptionRun16.familyLength = fontLatin.size();
2796 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2797 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2798 fontDescriptionRun16.familyDefined = true;
2799 fontDescriptionRun16.weightDefined = false;
2800 fontDescriptionRun16.widthDefined = false;
2801 fontDescriptionRun16.slantDefined = false;
2802 fontDescriptionRun16.sizeDefined = false;
2804 // Set a known font description
2805 FontDescriptionRun fontDescriptionRun17;
2806 fontDescriptionRun17.characterRun.characterIndex = 178u;
2807 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2808 fontDescriptionRun17.familyLength = fontArabic.size();
2809 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2810 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2811 fontDescriptionRun17.familyDefined = true;
2812 fontDescriptionRun17.weightDefined = false;
2813 fontDescriptionRun17.widthDefined = false;
2814 fontDescriptionRun17.slantDefined = false;
2815 fontDescriptionRun17.sizeDefined = false;
2817 Vector<FontDescriptionRun> fontDescriptionRuns;
2818 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2819 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2820 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2821 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2822 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2823 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2824 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2825 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2826 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2827 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2828 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2829 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2830 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2831 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2832 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2833 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2834 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2835 Size textArea(100.f, 300.f);
2836 Size layoutSize(92.f, 361.f);
2839 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2840 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2841 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
2842 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 67.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
2843 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2844 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2845 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2846 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2847 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -2.f, 42.f, -12.f,
2848 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2849 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
2850 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2851 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2852 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2853 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -2.f, 33.f, -12.f,
2854 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2855 1.f, -13.f, 9.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2856 0.f, -8.f, 7.f, -6.f, 12.f, -8.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 36.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
2859 struct LineRun line01 =
2872 struct LineRun line02 =
2885 struct LineRun line03 =
2898 struct LineRun line04 =
2911 struct LineRun line05 =
2924 struct LineRun line06 =
2937 struct LineRun line07 =
2950 struct LineRun line08 =
2963 struct LineRun line09 =
2976 struct LineRun line10 =
2989 struct LineRun line11 =
3002 struct LineRun line12 =
3015 struct LineRun line13 =
3028 struct LineRun line14 =
3041 struct LineRun line15 =
3054 struct LineRun line16 =
3067 struct LineRun line17 =
3080 struct LineRun line18 =
3093 struct LineRun line19 =
3106 Vector<LineRun> lines;
3107 lines.PushBack( line01 );
3108 lines.PushBack( line02 );
3109 lines.PushBack( line03 );
3110 lines.PushBack( line04 );
3111 lines.PushBack( line05 );
3112 lines.PushBack( line06 );
3113 lines.PushBack( line07 );
3114 lines.PushBack( line08 );
3115 lines.PushBack( line09 );
3116 lines.PushBack( line10 );
3117 lines.PushBack( line11 );
3118 lines.PushBack( line12 );
3119 lines.PushBack( line13 );
3120 lines.PushBack( line14 );
3121 lines.PushBack( line15 );
3122 lines.PushBack( line16 );
3123 lines.PushBack( line17 );
3124 lines.PushBack( line18 );
3125 lines.PushBack( line19 );
3127 LayoutTextData data =
3129 "Layout bidirectional text.",
3130 "Hello world demo שלום עולם.\n"
3131 "مرحبا بالعالم hello world שלום עולם\n"
3132 "שלום עולם hello world demo.\n"
3133 "hello world مرحبا بالعالم שלום עולם\n"
3134 "Hello world demo שלום עולם.\n"
3135 "שלום עולם hello world مرحبا بالعالم\n",
3138 fontDescriptionRuns.Begin(),
3144 Layout::Engine::MULTI_LINE_BOX,
3151 if( !LayoutTextTest( data ) )
3153 tet_result(TET_FAIL);
3156 tet_result(TET_PASS);
3160 int UtcDaliTextLayoutEllipsis01(void)
3162 ToolkitTestApplication application;
3163 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3165 // Layout single-line LTR text with ellipsis.
3167 const std::string fontLatin( "TizenSans" );
3169 // Set a known font description
3170 FontDescriptionRun fontDescriptionRun01;
3171 fontDescriptionRun01.characterRun.characterIndex = 0u;
3172 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3173 fontDescriptionRun01.familyLength = fontLatin.size();
3174 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3175 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3176 fontDescriptionRun01.familyDefined = true;
3177 fontDescriptionRun01.weightDefined = false;
3178 fontDescriptionRun01.widthDefined = false;
3179 fontDescriptionRun01.slantDefined = false;
3180 fontDescriptionRun01.sizeDefined = false;
3182 Vector<FontDescriptionRun> fontDescriptionRuns;
3183 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3185 struct LineRun line01 =
3198 Vector<LineRun> lines;
3199 lines.PushBack( line01 );
3203 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f, 83.f, -13.f,
3206 Size textArea( 100.f, 50.f );
3207 Size layoutSize( 100.f, 19.f );
3209 LayoutTextData data =
3211 "Layout single-line LTR text with ellipsis.",
3212 "Hello world demo hello world demo hello world demo.",
3215 fontDescriptionRuns.Begin(),
3221 Layout::Engine::SINGLE_LINE_BOX,
3228 if( !LayoutTextTest( data ) )
3230 tet_result(TET_FAIL);
3233 tet_result(TET_PASS);
3237 int UtcDaliTextLayoutEllipsis02(void)
3239 ToolkitTestApplication application;
3240 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3242 // Layout multi-line LTR text with ellipsis.
3244 const std::string fontLatin( "TizenSans" );
3246 // Set a known font description
3247 FontDescriptionRun fontDescriptionRun01;
3248 fontDescriptionRun01.characterRun.characterIndex = 0u;
3249 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3250 fontDescriptionRun01.familyLength = fontLatin.size();
3251 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3252 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3253 fontDescriptionRun01.familyDefined = true;
3254 fontDescriptionRun01.weightDefined = false;
3255 fontDescriptionRun01.widthDefined = false;
3256 fontDescriptionRun01.slantDefined = false;
3257 fontDescriptionRun01.sizeDefined = false;
3259 Vector<FontDescriptionRun> fontDescriptionRuns;
3260 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3262 struct LineRun line01 =
3275 struct LineRun line02 =
3288 Vector<LineRun> lines;
3289 lines.PushBack( line01 );
3290 lines.PushBack( line02 );
3294 1.f, -12.f, 11.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
3295 0.f, -13.f, 9.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -13.f, 52.f, -9.f, 61.f, -13.f, 65.f, -13.f, 68.f, -9.f, 77.f, -0.f, 81.f, -9.f,
3298 Size textArea( 100.f, 50.f );
3299 Size layoutSize( 100.f, 38.f );
3301 LayoutTextData data =
3303 "Layout multi-line LTR text with ellipsis.",
3304 "Hello world demo hello world demo hello world demo.",
3307 fontDescriptionRuns.Begin(),
3313 Layout::Engine::MULTI_LINE_BOX,
3320 if( !LayoutTextTest( data ) )
3322 tet_result(TET_FAIL);
3325 tet_result(TET_PASS);
3329 int UtcDaliTextLayoutEllipsis03(void)
3331 ToolkitTestApplication application;
3332 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3334 // Layout single-line RTL text with ellipsis.
3336 const std::string fontHebrew( "TizenSansHebrew" );
3337 const std::string fontArabic( "TizenSansArabic" );
3339 // Set a known font description
3340 FontDescriptionRun fontDescriptionRun01;
3341 fontDescriptionRun01.characterRun.characterIndex = 0u;
3342 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3343 fontDescriptionRun01.familyLength = fontHebrew.size();
3344 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3345 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3346 fontDescriptionRun01.familyDefined = true;
3347 fontDescriptionRun01.weightDefined = false;
3348 fontDescriptionRun01.widthDefined = false;
3349 fontDescriptionRun01.slantDefined = false;
3350 fontDescriptionRun01.sizeDefined = false;
3352 FontDescriptionRun fontDescriptionRun02;
3353 fontDescriptionRun02.characterRun.characterIndex = 10u;
3354 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3355 fontDescriptionRun02.familyLength = fontArabic.size();
3356 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3357 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3358 fontDescriptionRun02.familyDefined = true;
3359 fontDescriptionRun02.weightDefined = false;
3360 fontDescriptionRun02.widthDefined = false;
3361 fontDescriptionRun02.slantDefined = false;
3362 fontDescriptionRun02.sizeDefined = false;
3364 FontDescriptionRun fontDescriptionRun03;
3365 fontDescriptionRun03.characterRun.characterIndex = 24u;
3366 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3367 fontDescriptionRun03.familyLength = fontHebrew.size();
3368 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3369 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3370 fontDescriptionRun03.familyDefined = true;
3371 fontDescriptionRun03.weightDefined = false;
3372 fontDescriptionRun03.widthDefined = false;
3373 fontDescriptionRun03.slantDefined = false;
3374 fontDescriptionRun03.sizeDefined = false;
3376 FontDescriptionRun fontDescriptionRun04;
3377 fontDescriptionRun04.characterRun.characterIndex = 34u;
3378 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3379 fontDescriptionRun04.familyLength = fontArabic.size();
3380 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3381 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3382 fontDescriptionRun04.familyDefined = true;
3383 fontDescriptionRun04.weightDefined = false;
3384 fontDescriptionRun04.widthDefined = false;
3385 fontDescriptionRun04.slantDefined = false;
3386 fontDescriptionRun04.sizeDefined = false;
3388 FontDescriptionRun fontDescriptionRun05;
3389 fontDescriptionRun05.characterRun.characterIndex = 48u;
3390 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3391 fontDescriptionRun05.familyLength = fontHebrew.size();
3392 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3393 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3394 fontDescriptionRun05.familyDefined = true;
3395 fontDescriptionRun05.weightDefined = false;
3396 fontDescriptionRun05.widthDefined = false;
3397 fontDescriptionRun05.slantDefined = false;
3398 fontDescriptionRun05.sizeDefined = false;
3400 FontDescriptionRun fontDescriptionRun06;
3401 fontDescriptionRun06.characterRun.characterIndex = 58u;
3402 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3403 fontDescriptionRun06.familyLength = fontArabic.size();
3404 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3405 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3406 fontDescriptionRun06.familyDefined = true;
3407 fontDescriptionRun06.weightDefined = false;
3408 fontDescriptionRun06.widthDefined = false;
3409 fontDescriptionRun06.slantDefined = false;
3410 fontDescriptionRun06.sizeDefined = false;
3412 Vector<FontDescriptionRun> fontDescriptionRuns;
3413 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3414 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3415 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3416 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3417 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3418 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3420 struct LineRun line01 =
3433 Vector<LineRun> lines;
3434 lines.PushBack( line01 );
3438 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f, 69.f, -8.f, 76.f, -6.f, 81.f, -8.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
3441 Size textArea( 100.f, 50.f );
3442 Size layoutSize( 100.f, 19.f );
3444 LayoutTextData data =
3446 "Layout single-line RTL text with ellipsis.",
3447 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3450 fontDescriptionRuns.Begin(),
3456 Layout::Engine::SINGLE_LINE_BOX,
3463 if( !LayoutTextTest( data ) )
3465 tet_result(TET_FAIL);
3468 tet_result(TET_PASS);
3472 int UtcDaliTextLayoutEllipsis04(void)
3474 ToolkitTestApplication application;
3475 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3477 // Layout multi-line RTL text with ellipsis.
3479 const std::string fontHebrew( "TizenSansHebrew" );
3480 const std::string fontArabic( "TizenSansArabic" );
3482 // Set a known font description
3483 FontDescriptionRun fontDescriptionRun01;
3484 fontDescriptionRun01.characterRun.characterIndex = 0u;
3485 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3486 fontDescriptionRun01.familyLength = fontHebrew.size();
3487 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3488 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3489 fontDescriptionRun01.familyDefined = true;
3490 fontDescriptionRun01.weightDefined = false;
3491 fontDescriptionRun01.widthDefined = false;
3492 fontDescriptionRun01.slantDefined = false;
3493 fontDescriptionRun01.sizeDefined = false;
3495 FontDescriptionRun fontDescriptionRun02;
3496 fontDescriptionRun02.characterRun.characterIndex = 10u;
3497 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3498 fontDescriptionRun02.familyLength = fontArabic.size();
3499 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3500 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3501 fontDescriptionRun02.familyDefined = true;
3502 fontDescriptionRun02.weightDefined = false;
3503 fontDescriptionRun02.widthDefined = false;
3504 fontDescriptionRun02.slantDefined = false;
3505 fontDescriptionRun02.sizeDefined = false;
3507 FontDescriptionRun fontDescriptionRun03;
3508 fontDescriptionRun03.characterRun.characterIndex = 24u;
3509 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3510 fontDescriptionRun03.familyLength = fontHebrew.size();
3511 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3512 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3513 fontDescriptionRun03.familyDefined = true;
3514 fontDescriptionRun03.weightDefined = false;
3515 fontDescriptionRun03.widthDefined = false;
3516 fontDescriptionRun03.slantDefined = false;
3517 fontDescriptionRun03.sizeDefined = false;
3519 FontDescriptionRun fontDescriptionRun04;
3520 fontDescriptionRun04.characterRun.characterIndex = 34u;
3521 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3522 fontDescriptionRun04.familyLength = fontArabic.size();
3523 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3524 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3525 fontDescriptionRun04.familyDefined = true;
3526 fontDescriptionRun04.weightDefined = false;
3527 fontDescriptionRun04.widthDefined = false;
3528 fontDescriptionRun04.slantDefined = false;