mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-08 09:55:32 +00:00
44 lines
No EOL
1.4 KiB
TypeScript
44 lines
No EOL
1.4 KiB
TypeScript
namespace com.keyman.text {
|
|
export class ContextWindow implements Context {
|
|
// Used to limit the range of context replicated for use of keyboard rules within
|
|
// the engine, as used for fat-finger prep / `Alternate` generation.
|
|
public static readonly ENGINE_RULE_WINDOW: Configuration = {
|
|
leftContextCodePoints: 64,
|
|
rightContextCodePoints: 32
|
|
};
|
|
|
|
left: string;
|
|
right?: string;
|
|
|
|
startOfBuffer: boolean;
|
|
endOfBuffer: boolean;
|
|
|
|
casingForm?: CasingForm;
|
|
|
|
constructor(mock: Mock, config: Configuration, layerId: string) {
|
|
this.left = mock.getTextBeforeCaret();
|
|
this.startOfBuffer = this.left._kmwLength() <= config.leftContextCodePoints;
|
|
if(!this.startOfBuffer) {
|
|
// Our custom substring version will return the last n characters if param #1 is given -n.
|
|
this.left = this.left._kmwSubstr(-config.leftContextCodePoints);
|
|
}
|
|
|
|
this.right = mock.getTextAfterCaret();
|
|
this.endOfBuffer = this.right._kmwLength() <= config.rightContextCodePoints;
|
|
if(!this.endOfBuffer) {
|
|
this.right = this.right._kmwSubstr(0, config.rightContextCodePoints);
|
|
}
|
|
|
|
this.casingForm =
|
|
layerId == 'shift' ? 'initial' :
|
|
layerId == 'caps' ? 'upper' :
|
|
null;
|
|
}
|
|
|
|
public toMock(): Mock {
|
|
let caretPos = this.left._kmwLength();
|
|
|
|
return new Mock(this.left + (this.right || ""), caretPos);
|
|
}
|
|
}
|
|
} |