91 lines
2.5 KiB
C
91 lines
2.5 KiB
C
|
/**
|
||
|
Bidirectional text processing.
|
||
|
|
||
|
Derived from the SmartOffice code, which is itself derived
|
||
|
from the example unicode standard code. Original copyright
|
||
|
messages follow:
|
||
|
|
||
|
Copyright (C) Picsel, 2004-2008. All Rights Reserved.
|
||
|
|
||
|
Processes Unicode text by arranging the characters into an order
|
||
|
suitable for display. E.g. Hebrew text will be arranged from
|
||
|
right-to-left and any English within the text will remain in the
|
||
|
left-to-right order.
|
||
|
|
||
|
This is an implementation of the Unicode Bidirectional Algorithm
|
||
|
which can be found here: http://www.unicode.org/reports/tr9/ and
|
||
|
is based on the reference implementation found on Unicode.org.
|
||
|
*/
|
||
|
|
||
|
#ifndef FITZ_BIDI_H
|
||
|
#define FITZ_BIDI_H
|
||
|
|
||
|
#include "mupdf/fitz/system.h"
|
||
|
#include "mupdf/fitz/context.h"
|
||
|
|
||
|
/* Implementation details: subject to change. */
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
FZ_BIDI_LTR = 0,
|
||
|
FZ_BIDI_RTL = 1,
|
||
|
FZ_BIDI_NEUTRAL = 2
|
||
|
}
|
||
|
fz_bidi_direction;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
FZ_BIDI_CLASSIFY_WHITE_SPACE = 1,
|
||
|
FZ_BIDI_REPLACE_TAB = 2
|
||
|
}
|
||
|
fz_bidi_flags;
|
||
|
|
||
|
/**
|
||
|
Prototype for callback function supplied to fz_bidi_fragment_text.
|
||
|
|
||
|
@param fragment first character in fragment
|
||
|
@param fragmentLen number of characters in fragment
|
||
|
@param bidiLevel The bidirectional level for this text.
|
||
|
The bottom bit will be set iff block
|
||
|
should concatenate with other blocks as
|
||
|
right-to-left
|
||
|
@param script the script in use for this fragment (other
|
||
|
than common or inherited)
|
||
|
@param arg data from caller of Bidi_fragmentText
|
||
|
*/
|
||
|
typedef void (fz_bidi_fragment_fn)(const uint32_t *fragment,
|
||
|
size_t fragmentLen,
|
||
|
int bidiLevel,
|
||
|
int script,
|
||
|
void *arg);
|
||
|
|
||
|
/**
|
||
|
Partitions the given Unicode sequence into one or more
|
||
|
unidirectional fragments and invokes the given callback
|
||
|
function for each fragment.
|
||
|
|
||
|
For example, if directionality of text is:
|
||
|
0123456789
|
||
|
rrlllrrrrr,
|
||
|
we'll invoke callback with:
|
||
|
&text[0], length == 2
|
||
|
&text[2], length == 3
|
||
|
&text[5], length == 5
|
||
|
|
||
|
@param[in] text start of Unicode sequence
|
||
|
@param[in] textlen number of Unicodes to analyse
|
||
|
@param[in] baseDir direction of paragraph (specify FZ_BIDI_NEUTRAL to force auto-detection)
|
||
|
@param[in] callback function to be called for each fragment
|
||
|
@param[in] arg data to be passed to the callback function
|
||
|
@param[in] flags flags to control operation (see fz_bidi_flags above)
|
||
|
*/
|
||
|
void fz_bidi_fragment_text(fz_context *ctx,
|
||
|
const uint32_t *text,
|
||
|
size_t textlen,
|
||
|
fz_bidi_direction *baseDir,
|
||
|
fz_bidi_fragment_fn *callback,
|
||
|
void *arg,
|
||
|
int flags);
|
||
|
|
||
|
#endif
|