120 lines
4.6 KiB
C
120 lines
4.6 KiB
C
|
/*
|
||
|
* Copyright (C) 2016-2018 Muhammad Tayyab Akram
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#ifndef _SB_PUBLIC_ALGORITHM_H
|
||
|
#define _SB_PUBLIC_ALGORITHM_H
|
||
|
|
||
|
#include "SBBase.h"
|
||
|
#include "SBBidiType.h"
|
||
|
#include "SBCodepointSequence.h"
|
||
|
#include "SBParagraph.h"
|
||
|
|
||
|
typedef struct _SBAlgorithm *SBAlgorithmRef;
|
||
|
|
||
|
/**
|
||
|
* Creates an algorithm object for the specified code point sequence. The source string inside the
|
||
|
* code point sequence should not be freed until the algorithm object is in use.
|
||
|
*
|
||
|
* @param codepointSequence
|
||
|
* The code point sequence to apply bidirectional algorithm on.
|
||
|
* @return
|
||
|
* A reference to an algorithm object if the call was successful, NULL otherwise.
|
||
|
*/
|
||
|
SBAlgorithmRef SBAlgorithmCreate(const SBCodepointSequence *codepointSequence);
|
||
|
|
||
|
/**
|
||
|
* Returns a direct pointer to the bidirectional types of code units, stored in the algorithm
|
||
|
* object.
|
||
|
*
|
||
|
* @param algorithm
|
||
|
* The algorithm object from which to access the bidirectional types of code units.
|
||
|
* @return
|
||
|
* A valid pointer to an array of SBBidiType structures, whose length will be equal to that of
|
||
|
* string buffer.
|
||
|
*/
|
||
|
const SBBidiType *SBAlgorithmGetBidiTypesPtr(SBAlgorithmRef algorithm);
|
||
|
|
||
|
/**
|
||
|
* Determines the boundary of first paragraph within the specified range.
|
||
|
*
|
||
|
* The boundary of the paragraph occurs after a code point whose bidirectional type is Paragraph
|
||
|
* Separator (B), or at the suggestedLength if no such code point exists before it. The exception to
|
||
|
* this rule is when a Carriage Return (CR) is followed by a Line Feed (LF). Both CR and LF are
|
||
|
* paragraph separators, but in that case, the boundary of the paragraph is considered after LF code
|
||
|
* point.
|
||
|
*
|
||
|
* @param algorithm
|
||
|
* The algorithm object to use for determining paragraph boundary.
|
||
|
* @param paragraphOffset
|
||
|
* The index to the first code unit of the paragraph in source string.
|
||
|
* @param suggestedLength
|
||
|
* The number of code units covering the suggested length of the paragraph.
|
||
|
* @param acutalLength
|
||
|
* The actual length of the first paragraph, including the paragraph separator, within the
|
||
|
* given range.
|
||
|
* @param separatorLength
|
||
|
* On output, the length of paragraph separator. This parameter can be set to NULL if not
|
||
|
* needed.
|
||
|
*/
|
||
|
void SBAlgorithmGetParagraphBoundary(SBAlgorithmRef algorithm,
|
||
|
SBUInteger paragraphOffset, SBUInteger suggestedLength,
|
||
|
SBUInteger *acutalLength, SBUInteger *separatorLength);
|
||
|
|
||
|
/**
|
||
|
* Creates a paragraph object processed with Unicode Bidirectional Algorithm.
|
||
|
*
|
||
|
* This function processes only first paragraph starting at paragraphOffset with length less than or
|
||
|
* equal to suggestedLength, in accordance with Rule P1 of Unicode Bidirectional Algorithm.
|
||
|
*
|
||
|
* The paragraph level is determined by applying Rules P2-P3 and embedding levels are resolved by
|
||
|
* applying Rules X1-I2.
|
||
|
*
|
||
|
* @param algorithm
|
||
|
* The algorithm object to use for creating the desired paragraph.
|
||
|
* @param paragraphOffset
|
||
|
* The index to the first code unit of the paragraph in source string.
|
||
|
* @param suggestedLength
|
||
|
* The number of code units covering the suggested length of the paragraph.
|
||
|
* @param baseLevel
|
||
|
* The desired base level of the paragraph. Rules P2-P3 would be ignored if it is neither
|
||
|
* SBLevelDefaultLTR nor SBLevelDefaultRTL.
|
||
|
* @return
|
||
|
* A reference to a paragraph object if the call was successful, NULL otherwise.
|
||
|
*/
|
||
|
SBParagraphRef SBAlgorithmCreateParagraph(SBAlgorithmRef algorithm,
|
||
|
SBUInteger paragraphOffset, SBUInteger suggestedLength, SBLevel baseLevel);
|
||
|
|
||
|
/**
|
||
|
* Increments the reference count of an algorithm object.
|
||
|
*
|
||
|
* @param algorithm
|
||
|
* The algorithm object whose reference count will be incremented.
|
||
|
* @return
|
||
|
* The same algorithm object passed in as the parameter.
|
||
|
*/
|
||
|
SBAlgorithmRef SBAlgorithmRetain(SBAlgorithmRef algorithm);
|
||
|
|
||
|
/**
|
||
|
* Decrements the reference count of an algorithm object. The object will be deallocated when its
|
||
|
* reference count reaches zero.
|
||
|
*
|
||
|
* @param algorithm
|
||
|
* The algorithm object whose reference count will be decremented.
|
||
|
*/
|
||
|
void SBAlgorithmRelease(SBAlgorithmRef algorithm);
|
||
|
|
||
|
#endif
|