-
Notifications
You must be signed in to change notification settings - Fork 401
/
Copy pathengine_output.h
135 lines (111 loc) · 5.8 KB
/
engine_output.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// Copyright 2010-2021, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Class functions to be used for output by the Session class.
#ifndef MOZC_ENGINE_SESSION_OUTPUT_H_
#define MOZC_ENGINE_SESSION_OUTPUT_H_
#include <cstddef>
#include <cstdint>
#include <string>
#include "absl/strings/string_view.h"
#include "composer/composer.h"
#include "converter/segments.h"
#include "engine/candidate_list.h"
#include "protocol/candidate_window.pb.h"
#include "protocol/commands.pb.h"
namespace mozc {
namespace engine {
namespace output {
// Fill the CandidateWindow_Candidate protobuf with the contents of candidate.
void FillCandidate(const Segment &segment, const Candidate &candidate,
commands::CandidateWindow_Candidate *candidate_proto);
// Fill the CandidateWindow protobuf with the contents of candidate_list.
void FillCandidateWindow(const Segment &segment,
const CandidateList &candidate_list, size_t position,
commands::CandidateWindow *candidate_window_proto);
// Fill the CandidateList protobuf with the contents of
// candidate_list. Candidates in the candidate_list are flatten
// even if the candidate_list contains sub-candidate lists.
void FillAllCandidateWords(const Segment &segment,
const CandidateList &candidate_list,
commands::Category category,
commands::CandidateList *candidate_list_proto);
// For debug. Fill the CandidateList protobuf with the
// removed_candidates_for_debug in the segment.
void FillRemovedCandidates(const Segment &segment,
commands::CandidateList *candidate_list_proto);
// Check if the usages should be rendered on the current CandidateList status.
bool ShouldShowUsages(const Segment &segment, const CandidateList &cand_list);
// Fill the usages of Candidates protobuf with the contents of candidate_list.
void FillUsages(const Segment &segment, const CandidateList &cand_list,
commands::CandidateWindow *candidate_window_proto);
// Fill the access key of Candidates protobuf with the sequence of shortcuts.
void FillShortcuts(absl::string_view shortcuts,
commands::CandidateWindow *candidate_window_proto);
// Fill the sub_label of footer_proto. This function should be
// called on dev_channel and unittest.
void FillSubLabel(commands::Footer *footer_proto);
// Fill the footer contents of Candidates protobuf. If category is
// modified, true is returned. Otherwise false is returned.
bool FillFooter(commands::Category category,
commands::CandidateWindow *candidate_window_proto);
// Fill the Preedit protobuf with the contents of composer as a preedit.
void FillPreedit(const composer::Composer &composer,
commands::Preedit *preedit);
// Fill the Preedit protobuf with the contents of segments as a conversion.
void FillConversion(const Segments &segments, size_t segment_index,
int candidate_id, commands::Preedit *preedit);
enum SegmentType {
PREEDIT = 1,
CONVERSION = 2,
FOCUSED = 4,
};
// Add a Preedit::Segment protobuf to the Preedit protobuf with key
// and value. Return true iff. new segment is added to preedit.
bool AddSegment(absl::string_view, absl::string_view value,
uint32_t segment_type_mask, commands::Preedit *preedit);
// Fill the Result protobuf with the key and result strings
// for a conversion result without any text normalization.
void FillConversionResultWithoutNormalization(std::string key,
std::string result,
commands::Result *result_proto);
// Fill the Result protobuf with the key and result strings
// normalizing the string for a conversion result.
void FillConversionResult(absl::string_view key, std::string result,
commands::Result *result_proto);
// Fill the Result protobuf with the preedit string normalizing the
// string for a preedit result.
void FillPreeditResult(absl::string_view preedit,
commands::Result *result_proto);
// Fill the Result protobuf with cursor offset.
void FillCursorOffsetResult(int32_t cursor_offset,
commands::Result *result_proto);
} // namespace output
} // namespace engine
} // namespace mozc
#endif // MOZC_ENGINE_SESSION_OUTPUT_H_