diff --git a/windows/src/developer/history.md b/windows/src/developer/history.md index d563b97f89..9559ad30b5 100644 --- a/windows/src/developer/history.md +++ b/windows/src/developer/history.md @@ -3,6 +3,12 @@ ## 13.0 alpha * Start version 13.0 +## 2019-09-25 12.0.37 beta +* Compiler: Add -lexical-model command line option for building lexical model template projects to kmconvert. (#2120) +* Debugger: Remove legacy 'Install keyboard' link in web test and cleanup look somewhat. (#2122) +* Compiler: Support colour log messages and cleanup logging. (#2128) +* Help: Fix some of the issues with Context Help, and address one specific topic - touch layout editor. (#2132) + ## 2019-09-24 12.0.36 beta * General: File type icons were mismatched (#2112) * Project: Shift layer in basic touch layout template had incorrect modifier for period (.) on shift layer (#2113) diff --git a/windows/src/developer/kmconvert/Keyman.Developer.System.KMConvertParameters.pas b/windows/src/developer/kmconvert/Keyman.Developer.System.KMConvertParameters.pas index 4a7b47f098..046781bb3c 100644 --- a/windows/src/developer/kmconvert/Keyman.Developer.System.KMConvertParameters.pas +++ b/windows/src/developer/kmconvert/Keyman.Developer.System.KMConvertParameters.pas @@ -6,7 +6,7 @@ uses UKeymanTargets; type - TKMConvertMode = (cmImportWindows, cmTemplate); + TKMConvertMode = (cmImportWindows, cmTemplate, cmLexicalModel); TKMConvertParameters = record KLID: string; @@ -20,6 +20,8 @@ type Targets: TKeymanTargets; Mode: TKMConvertMode; NoLogo: Boolean; + + ModelIdAuthor, ModelIdLanguage, ModelIdUniq: string; private function CheckParam(name, value: string): Boolean; public @@ -49,6 +51,8 @@ begin Mode := cmImportWindows else if ModeString = 'template' then Mode := cmTemplate + else if ModeString = 'lexical-model' then + Mode := cmLexicalModel else Exit(False); @@ -80,20 +84,28 @@ begin writeln(' Imports a Windows keyboard into a new Keyman keyboard project'); writeln; writeln('kmconvert template -id [additional-options]'); - writeln(' Creates a blank keyboard project in the repository template format'); + writeln(' Creates a basic keyboard project in the repository template format'); + writeln; + writeln('kmconvert lexical-model -id-author -id-language -id-uniq [additional-options]'); + writeln(' Creates a wordlist lexical model project in the repository template format'); writeln; writeln('Parameters:'); writeln(' -nologo Don''t show the program description and copyright banner'); writeln(' -klid The KLID of the keyboard to import, per LoadKeyboardLayout'); - writeln(' -o The target folder to write the keyboard project into, defaults to "."'); writeln(' -id The id of the keyboard to create'); writeln(' (in `import-windows` mode, can be a format string)'); - writeln(' -name Name of the keyboard, e.g. "My First Keyboard", "%s Basic" '); + writeln(' -o The target folder to write the project into, defaults to "."'); + writeln(' -author Name of author of the keyboard/model, no default'); + writeln(' -name Name of the keyboard/model, e.g. "My First Keyboard", "%s Basic" '); writeln(' (format strings are only valid in `import-windows` mode)'); - writeln(' -copyright Copyright string for the keyboard, defaults to "Copyright (C)"'); - writeln(' -version Version number of the keyboard, defaults to "1.0"'); + writeln(' -copyright Copyright string for the keyboard/model, defaults to "Copyright (C)"'); + writeln(' -version Version number of the keyboard/model, defaults to "1.0"'); writeln(' -languages space-separated list of BCP 47 tags, e.g. "en-US tpi-PG"'); - writeln(' -author Name of author of the keyboard, no default'); + // Model parameters + writeln('Note: model identifiers are constructed from params: ..'); + writeln(' -id-author Identifier for author of model'); + writeln(' -id-language Single BCP 47 tag identifying primary language of model'); + writeln(' -id-uniq Unique name for the model'); end; { TKMConvertParameters } @@ -108,6 +120,11 @@ begin else if name = '-version' then Version := value else if name = '-languages' then BCP47Tags := value else if name = '-author' then Author := value + + else if name = '-id-author' then ModelIdAuthor := value + else if name = '-id-language' then ModelIdLanguage := value + else if name = '-id-uniq' then ModelIdUniq := value + else Exit(False); Result := True; end; diff --git a/windows/src/developer/kmconvert/Keyman.Developer.System.KeymanConvertMain.pas b/windows/src/developer/kmconvert/Keyman.Developer.System.KeymanConvertMain.pas index 4af8266149..62cb15c0fa 100644 --- a/windows/src/developer/kmconvert/Keyman.Developer.System.KeymanConvertMain.pas +++ b/windows/src/developer/kmconvert/Keyman.Developer.System.KeymanConvertMain.pas @@ -13,6 +13,7 @@ uses Keyman.Developer.System.KMConvertParameters, Keyman.Developer.System.ImportWindowsKeyboard, Keyman.Developer.System.KeyboardProjectTemplate, + Keyman.Developer.System.ModelProjectTemplate, KeymanVersion, VersionInfo; @@ -102,6 +103,43 @@ begin end; end; +function DoCreateModelTemplate(FParameters: TKMConvertParameters): Boolean; +var + mpt: TModelProjectTemplate; + FTargetFolder: string; + ModelID: string; +begin + ModelID := FParameters.ModelIdAuthor + '.' + FParameters.ModelIdLanguage + '.' + FParameters.ModelIdUniq; + mpt := TModelProjectTemplate.Create(FParameters.Destination, ModelID); + try + mpt.Name := FParameters.Name; + mpt.Copyright := FParameters.Copyright; + mpt.Version := FParameters.Version; + mpt.BCP47Tags := FParameters.BCP47Tags; + mpt.Author := FParameters.Author; + + FTargetFolder := ExtractFileDir(mpt.ProjectFilename); + if DirectoryExists(FTargetFolder) then + begin + writeln('ERROR: The directory "'+FTargetFolder+'" already exists.'); + Exit(False); + end; + + try + mpt.Generate; + except + on E:EModelProjectTemplate do + begin + writeln(E.Message); + Exit(False); + end; + end; + Result := True; + finally + mpt.Free; + end; +end; + procedure WriteBanner; begin writeln(SKeymanDeveloperName + ' Conversion Utility'); @@ -133,6 +171,8 @@ begin Result := DoImportWindowsKeyboard(FParameters); cmTemplate: Result := DoCreateKeyboardTemplate(FParameters); + cmLexicalModel: + Result := DoCreateModelTemplate(FParameters); end; end; diff --git a/windows/src/developer/kmconvert/kmconvert.dpr b/windows/src/developer/kmconvert/kmconvert.dpr index f67e04070b..96485e81f5 100644 --- a/windows/src/developer/kmconvert/kmconvert.dpr +++ b/windows/src/developer/kmconvert/kmconvert.dpr @@ -79,7 +79,10 @@ uses TouchLayoutUtils in '..\TIKE\oskbuilder\TouchLayoutUtils.pas', KeyboardFonts in '..\..\global\delphi\general\KeyboardFonts.pas', Keyman.System.Util.RenderLanguageIcon in '..\..\global\delphi\ui\Keyman.System.Util.RenderLanguageIcon.pas', - utilicon in '..\..\global\delphi\general\utilicon.pas'; + utilicon in '..\..\global\delphi\general\utilicon.pas', + Keyman.Developer.System.ModelProjectTemplate in 'Keyman.Developer.System.ModelProjectTemplate.pas', + Keyman.Developer.System.Project.modelTsProjectFile in '..\TIKE\project\Keyman.Developer.System.Project.modelTsProjectFile.pas', + Keyman.Developer.System.Project.wordlistTsvProjectFile in '..\TIKE\project\Keyman.Developer.System.Project.wordlistTsvProjectFile.pas'; {$R icons.RES} {$R version.res} diff --git a/windows/src/developer/kmconvert/kmconvert.dproj b/windows/src/developer/kmconvert/kmconvert.dproj index f5f9bf8f6f..face32bf13 100644 --- a/windows/src/developer/kmconvert/kmconvert.dproj +++ b/windows/src/developer/kmconvert/kmconvert.dproj @@ -179,6 +179,9 @@ + + + Cfg_2 Base