Gecko:LineBreakerAPI: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 17: | Line 17: | ||
PRUint32 mLength; | PRUint32 mLength; | ||
enum { CHAR, UNICHAR } mCharacterType; | enum { CHAR, UNICHAR } mCharacterType; | ||
PRPackedBool | PRPackedBool mNeedBreakData; | ||
/* aBreakBefore points to mLength + 1 bytes, set to PR_TRUE if we can | |||
break *before* the corresponding character of mText. This gets called | |||
only if mNeedBreakData is true. */ | |||
virtual void SetBreaks(TextChunk* aChunk, PRPackedBool* aBreakBefore) = 0; | |||
}; | }; | ||
| Line 26: | Line 28: | ||
* Asks the linebreaker to compute line break opportunities for a block | * Asks the linebreaker to compute line break opportunities for a block | ||
* of text. The text is a sequence of text chunks. The chunks with | * of text. The text is a sequence of text chunks. The chunks with | ||
* | * mNeedBreakData set to true get break data computed for them and then | ||
* | * set by calling SetBreaks on the chunk. | ||
*/ | */ | ||
void ComputeLineBreaks(const TextChunk* aTextChunks, PRUint32 aNumChunks); | void ComputeLineBreaks(const TextChunk* aTextChunks, PRUint32 aNumChunks); | ||
}; | }; | ||
Revision as of 02:09, 17 November 2006
New Linebreaking API
Overview
- Compute linebreaks for a run of text with one API call, where the run of text begins and ends with either a known line-break or non-text content
- The run of text can contain text from different DOM nodes
- We only need to compute linebreaks for some parts of the text (for other parts of the text we already know the linebreaks or there can't be linebreaks because of CSS white-space override)
- There should only be ONE linebreaker algorithm seen by layout. If we need language-specific behaviour, the linebreaker should implement that internally.
Suggestion
class nsLineBreaker {
public:
struct TextChunk {
nsIAtom* mLanguageHint;
const void* mCharacters;
PRUint32 mLength;
enum { CHAR, UNICHAR } mCharacterType;
PRPackedBool mNeedBreakData;
/* aBreakBefore points to mLength + 1 bytes, set to PR_TRUE if we can
break *before* the corresponding character of mText. This gets called
only if mNeedBreakData is true. */
virtual void SetBreaks(TextChunk* aChunk, PRPackedBool* aBreakBefore) = 0;
};
/**
* Asks the linebreaker to compute line break opportunities for a block
* of text. The text is a sequence of text chunks. The chunks with
* mNeedBreakData set to true get break data computed for them and then
* set by calling SetBreaks on the chunk.
*/
void ComputeLineBreaks(const TextChunk* aTextChunks, PRUint32 aNumChunks);
};