1366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka/*
2366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * Copyright (C) 2018 The Android Open Source Project
3366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka *
4366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
5366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * you may not use this file except in compliance with the License.
6366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * You may obtain a copy of the License at
7366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka *
8366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
9366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka *
10366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * Unless required by applicable law or agreed to in writing, software
11366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
12366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * See the License for the specific language governing permissions and
14366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka * limitations under the License.
15366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka */
16366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka
17366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka#include "minikin/LineBreaker.h"
18366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka
19366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka#include "GreedyLineBreaker.h"
20366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka#include "OptimalLineBreaker.h"
21366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka
22366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonakanamespace minikin {
23366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka
24366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo NonakaLineBreakResult breakIntoLines(const U16StringPiece& textBuffer, BreakStrategy strategy,
25366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka                               HyphenationFrequency frequency, bool justified,
26366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka                               const MeasuredText& measuredText, const LineWidth& lineWidth,
27366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka                               const TabStops& tabStops) {
28366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka    if (strategy == BreakStrategy::Greedy || textBuffer.hasChar(CHAR_TAB)) {
29366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka        return breakLineGreedy(textBuffer, measuredText, lineWidth, tabStops,
30366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka                               frequency != HyphenationFrequency::None);
31366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka    } else {
32366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka        return breakLineOptimal(textBuffer, measuredText, lineWidth, strategy, frequency,
33366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka                                justified);
34366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka    }
35366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka}
36366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka
37366f57fb4efd0ddf5d48cd232cd88d3777517ea2Seigo Nonaka}  // namespace minikin
38