microvg  5.0.0
microvg
Macros | Functions
microvg_helper.c File Reference

MicroEJ MicroVG library low level API: helper to implement library natives methods. More...

#include <LLVG_MATRIX_impl.h>
#include "microvg_helper.h"
#include "microvg_configuration.h"

Go to the source code of this file.

Macros

#define MIN_HIGH_SURROGATE   ((unsigned short)0xD800)
 
#define MAX_HIGH_SURROGATE   ((unsigned short)0xDBFF)
 
#define MIN_LOW_SURROGATE   ((unsigned short)0xDC00)
 
#define MAX_LOW_SURROGATE   ((unsigned short)0xDFFF)
 
#define MIN_SUPPLEMENTARY_CODE_POINT   0x010000
 
#define GET_NEXT_CHARACTER(t, l, o)   ((o) >= (l) ? (unsigned short)0 : (t)[o])
 
#define IS_SIMPLE_LAYOUT   true
 

Functions

void MICROVG_HELPER_initialize (void)
 
int MICROVG_HELPER_get_utf (unsigned short *textCharRam, int length, int *offset)
 Gets the UTF character from a text buffer at the given offset and updates the offset to point to the next character. More...
 
jfloat * MICROVG_HELPER_check_matrix (jfloat *matrix)
 
uint32_t MICROVG_HELPER_apply_alpha (uint32_t color, uint32_t alpha)
 

Detailed Description

MicroEJ MicroVG library low level API: helper to implement library natives methods.

Author
MicroEJ Developer Team
Version
5.0.0

Definition in file microvg_helper.c.

Macro Definition Documentation

#define MIN_HIGH_SURROGATE   ((unsigned short)0xD800)

Sanity check between the expected version of the configuration and the actual version of the configuration. If an error is raised here, it means that a new version of the CCO has been installed and the configuration microvg_configuration.h must be updated based on the one provided by the new CCO version.

Definition at line 58 of file microvg_helper.c.

Function Documentation

int MICROVG_HELPER_get_utf ( unsigned short *  text,
int  length,
int *  offset 
)

Gets the UTF character from a text buffer at the given offset and updates the offset to point to the next character.

Some characters have some special values; they are made up of two Unicode characters in two specific ranges such that the first Unicode character is in one range (for example 0xD800-0xD8FF) and the second Unicode character is in the second range (for example 0xDC00-0xDCFF). This is called a surrogate pair.

If a surrogate pair is incomplete (missing second character), this function returns "0" (error) and does not update the offset.

Parameters
[in]texttext buffer encoded in UTF16 where to read UTF character.
[in]lengthlenght of the text buffer.

Definition at line 106 of file microvg_helper.c.

106  {
107 
108  unsigned short highPart = GET_NEXT_CHARACTER(textCharRam, length, *offset);
109  int ret = 0; // means "error" (see doc)
110 
111  if ((highPart >= MIN_HIGH_SURROGATE) && (highPart <= MAX_HIGH_SURROGATE)) {
112 
113  if (*offset < (length - 1)) {
114 
115  unsigned short lowPart = GET_NEXT_CHARACTER(textCharRam, length, *(offset) + 1);
116 
117  if ((lowPart >= MIN_LOW_SURROGATE) && (lowPart <= MAX_LOW_SURROGATE)) {
118  *offset += 2;
119 
120  ret = 0;
121  ret += ((int)highPart - (int)MIN_HIGH_SURROGATE);
122  ret <<= (int)10;
123  ret += ((int)lowPart - (int)MIN_LOW_SURROGATE);
124  ret += (int)MIN_SUPPLEMENTARY_CODE_POINT;
125  }
126  // else: invalid surrogate pair
127  }
128  // else: missing second part of surrogate pair
129  }
130  else {
131  *offset += 1;
132 
133  // standard character
134  ret = 0x0000FFFF & (int)highPart;
135  }
136 
137  return ret;
138 }
#define MIN_HIGH_SURROGATE