Gramambular // Fix an upstream bug preventing arrow behavior like Hanin.

- We also found another issue but plan to fix it in a later release.
This commit is contained in:
ShikiSuen 2022-04-20 19:34:35 +08:00
parent 3c86f16967
commit 6e2eb0ea96
2 changed files with 22 additions and 1 deletions

View File

@ -555,6 +555,8 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
- (void)dealWithOverrideModelSuggestions
{
// 讓 grid 知道目前的游標候選字判定是前置還是後置
_builder->grid().setHaninInputEnabled(!mgrPrefs.selectPhraseAfterCursorAsCandidate);
// 這一整段都太 C++ 且只出現一次,就整個端過來了。
// 拆開封裝的話,只會把問題搞得更麻煩而已。
std::string overrideValue = (mgrPrefs.useSCPCTypingMode)
@ -599,6 +601,9 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
- (NSArray<NSString *> *)getCandidatesArray
{
// 讓 grid 知道目前的游標候選字判定是前置還是後置
_builder->grid().setHaninInputEnabled(!mgrPrefs.selectPhraseAfterCursorAsCandidate);
NSMutableArray<NSString *> *candidatesArray = [[NSMutableArray alloc] init];
NSInteger cursorIndex = [self getActualCandidateCursorIndex];

View File

@ -44,6 +44,9 @@ class Grid
void insertNode(const Node &node, size_t location, size_t spanningLength);
bool hasNodeAtLocationSpanningLengthMatchingKey(size_t location, size_t spanningLength, const std::string &key);
void setHaninInputEnabled(bool enabled);
bool HaninInputEnabled();
void expandGridByOneAtLocation(size_t location);
void shrinkGridByOneAtLocation(size_t location);
@ -116,8 +119,19 @@ class Grid
protected:
std::vector<Span> m_spans;
bool m_bolHaninEnabled;
};
inline void Grid::setHaninInputEnabled(bool enabled)
{
m_bolHaninEnabled = enabled;
}
inline bool Grid::HaninInputEnabled()
{
return m_bolHaninEnabled;
}
inline void Grid::clear()
{
m_spans.clear();
@ -234,7 +248,9 @@ inline std::vector<NodeAnchor> Grid::nodesCrossingOrEndingAt(size_t location)
{
for (size_t j = 1, m = span.maximumLength(); j <= m; j++)
{
if (i + j < location)
// 左半是漢音模式,已經自威注音 1.5.2 版開始解決了可以在詞中間叫出候選字的問題。
// TODO: 右半是微軟新注音模式,仍有可以在詞中間叫出候選字的問題。
if (((i + j != location) && m_bolHaninEnabled) || ((i + j < location) && !m_bolHaninEnabled))
{
continue;
}