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