mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-15 05:09:25 +00:00
Null-context suggestion whitespace preservation
This commit is contained in:
parent
989dc881fc
commit
9137eca2e7
2 changed files with 23 additions and 0 deletions
|
|
@ -58,8 +58,17 @@ class ModelCompositor {
|
|||
} else if(this.isBackspace(transform) && !allowBksp) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let preserveWhitespace: boolean = false;
|
||||
if(this.isWhitespace(transform)) {
|
||||
// Detect start of new word; prevent whitespace loss here.
|
||||
let postContext = models.applyTransform(transform, context);
|
||||
preserveWhitespace = (this.lexicalModel.wordbreak(postContext) == '');
|
||||
}
|
||||
|
||||
let distribution = this.lexicalModel.predict(transform, context);
|
||||
|
||||
let mc = this;
|
||||
distribution.forEach(function(pair: ProbabilityMass<Suggestion>) {
|
||||
// Let's not rely on the model to copy transform IDs.
|
||||
// Only bother is there IS an ID to copy.
|
||||
|
|
@ -67,6 +76,12 @@ class ModelCompositor {
|
|||
pair.sample.transformId = transform.id;
|
||||
}
|
||||
|
||||
// Prepends the original whitespace, ensuring it is preserved if
|
||||
// the suggestion is accepted.
|
||||
if(preserveWhitespace) {
|
||||
models.prependTransform(pair.sample.transform, transform);
|
||||
}
|
||||
|
||||
// Combine duplicate samples.
|
||||
let displayText = pair.sample.displayAs;
|
||||
|
||||
|
|
|
|||
|
|
@ -20,4 +20,12 @@ namespace models {
|
|||
endOfBuffer: context.endOfBuffer
|
||||
};
|
||||
}
|
||||
|
||||
export function prependTransform(transform: Transform, prefix: Transform) {
|
||||
transform.insert = prefix.insert + transform.insert;
|
||||
transform.deleteLeft += prefix.deleteLeft;
|
||||
if(prefix.deleteRight) {
|
||||
transform.deleteRight = (transform.deleteRight || 0) + prefix.deleteRight;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue