14e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka/* 24e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Copyright (C) 2015 The Android Open Source Project 34e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 44e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 54e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * you may not use this file except in compliance with the License. 64e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * You may obtain a copy of the License at 74e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 84e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 94e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 104e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Unless required by applicable law or agreed to in writing, software 114e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 124e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * See the License for the specific language governing permissions and 144e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * limitations under the License. 154e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka */ 164e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 174e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#ifndef MINIKIN_LAYOUT_UTILS_H 184e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#define MINIKIN_LAYOUT_UTILS_H 194e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 204e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#include <stdint.h> 214e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 224e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka/** 234e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Return offset of previous word break. It is either < offset or == 0. 244e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 254e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * For the purpose of layout, a word break is a boundary with no 264e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * kerning or complex script processing. This is necessarily a 274e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * heuristic, but should be accurate most of the time. 284e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka */ 294e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonakasize_t getPrevWordBreakForCache( 304e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka const uint16_t* chars, size_t offset, size_t len); 314e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 324e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka/** 334e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Return offset of next word break. It is either > offset or == len. 344e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 354e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * For the purpose of layout, a word break is a boundary with no 364e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * kerning or complex script processing. This is necessarily a 374e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * heuristic, but should be accurate most of the time. 384e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka */ 394e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonakasize_t getNextWordBreakForCache( 404e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka const uint16_t* chars, size_t offset, size_t len); 414e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 424e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#endif // MINIKIN_LAYOUT_UTILS_H 43