1 #ifndef __DALI_TOOLKIT_INTERNAL_TEXT_VIEW_WORD_PROCESSOR_H__
2 #define __DALI_TOOLKIT_INTERNAL_TEXT_VIEW_WORD_PROCESSOR_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali-toolkit/internal/controls/text-view/text-view-impl.h>
33 namespace TextViewProcessor
37 * Creates a data structure with info to layout the word, and data structures with useful info to modify the layout data structure if characters are added or removed.
39 * @param[in] word The styled word.
40 * @param[out] wordLayoutInfo Layout info for all characters of the word.
42 void CreateWordTextInfo( const MarkupProcessor::StyledTextArray& word,
43 WordLayoutInfo& wordLayoutInfo );
46 * Removes a given number of characters from the given word.
48 * It calls the RemoveCharactersFromWord() function to remove characters from the word.
50 * If the word is a white space \e mergeWords will return \e true and \e textInfoMergeIndicesBegin and \e textInfoMergeIndicesEnd will be set to merge the two adjacent words.
51 * If the word is a new line character \e mergeLines will return \e true and \e textInfoMergeIndicesBegin and \e textInfoMergeIndicesEnd will be set to merge the two lines.
53 * @param[in,out] relayoutData Natural size (metrics), layout, text-actor info.
54 * @param[in] numberOfCharacters The number of characters to be deleted.
55 * @param[out] mergeWords Whether adjacent words need to be merged.
56 * @param[out] mergeLines Whether current line need to be merged with the next one.
57 * @param[in,out] textInfoIndicesBegin Indices to the line, word and characters from where to delete characters. It returns from where words need to be removed.
58 * @param[out] textInfoIndicesEnd If lines or words need to be merged it returns info to delete them (If a word is merged, it has to be removed. Equal for lines).
59 * @param[out] textInfoMergeIndicesBegin The indices to the first part of the line and word to be merged.
60 * @param[out] textInfoMergeIndicesEnd The indices to the last part of the line and word to be merged.
61 * @param[in,out] lineLayout Layout info of the line where the word is located.
62 * @param[out] removedTextActors Stores handles of temoved text-actors.
64 void RemoveCharactersFromWordInfo( TextView::RelayoutData& relayoutData,
65 std::size_t numberOfCharacters,
68 TextInfoIndices& textInfoIndicesBegin,
69 TextInfoIndices& textInfoIndicesEnd,
70 TextInfoIndices& textInfoMergeIndicesBegin,
71 TextInfoIndices& textInfoMergeIndicesEnd,
72 LineLayoutInfo& lineLayout,
73 std::vector<TextActor>& removedTextActors );
75 * Removes a given number of characters from the given word.
77 * @pre \e positon and \e position + \e numberOfCharacters can't exceed the bounds of the word.
79 * @param[in] position Character index within the word with the starting position to be deleted.
80 * @param[in] numberOfCharacters The number of characters to be deleted.
81 * @param[in,out] wordLayout The input is the layout info of the word. The output is the layout info of the word without the removed characters.
83 void RemoveCharactersFromWord( std::size_t position,
84 std::size_t numberOfCharacters,
85 WordLayoutInfo& wordLayout );
88 * Splits a word in two.
90 * Removes part of the text from the input word and creates a new word with the removed text.
92 * i.e. The result of split 'word' by the position 3 would be 'wor' and 'd'.
94 * @note It deletes whatever there is in the last part of the word.
96 * @param[in] position Character index where to split the word.
97 * @param[in,out] firstWordLayoutInfo The input is the layout info of the given word. The output is the first part of the input word (from the character \e 0 to the character \e position - \e 1).
98 * @param[out] lastWordLayoutInfo Layout info of the last part of the given word ( from the character \e position to the end of the word).
100 void SplitWord( std::size_t position,
101 WordLayoutInfo& firstWordLayoutInfo,
102 WordLayoutInfo& lastWordLayoutInfo );
105 * Merges the two given words by adding characters of the last word to the firs one.
107 * @note Does nothing if last part of the word is empty.
108 * @note If the first part of the word is empty it just copy the last part to it.
109 * @note It asserts if the first or the last word is a word separator (white space) or a line separator (new line character)
111 * @param[in,out] firstWordLayoutInfo The input is the layout info of the first word. The output is the layout info of the merged word.
112 * @param[in] lastWordLayoutInfo Layout info of the last word.
114 void MergeWord( WordLayoutInfo& firstWordLayoutInfo,
115 const WordLayoutInfo& lastWordLayoutInfo );
118 * Retrieves the layout information of the first character of the given word.
120 * @param[in] wordLayoutInfo The word layout.
122 * @return Layout information of the first character of the word.
124 CharacterLayoutInfo GetFirstCharacterLayoutInfo( const WordLayoutInfo& wordLayoutInfo );
127 * Retrieves the layout information of the last character of the given word.
129 * @param[in] wordLayoutInfo The word layout.
131 * @return Layout information of the last character of the word.
133 CharacterLayoutInfo GetLastCharacterLayoutInfo( const WordLayoutInfo& wordLayoutInfo );
136 * Collects text-actors from the given word, within the given indices, and stores them into the text-actor vector.
138 * @param[out] textActors Stores the text-actors of the given word.
139 * @param[in] characterIndexBegin The first text-actor to be stored.
140 * @param[in] characterIndexEnd The last text-actor to be stored.
142 void CollectTextActors( std::vector<TextActor>& textActors, const WordLayoutInfo& word, std::size_t characterIndexBegin, std::size_t characterIndexEnd );
145 * Collects text-actors from the given line, within the given indices, and stores them into the text-actor vector.
147 * @param[out] textActors Stores the text-actors of the given line.
148 * @param[in] line The line with the words.
149 * @param[in] wordIndexBegin Index to the first word.
150 * @param[in] wordIndexEnd Index to the last word.
152 void CollectTextActorsFromWords( std::vector<TextActor>& textActors, const LineLayoutInfo& line, std::size_t wordIndexBegin, std::size_t wordIndexEnd );
154 } //namespace TextViewProcessor
156 } //namespace Internal
158 } //namespace Toolkit
162 #endif // __DALI_TOOLKIT_INTERNAL_TEXT_VIEW_WORD_PROCESSOR_H__