From f2c571147a13c3367376cc5128aac0154c99cc40 Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 1 Dec 2017 18:13:05 +0000 Subject: [PATCH] IDE: compiler options: execute before/after: allow custom parsers git-svn-id: trunk@56576 - --- components/ideintf/ideexterntoolintf.pas | 8 +- .../ideintf/languages/objinspstrconsts.ca.po | 4 + .../ideintf/languages/objinspstrconsts.cs.po | 4 + .../ideintf/languages/objinspstrconsts.de.po | 4 + .../ideintf/languages/objinspstrconsts.es.po | 4 + .../ideintf/languages/objinspstrconsts.fi.po | 4 + .../ideintf/languages/objinspstrconsts.fr.po | 4 + .../ideintf/languages/objinspstrconsts.he.po | 4 + .../ideintf/languages/objinspstrconsts.hu.po | 4 + .../ideintf/languages/objinspstrconsts.id.po | 4 + .../ideintf/languages/objinspstrconsts.it.po | 4 + .../ideintf/languages/objinspstrconsts.ja.po | 4 + .../ideintf/languages/objinspstrconsts.lt.po | 4 + .../ideintf/languages/objinspstrconsts.nl.po | 4 + .../ideintf/languages/objinspstrconsts.pl.po | 4 + .../ideintf/languages/objinspstrconsts.po | 4 + .../languages/objinspstrconsts.pt_BR.po | 4 + .../ideintf/languages/objinspstrconsts.ru.po | 4 + .../ideintf/languages/objinspstrconsts.sk.po | 4 + .../ideintf/languages/objinspstrconsts.uk.po | 4 + .../languages/objinspstrconsts.zh_CN.po | 4 + components/ideintf/objinspstrconsts.pas | 1 + ide/compileroptions.pp | 16 +- ide/frames/compiler_compilation_options.lfm | 294 ++++++++---------- ide/frames/compiler_compilation_options.pas | 152 +++++++-- ide/lazarusidestrconsts.pas | 1 + 26 files changed, 352 insertions(+), 200 deletions(-) diff --git a/components/ideintf/ideexterntoolintf.pas b/components/ideintf/ideexterntoolintf.pas index 36d3bb45e5..f6962b8a21 100644 --- a/components/ideintf/ideexterntoolintf.pas +++ b/components/ideintf/ideexterntoolintf.pas @@ -33,7 +33,7 @@ const SubToolMake = 'make'; SubToolMakePriority = 1000; // higher than FPC - SubToolDefault = 'External Tool'; // this parser simply writes all output to Messages window + SubToolDefault = 'Show all'; // this parser simply writes all output to Messages window SubToolDefaultPriority = 0; AbortedExitCode = 12321; @@ -361,6 +361,7 @@ type procedure ReadLine(Line: string; OutputIndex: integer; var Handled: boolean ); override; class function DefaultSubTool: string; override; + class function GetLocalizedParserName: string; override; class function Priority: integer; override; end; @@ -1008,6 +1009,11 @@ begin Result:=SubToolDefault; end; +class function TDefaultParser.GetLocalizedParserName: string; +begin + Result:=oisShowAllOutputLines; +end; + class function TDefaultParser.Priority: integer; begin Result:=SubToolDefaultPriority; diff --git a/components/ideintf/languages/objinspstrconsts.ca.po b/components/ideintf/languages/objinspstrconsts.ca.po index 23fa94999d..75b9148e9b 100644 --- a/components/ideintf/languages/objinspstrconsts.ca.po +++ b/components/ideintf/languages/objinspstrconsts.ca.po @@ -872,6 +872,10 @@ msgstr "Fica a predeterminat: %s" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.cs.po b/components/ideintf/languages/objinspstrconsts.cs.po index 7b08dbed83..f155d0eaa8 100644 --- a/components/ideintf/languages/objinspstrconsts.cs.po +++ b/components/ideintf/languages/objinspstrconsts.cs.po @@ -851,6 +851,10 @@ msgstr "Nastavit na výchozí: %s" msgid "Set property value to Default" msgstr "Natavit hodnotu vlastnosti jako Výchozí" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.de.po b/components/ideintf/languages/objinspstrconsts.de.po index a23885c282..5e503cb550 100644 --- a/components/ideintf/languages/objinspstrconsts.de.po +++ b/components/ideintf/languages/objinspstrconsts.de.po @@ -842,6 +842,10 @@ msgstr "Auf Voreinstellung %s setzen" msgid "Set property value to Default" msgstr "Eigenschaftswert auf Vorgabe setzen" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Zeige Klassen" diff --git a/components/ideintf/languages/objinspstrconsts.es.po b/components/ideintf/languages/objinspstrconsts.es.po index a8c76f99ee..08f541103b 100644 --- a/components/ideintf/languages/objinspstrconsts.es.po +++ b/components/ideintf/languages/objinspstrconsts.es.po @@ -843,6 +843,10 @@ msgstr "Establecer por defecto: %s" msgid "Set property value to Default" msgstr "Establecer valor de la propiedad como predeterminado" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.fi.po b/components/ideintf/languages/objinspstrconsts.fi.po index 7f6b9a8e1b..f3626371cb 100644 --- a/components/ideintf/languages/objinspstrconsts.fi.po +++ b/components/ideintf/languages/objinspstrconsts.fi.po @@ -836,6 +836,10 @@ msgstr "Aseta oletusarvo: %s" msgid "Set property value to Default" msgstr "Aseta ominaisuuden arvoksi oletus" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Näytä luokat" diff --git a/components/ideintf/languages/objinspstrconsts.fr.po b/components/ideintf/languages/objinspstrconsts.fr.po index 097095200f..4a8a771cb7 100644 --- a/components/ideintf/languages/objinspstrconsts.fr.po +++ b/components/ideintf/languages/objinspstrconsts.fr.po @@ -842,6 +842,10 @@ msgstr "Définir par défaut : %s" msgid "Set property value to Default" msgstr "Définir la valeur de la propriété à celle par défaut" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Montrer les classes" diff --git a/components/ideintf/languages/objinspstrconsts.he.po b/components/ideintf/languages/objinspstrconsts.he.po index 6cff2fddbd..f51439c582 100644 --- a/components/ideintf/languages/objinspstrconsts.he.po +++ b/components/ideintf/languages/objinspstrconsts.he.po @@ -876,6 +876,10 @@ msgstr "קבע כברירת מחדל: s%" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.hu.po b/components/ideintf/languages/objinspstrconsts.hu.po index 028fa8ca53..e4ba910546 100644 --- a/components/ideintf/languages/objinspstrconsts.hu.po +++ b/components/ideintf/languages/objinspstrconsts.hu.po @@ -841,6 +841,10 @@ msgstr "Beállítás alapértelmezettre: %s" msgid "Set property value to Default" msgstr "A tulajdonság értéke legyen Alapértelmezett" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Osztályok megjelenítése" diff --git a/components/ideintf/languages/objinspstrconsts.id.po b/components/ideintf/languages/objinspstrconsts.id.po index 48452abf8b..190c1195a1 100644 --- a/components/ideintf/languages/objinspstrconsts.id.po +++ b/components/ideintf/languages/objinspstrconsts.id.po @@ -874,6 +874,10 @@ msgstr "Set ke default: %s" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.it.po b/components/ideintf/languages/objinspstrconsts.it.po index 4a0b9297b2..4ba2a9f48a 100644 --- a/components/ideintf/languages/objinspstrconsts.it.po +++ b/components/ideintf/languages/objinspstrconsts.it.po @@ -844,6 +844,10 @@ msgstr "Imposta al valore predefinito: %s" msgid "Set property value to Default" msgstr "Imposta come Default il valore della proprietà" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.ja.po b/components/ideintf/languages/objinspstrconsts.ja.po index ed1b840afb..c89aece36f 100644 --- a/components/ideintf/languages/objinspstrconsts.ja.po +++ b/components/ideintf/languages/objinspstrconsts.ja.po @@ -849,6 +849,10 @@ msgstr "デフォルトに設定: %s" msgid "Set property value to Default" msgstr "プロパティ値を既定値に設定" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.lt.po b/components/ideintf/languages/objinspstrconsts.lt.po index 5d8bf98251..ec20d8b4c3 100644 --- a/components/ideintf/languages/objinspstrconsts.lt.po +++ b/components/ideintf/languages/objinspstrconsts.lt.po @@ -842,6 +842,10 @@ msgstr "Keisti į numatytą: %s" msgid "Set property value to Default" msgstr "Savybės vertę atstatyti į numatytą" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Rodyti klases" diff --git a/components/ideintf/languages/objinspstrconsts.nl.po b/components/ideintf/languages/objinspstrconsts.nl.po index 9580cc61ea..bd71865c9a 100644 --- a/components/ideintf/languages/objinspstrconsts.nl.po +++ b/components/ideintf/languages/objinspstrconsts.nl.po @@ -862,6 +862,10 @@ msgstr "Zet naar standaardinstelling: %s" msgid "Set property value to Default" msgstr "Zet eigenschapwaarde naar standardistelling" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.pl.po b/components/ideintf/languages/objinspstrconsts.pl.po index 3dee40be3a..cb66772430 100644 --- a/components/ideintf/languages/objinspstrconsts.pl.po +++ b/components/ideintf/languages/objinspstrconsts.pl.po @@ -873,6 +873,10 @@ msgstr "Ustaw domyślną wartość: %s" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.po b/components/ideintf/languages/objinspstrconsts.po index bbfb35c78b..d1c8ac6643 100644 --- a/components/ideintf/languages/objinspstrconsts.po +++ b/components/ideintf/languages/objinspstrconsts.po @@ -834,6 +834,10 @@ msgstr "" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.pt_BR.po b/components/ideintf/languages/objinspstrconsts.pt_BR.po index 498120db3d..b54cb021eb 100644 --- a/components/ideintf/languages/objinspstrconsts.pt_BR.po +++ b/components/ideintf/languages/objinspstrconsts.pt_BR.po @@ -841,6 +841,10 @@ msgstr "Definir para padrão: %s" msgid "Set property value to Default" msgstr "Definir valor da propriedade para o padrão" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Exibir classes" diff --git a/components/ideintf/languages/objinspstrconsts.ru.po b/components/ideintf/languages/objinspstrconsts.ru.po index a1097efc4c..92a9483d3b 100644 --- a/components/ideintf/languages/objinspstrconsts.ru.po +++ b/components/ideintf/languages/objinspstrconsts.ru.po @@ -841,6 +841,10 @@ msgstr "Установить по умолчанию: %s" msgid "Set property value to Default" msgstr "Установить значение свойства по умолчанию" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Показывать классы" diff --git a/components/ideintf/languages/objinspstrconsts.sk.po b/components/ideintf/languages/objinspstrconsts.sk.po index 1109a47582..747cb95c96 100644 --- a/components/ideintf/languages/objinspstrconsts.sk.po +++ b/components/ideintf/languages/objinspstrconsts.sk.po @@ -880,6 +880,10 @@ msgstr "Nastaviť na predvolené: %s" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/languages/objinspstrconsts.uk.po b/components/ideintf/languages/objinspstrconsts.uk.po index c1bd79deaf..c8c9361761 100644 --- a/components/ideintf/languages/objinspstrconsts.uk.po +++ b/components/ideintf/languages/objinspstrconsts.uk.po @@ -844,6 +844,10 @@ msgstr "Встановити за замовчуванням: %s" msgid "Set property value to Default" msgstr "Встановити типове значення властивості" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "Показати класи" diff --git a/components/ideintf/languages/objinspstrconsts.zh_CN.po b/components/ideintf/languages/objinspstrconsts.zh_CN.po index ca721ff822..d42b7aa5f5 100644 --- a/components/ideintf/languages/objinspstrconsts.zh_CN.po +++ b/components/ideintf/languages/objinspstrconsts.zh_CN.po @@ -850,6 +850,10 @@ msgstr "设为默认: %s" msgid "Set property value to Default" msgstr "" +#: objinspstrconsts.oisshowalloutputlines +msgid "Show all output lines" +msgstr "" + #: objinspstrconsts.oisshowclasses msgid "Show classes" msgstr "" diff --git a/components/ideintf/objinspstrconsts.pas b/components/ideintf/objinspstrconsts.pas index 3c83b731d6..0977c00a79 100644 --- a/components/ideintf/objinspstrconsts.pas +++ b/components/ideintf/objinspstrconsts.pas @@ -438,6 +438,7 @@ resourcestring oisChangeClass = 'Change Class ...'; oisChangeParent = 'Change Parent'; lisUnableToFindParserForTool = 'Unable to find parser for tool "%s"'; + oisShowAllOutputLines = 'Show all output lines'; lisUnableToFindParserWithName = 'Unable to find parser with name "%s"'; // TChangeParentDlg diff --git a/ide/compileroptions.pp b/ide/compileroptions.pp index eebdd63686..c645e686f8 100644 --- a/ide/compileroptions.pp +++ b/ide/compileroptions.pp @@ -340,9 +340,9 @@ type FParsers: TStrings; FParsedCommandStamp: integer; FParsedCommand: string; - function GetHasParser(aName: string): boolean; + function GetHasParser(aParserName: string): boolean; procedure SetCommand(const AValue: string); - procedure SetHasParser(aName: string; const AValue: boolean); + procedure SetHasParser(aParserName: string; const AValue: boolean); procedure SetParsers(const AValue: TStrings); protected procedure SubstituteMacros(var s: string); virtual; @@ -368,7 +368,7 @@ type property Owner: TObject read FOwner; property Command: string read FCommand write SetCommand; property Parsers: TStrings read FParsers write SetParsers; - property HasParser[aName: string]: boolean read GetHasParser write SetHasParser; + property HasParser[aParserName: string]: boolean read GetHasParser write SetHasParser; end; TCompilationToolClass = class of TCompilationToolOptions; @@ -4208,23 +4208,23 @@ begin IncreaseChangeStamp; end; -function TCompilationToolOptions.GetHasParser(aName: string): boolean; +function TCompilationToolOptions.GetHasParser(aParserName: string): boolean; begin - Result:=FParsers.IndexOf(aName)>=0; + Result:=FParsers.IndexOf(aParserName)>=0; end; -procedure TCompilationToolOptions.SetHasParser(aName: string; +procedure TCompilationToolOptions.SetHasParser(aParserName: string; const AValue: boolean); var i: Integer; begin - i:=FParsers.IndexOf(aName); + i:=FParsers.IndexOf(aParserName); if i>=0 then begin if AValue then exit; FParsers.Delete(i); end else begin if not AValue then exit; - FParsers.Add(aName); + FParsers.Add(aParserName); end; IncreaseChangeStamp; end; diff --git a/ide/frames/compiler_compilation_options.lfm b/ide/frames/compiler_compilation_options.lfm index 91b2fd60e0..b36d3279be 100644 --- a/ide/frames/compiler_compilation_options.lfm +++ b/ide/frames/compiler_compilation_options.lfm @@ -6,15 +6,15 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame ClientHeight = 539 ClientWidth = 741 TabOrder = 0 - DesignLeft = 481 - DesignTop = 150 + DesignLeft = 537 + DesignTop = 171 object chkCreateMakefile: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 0 Height = 24 Top = 0 - Width = 152 + Width = 129 Caption = 'chkCreateMakefile' ParentShowHint = False ShowHint = True @@ -27,23 +27,23 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 - Height = 120 - Top = 252 + Height = 117 + Top = 243 Width = 741 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'ExecuteAfterGroupBox' - ClientHeight = 101 + ClientHeight = 102 ClientWidth = 737 TabOrder = 3 object lblRunIfExecAfter: TLabel AnchorSideLeft.Control = ExecuteAfterGroupBox AnchorSideTop.Control = ExecuteAfterGroupBox Left = 6 - Height = 17 + Height = 13 Top = 6 - Width = 119 + Width = 99 BorderSpacing.Around = 6 Caption = 'lblRunIfExecAfter' ParentColor = False @@ -53,9 +53,9 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideTop.Control = ExecuteAfterCommandComboBox AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 42 - Width = 195 + Height = 13 + Top = 43 + Width = 158 BorderSpacing.Around = 6 Caption = 'ExecuteAfterCommandLabel' ParentColor = False @@ -64,10 +64,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = lblRunIfExecAfter AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ExecuteAfterGroupBox - Left = 155 + Left = 135 Height = 24 Top = 6 - Width = 172 + Width = 145 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkExecAfterCompile' @@ -77,10 +77,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = chkExecAfterCompile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ExecuteAfterGroupBox - Left = 357 + Left = 310 Height = 24 Top = 6 - Width = 150 + Width = 129 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkExecAfterBuild' @@ -90,78 +90,25 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = chkExecAfterBuild AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ExecuteAfterGroupBox - Left = 537 + Left = 469 Height = 24 Top = 6 - Width = 141 + Width = 123 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkExecAfterRun' TabOrder = 2 end - object ExecuteAfterScanFPCCheckBox: TCheckBox - AnchorSideLeft.Control = ExecuteAfterScanMakeCheckBox - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExecuteAfterScanMakeCheckBox - AnchorSideTop.Side = asrCenter - Left = 448 - Height = 24 - Top = 71 - Width = 238 - BorderSpacing.Left = 24 - BorderSpacing.Around = 6 - Caption = 'ExecuteAfterScanFPCCheckBox' - TabOrder = 6 - end - object ExecuteAfterScanMakeCheckBox: TCheckBox - AnchorSideLeft.Control = ExecuteAfterScanLabel - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExecuteAfterCommandComboBox - AnchorSideTop.Side = asrBottom - Left = 169 - Height = 24 - Top = 71 - Width = 249 - BorderSpacing.Around = 6 - Caption = 'ExecuteAfterScanMakeCheckBox' - TabOrder = 5 - end - object ExecuteAfterShowAllCheckBox: TCheckBox - AnchorSideLeft.Control = ExecuteAfterScanFPCCheckBox - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExecuteAfterScanMakeCheckBox - AnchorSideTop.Side = asrCenter - Left = 716 - Height = 24 - Top = 71 - Width = 235 - BorderSpacing.Left = 24 - BorderSpacing.Around = 6 - Caption = 'ExecuteAfterShowAllCheckBox' - TabOrder = 7 - end - object ExecuteAfterScanLabel: TLabel - AnchorSideLeft.Control = ExecuteAfterGroupBox - AnchorSideTop.Control = ExecuteAfterScanMakeCheckBox - AnchorSideTop.Side = asrCenter - Left = 6 - Height = 17 - Top = 75 - Width = 157 - BorderSpacing.Left = 6 - Caption = 'ExecuteAfterScanLabel' - ParentColor = False - end object ExecuteAfterCommandComboBox: TComboBox AnchorSideLeft.Control = ExecuteAfterCommandLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkExecAfterCompile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ExecAfterBrowseButton - Left = 213 - Height = 29 + Left = 176 + Height = 27 Top = 36 - Width = 468 + Width = 505 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Top = 6 @@ -177,7 +124,7 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideBottom.Control = ExecuteAfterCommandComboBox AnchorSideBottom.Side = asrBottom Left = 681 - Height = 29 + Height = 27 Top = 36 Width = 50 Anchors = [akTop, akRight, akBottom] @@ -186,6 +133,44 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame OnClick = CompCmdBrowseButtonClick TabOrder = 4 end + object ExecAfterParsersLabel: TLabel + AnchorSideLeft.Control = ExecuteAfterGroupBox + AnchorSideTop.Control = ExecAfterParsersCheckComboBox + AnchorSideTop.Side = asrCenter + Left = 6 + Height = 13 + Top = 76 + Width = 125 + BorderSpacing.Left = 6 + Caption = 'ExecAfterParsersLabel' + ParentColor = False + end + object ExecAfterParsersSumLabel: TLabel + AnchorSideLeft.Control = ExecAfterParsersCheckComboBox + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ExecAfterParsersCheckComboBox + AnchorSideTop.Side = asrCenter + Left = 318 + Height = 13 + Top = 76 + Width = 148 + Caption = 'ExecAfterParsersSumLabel' + ParentColor = False + end + object ExecAfterParsersCheckComboBox: TCheckComboBox + AnchorSideLeft.Control = ExecAfterParsersLabel + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ExecuteAfterCommandComboBox + AnchorSideTop.Side = asrBottom + Left = 137 + Height = 27 + Top = 69 + Width = 175 + BorderSpacing.Around = 6 + ItemHeight = 0 + OnItemChange = ExecAfterParsersCheckComboBoxItemChange + TabOrder = 5 + end end object grpCompiler: TGroupBox AnchorSideLeft.Control = Owner @@ -194,23 +179,23 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 - Height = 90 - Top = 156 + Height = 84 + Top = 153 Width = 741 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'grpCompiler' - ClientHeight = 71 + ClientHeight = 69 ClientWidth = 737 TabOrder = 2 object lblRunIfCompiler: TLabel AnchorSideLeft.Control = grpCompiler AnchorSideTop.Control = grpCompiler Left = 6 - Height = 17 + Height = 13 Top = 6 - Width = 114 + Width = 92 BorderSpacing.Around = 6 Caption = 'lblRunIfCompiler' ParentColor = False @@ -220,9 +205,9 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideTop.Control = cobCompiler AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 42 - Width = 79 + Height = 13 + Top = 43 + Width = 62 BorderSpacing.Around = 6 Caption = 'lblCompiler' ParentColor = False @@ -231,10 +216,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = lblRunIfCompiler AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = grpCompiler - Left = 150 + Left = 128 Height = 24 Top = 6 - Width = 167 + Width = 138 BorderSpacing.Left = 30 BorderSpacing.Top = 6 Caption = 'chkCompilerCompile' @@ -244,10 +229,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = chkCompilerCompile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = grpCompiler - Left = 347 + Left = 296 Height = 24 Top = 6 - Width = 145 + Width = 122 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkCompilerBuild' @@ -257,10 +242,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = chkCompilerBuild AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = grpCompiler - Left = 522 + Left = 448 Height = 24 Top = 6 - Width = 136 + Width = 116 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkCompilerRun' @@ -272,10 +257,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideTop.Control = chkCompilerCompile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = BrowseCompilerButton - Left = 97 - Height = 29 + Left = 80 + Height = 27 Top = 36 - Width = 584 + Width = 601 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Top = 6 @@ -291,7 +276,7 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideBottom.Control = cobCompiler AnchorSideBottom.Side = asrBottom Left = 681 - Height = 29 + Height = 27 Top = 36 Width = 50 Anchors = [akTop, akRight, akBottom] @@ -310,23 +295,23 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 - Height = 120 + Height = 117 Top = 30 Width = 741 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'ExecuteBeforeGroupBox' - ClientHeight = 101 + ClientHeight = 102 ClientWidth = 737 TabOrder = 1 object lblRunIfExecBefore: TLabel AnchorSideLeft.Control = ExecuteBeforeGroupBox AnchorSideTop.Control = ExecuteBeforeGroupBox Left = 6 - Height = 17 + Height = 13 Top = 6 - Width = 129 + Width = 108 BorderSpacing.Around = 6 Caption = 'lblRunIfExecBefore' ParentColor = False @@ -336,9 +321,9 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideTop.Control = ExecuteBeforeCommandComboBox AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 42 - Width = 205 + Height = 13 + Top = 43 + Width = 167 BorderSpacing.Around = 6 Caption = 'ExecuteBeforeCommandLabel' ParentColor = False @@ -347,10 +332,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = lblRunIfExecBefore AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ExecuteBeforeGroupBox - Left = 165 + Left = 144 Height = 24 Top = 6 - Width = 182 + Width = 154 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkExecBeforeCompile' @@ -360,10 +345,10 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = chkExecBeforeCompile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ExecuteBeforeGroupBox - Left = 377 + Left = 328 Height = 24 Top = 6 - Width = 160 + Width = 138 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkExecBeforeBuild' @@ -373,78 +358,25 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideLeft.Control = chkExecBeforeBuild AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ExecuteBeforeGroupBox - Left = 567 + Left = 496 Height = 24 Top = 6 - Width = 151 + Width = 132 BorderSpacing.Left = 24 BorderSpacing.Around = 6 Caption = 'chkExecBeforeRun' TabOrder = 2 end - object ExecuteBeforeScanFPCCheckBox: TCheckBox - AnchorSideLeft.Control = ExecuteBeforeScanMakeCheckBox - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExecuteBeforeScanMakeCheckBox - AnchorSideTop.Side = asrCenter - Left = 468 - Height = 24 - Top = 71 - Width = 248 - BorderSpacing.Left = 24 - BorderSpacing.Around = 6 - Caption = 'ExecuteBeforeScanFPCCheckBox' - TabOrder = 6 - end - object ExecuteBeforeScanMakeCheckBox: TCheckBox - AnchorSideLeft.Control = ExecuteBeforeScanLabel - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExecuteBeforeCommandComboBox - AnchorSideTop.Side = asrBottom - Left = 179 - Height = 24 - Top = 71 - Width = 259 - BorderSpacing.Around = 6 - Caption = 'ExecuteBeforeScanMakeCheckBox' - TabOrder = 5 - end - object ExecuteBeforeShowAllCheckBox: TCheckBox - AnchorSideLeft.Control = ExecuteBeforeScanFPCCheckBox - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExecuteBeforeScanMakeCheckBox - AnchorSideTop.Side = asrCenter - Left = 746 - Height = 24 - Top = 71 - Width = 245 - BorderSpacing.Left = 24 - BorderSpacing.Around = 6 - Caption = 'ExecuteBeforeShowAllCheckBox' - TabOrder = 7 - end - object ExecuteBeforeScanLabel: TLabel - AnchorSideLeft.Control = ExecuteBeforeGroupBox - AnchorSideTop.Control = ExecuteBeforeScanMakeCheckBox - AnchorSideTop.Side = asrCenter - Left = 6 - Height = 17 - Top = 75 - Width = 167 - BorderSpacing.Left = 6 - Caption = 'ExecuteBeforeScanLabel' - ParentColor = False - end object ExecuteBeforeCommandComboBox: TComboBox AnchorSideLeft.Control = ExecuteBeforeCommandLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkExecBeforeCompile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ExecBeforeBrowseButton - Left = 223 - Height = 29 + Left = 185 + Height = 27 Top = 36 - Width = 458 + Width = 496 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Top = 6 @@ -461,7 +393,7 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame AnchorSideBottom.Control = ExecuteBeforeCommandComboBox AnchorSideBottom.Side = asrBottom Left = 681 - Height = 29 + Height = 27 Top = 36 Width = 50 Anchors = [akTop, akRight, akBottom] @@ -470,5 +402,43 @@ object CompilerCompilationOptionsFrame: TCompilerCompilationOptionsFrame OnClick = CompCmdBrowseButtonClick TabOrder = 4 end + object ExecBeforeParsersCheckComboBox: TCheckComboBox + AnchorSideLeft.Control = ExecBeforeParsersLabel + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ExecuteBeforeCommandComboBox + AnchorSideTop.Side = asrBottom + Left = 146 + Height = 27 + Top = 69 + Width = 182 + BorderSpacing.Around = 6 + ItemHeight = 0 + OnItemChange = ExecBeforeParsersCheckComboBoxItemChange + TabOrder = 5 + end + object ExecBeforeParsersLabel: TLabel + AnchorSideTop.Control = ExecBeforeParsersCheckComboBox + AnchorSideTop.Side = asrCenter + Left = 6 + Height = 13 + Top = 76 + Width = 134 + BorderSpacing.Left = 6 + Caption = 'ExecBeforeParsersLabel' + ParentColor = False + end + object ExecBeforeParsersSumLabel: TLabel + AnchorSideLeft.Control = ExecBeforeParsersCheckComboBox + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ExecBeforeParsersCheckComboBox + AnchorSideTop.Side = asrCenter + Left = 334 + Height = 13 + Top = 76 + Width = 157 + BorderSpacing.Left = 6 + Caption = 'ExecBeforeParsersSumLabel' + ParentColor = False + end end end diff --git a/ide/frames/compiler_compilation_options.pas b/ide/frames/compiler_compilation_options.pas index 7805783aed..58b2f4e402 100644 --- a/ide/frames/compiler_compilation_options.pas +++ b/ide/frames/compiler_compilation_options.pas @@ -7,7 +7,7 @@ interface uses // RTL + FCL + LCL Classes, sysutils, - Controls, StdCtrls, Dialogs, + Controls, StdCtrls, Dialogs, ComboEx, // CodeTools FileProcs, DefineTemplates, CodeToolManager, // LazUtils @@ -24,6 +24,9 @@ type TCompilerCompilationOptionsFrame = class(TAbstractIDEOptionsEditor) BrowseCompilerButton: TButton; + ExecAfterParsersCheckComboBox: TCheckComboBox; + ExecAfterParsersLabel: TLabel; + ExecAfterParsersSumLabel: TLabel; ExecBeforeBrowseButton: TButton; chkCompilerBuild: TCheckBox; chkCompilerCompile: TCheckBox; @@ -37,27 +40,31 @@ type chkExecBeforeRun: TCheckBox; cobCompiler: TComboBox; ExecAfterBrowseButton: TButton; + ExecBeforeParsersSumLabel: TLabel; ExecuteAfterCommandComboBox: TComboBox; ExecuteAfterCommandLabel: TLabel; ExecuteAfterGroupBox: TGroupBox; - ExecuteAfterScanFPCCheckBox: TCheckBox; - ExecuteAfterScanLabel: TLabel; - ExecuteAfterScanMakeCheckBox: TCheckBox; - ExecuteAfterShowAllCheckBox: TCheckBox; ExecuteBeforeCommandComboBox: TComboBox; ExecuteBeforeCommandLabel: TLabel; ExecuteBeforeGroupBox: TGroupBox; - ExecuteBeforeScanFPCCheckBox: TCheckBox; - ExecuteBeforeScanLabel: TLabel; - ExecuteBeforeScanMakeCheckBox: TCheckBox; - ExecuteBeforeShowAllCheckBox: TCheckBox; + ExecBeforeParsersCheckComboBox: TCheckComboBox; + ExecBeforeParsersLabel: TLabel; grpCompiler: TGroupBox; lblCompiler: TLabel; lblRunIfCompiler: TLabel; lblRunIfExecAfter: TLabel; lblRunIfExecBefore: TLabel; procedure CompCmdBrowseButtonClick(Sender: TObject); + procedure ExecAfterParsersCheckComboBoxItemChange(Sender: TObject; + {%H-}AIndex: Integer); + procedure ExecBeforeParsersCheckComboBoxItemChange(Sender: TObject; + {%H-}AIndex: Integer); private + procedure ReadSettingsParsers(ToolOpts: TCompilationToolOptions; + Cmb: TCheckComboBox; Lbl: TLabel); + procedure WriteSettingsParsers(ToolOpts: TCompilationToolOptions; + Cmb: TCheckComboBox); + procedure UpdateParsersLabel(Lbl: TLabel; Cmb: TCheckComboBox); public function GetTitle: string; override; procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override; @@ -141,6 +148,104 @@ begin end; end; +procedure TCompilerCompilationOptionsFrame. + ExecAfterParsersCheckComboBoxItemChange(Sender: TObject; AIndex: Integer); +begin + UpdateParsersLabel(ExecAfterParsersSumLabel,ExecAfterParsersCheckComboBox); +end; + +procedure TCompilerCompilationOptionsFrame. + ExecBeforeParsersCheckComboBoxItemChange(Sender: TObject; AIndex: Integer); +begin + UpdateParsersLabel(ExecBeforeParsersSumLabel,ExecBeforeParsersCheckComboBox); +end; + +procedure TCompilerCompilationOptionsFrame.ReadSettingsParsers( + ToolOpts: TCompilationToolOptions; Cmb: TCheckComboBox; Lbl: TLabel); +const + BoolToChecked: array[boolean] of TCheckBoxState = (cbUnchecked,cbChecked); +var + l: TFPList; + i, j: Integer; + ParserClass: TExtToolParserClass; + s: String; +begin + l:=TFPList.Create; + try + // add registered parsers + for i:=0 to ExternalToolList.ParserCount-1 do + begin + ParserClass:=ExternalToolList.Parsers[i]; + j:=0; + while (j=ParserClass.Priority) do + inc(j); + l.Insert(j,ParserClass); + end; + Cmb.Clear; + for i:=0 to l.Count-1 do + begin + ParserClass:=TExtToolParserClass(l[i]); + s:=ParserClass.GetLocalizedParserName; + Cmb.AddItem(s,BoolToChecked[ToolOpts.HasParser[ParserClass.GetParserName]]); + end; + // add not registered parsers + // Note: this happens when opening a project, which needs a designtime-package + for i:=0 to ToolOpts.Parsers.Count-1 do + begin + s:=ToolOpts.Parsers[i]; + if ExternalToolList.FindParserWithName(s)=nil then + Cmb.AddItem(s,cbChecked); + end; + UpdateParsersLabel(Lbl,Cmb); + finally + l.Free; + end; +end; + +procedure TCompilerCompilationOptionsFrame.WriteSettingsParsers( + ToolOpts: TCompilationToolOptions; Cmb: TCheckComboBox); +var + sl: TStringList; + i, j: Integer; +begin + sl:=TStringList.Create; + try + for i:=0 to Cmb.Items.Count-1 do + if Cmb.Checked[i] then begin + j:=ExternalToolList.ParserCount-1; + while (j>=0) + and (Cmb.Items[i]<>ExternalToolList.Parsers[i].GetLocalizedParserName) do + dec(j); + if j>=0 then + sl.Add(ExternalToolList.Parsers[i].GetParserName) + else + sl.Add(Cmb.Items[i]); // not registered parser + end; + ToolOpts.Parsers:=sl; + finally + sl.Free; + end; +end; + +procedure TCompilerCompilationOptionsFrame.UpdateParsersLabel(Lbl: TLabel; + Cmb: TCheckComboBox); +var + s: String; + i: Integer; +begin + s:=''; + for i:=0 to Cmb.Items.Count-1 do + begin + if Cmb.Checked[i] then + begin + if s<>'' then s:=s+', '; + s:=s+Cmb.Items[i]; + end; + end; + Lbl.Caption:=s; +end; + function TCompilerCompilationOptionsFrame.GetTitle: string; begin Result := dlgCOCompilerCommands; @@ -158,10 +263,7 @@ begin chkExecBeforeRun.Caption := lisRunStage; ExecuteBeforeCommandComboBox.Text := ''; ExecuteBeforeCommandLabel.Caption := lisCOCommand; - ExecuteBeforeScanLabel.Caption := lisCOScanForMessages; - ExecuteBeforeScanFPCCheckBox.Caption := SubToolFPC; // do not translate name - ExecuteBeforeScanMakeCheckBox.Caption := SubToolMake; // do not translate name - ExecuteBeforeShowAllCheckBox.Caption := lisA2PShowAll; + ExecBeforeParsersLabel.Caption:=lisParsers; grpCompiler.Caption := lisCompiler; lblRunIfCompiler.Caption := lisCOCallOn; @@ -181,10 +283,7 @@ begin chkExecAfterRun.Caption := lisRunStage; ExecuteAfterCommandComboBox.Text := ''; ExecuteAfterCommandLabel.Caption := lisCOCommand; - ExecuteAfterScanLabel.Caption := lisCOScanForMessages; - ExecuteAfterScanFPCCheckBox.Caption := SubToolFPC; // do not translate name - ExecuteAfterScanMakeCheckBox.Caption := SubToolMake; // do not translate name - ExecuteAfterShowAllCheckBox.Caption := lisA2PShowAll; + ExecAfterParsersLabel.Caption:=lisParsers; lblRunIfExecAfter.Caption := lisCOCallOn; end; @@ -195,9 +294,6 @@ begin chkCreateMakefile.Checked := Options.CreateMakefileOnBuild; ExecuteBeforeCommandComboBox.Text := Options.ExecuteBefore.Command; - ExecuteBeforeScanFPCCheckBox.Checked := Options.ExecuteBefore.HasParser[SubToolFPC]; - ExecuteBeforeScanMakeCheckBox.Checked := Options.ExecuteBefore.HasParser[SubToolMake]; - ExecuteBeforeShowAllCheckBox.Checked := Options.ExecuteBefore.HasParser[SubToolDefault]; if Options.ExecuteBefore is TProjectCompilationToolOptions then with TProjectCompilationToolOptions(Options.ExecuteBefore) do @@ -225,6 +321,8 @@ begin SetComboBoxText(cobCompiler,Options.CompilerPath,cstFilename); Items.EndUpdate; end; + ReadSettingsParsers(Options.ExecuteBefore,ExecBeforeParsersCheckComboBox, + ExecBeforeParsersSumLabel); ExecuteBeforeCommandComboBox.Items.Assign( InputHistories.HistoryLists.GetList('BuildExecBefore',true,rltFile)); @@ -269,9 +367,6 @@ begin end; ExecuteAfterCommandComboBox.Text := Options.ExecuteAfter.Command; - ExecuteAfterScanFPCCheckBox.Checked := Options.ExecuteAfter.HasParser[SubToolFPC]; - ExecuteAfterScanMakeCheckBox.Checked := Options.ExecuteAfter.HasParser[SubToolMake]; - ExecuteAfterShowAllCheckBox.Checked := Options.ExecuteAfter.HasParser[SubToolDefault]; if Options.ExecuteAfter is TProjectCompilationToolOptions then with TProjectCompilationToolOptions(Options.ExecuteAfter) do begin @@ -290,6 +385,8 @@ begin chkExecAfterBuild.Visible := False; chkExecAfterRun.Visible := False; end; + ReadSettingsParsers(Options.ExecuteAfter,ExecAfterParsersCheckComboBox, + ExecAfterParsersSumLabel); end; procedure TCompilerCompilationOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions); @@ -308,9 +405,8 @@ begin Options.CreateMakefileOnBuild := chkCreateMakefile.Checked; Options.ExecuteBefore.Command := ExecuteBeforeCommandComboBox.Text; - Options.ExecuteBefore.HasParser[SubToolFPC] := ExecuteBeforeScanFPCCheckBox.Checked; - Options.ExecuteBefore.HasParser[SubToolMake] :=ExecuteBeforeScanMakeCheckBox.Checked; - Options.ExecuteBefore.HasParser[SubToolDefault] := ExecuteBeforeShowAllCheckBox.Checked; + + WriteSettingsParsers(Options.ExecuteBefore,ExecBeforeParsersCheckComboBox); if Options.ExecuteBefore is TProjectCompilationToolOptions then begin @@ -335,9 +431,7 @@ begin TPkgCompilerOptions(Options).SkipCompiler := chkCompilerCompile.Checked; Options.ExecuteAfter.Command := ExecuteAfterCommandComboBox.Text; - Options.ExecuteAfter.HasParser[SubToolFPC] := ExecuteAfterScanFPCCheckBox.Checked; - Options.ExecuteAfter.HasParser[SubToolMake] :=ExecuteAfterScanMakeCheckBox.Checked; - Options.ExecuteAfter.HasParser[SubToolDefault] := ExecuteAfterShowAllCheckBox.Checked; + WriteSettingsParsers(Options.ExecuteAfter,ExecAfterParsersCheckComboBox); if Options.ExecuteAfter is TProjectCompilationToolOptions then begin TProjectCompilationToolOptions(Options.ExecuteAfter).CompileReasons := diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 6e4ff02433..2de0b5a966 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -2377,6 +2377,7 @@ resourcestring // Initial setup dialog lisScanning = 'Scanning'; lisCompiler = 'Compiler'; + lisParsers = 'Parsers:'; lisDebugger = 'Debugger'; lisToFPCPath = 'Path:';