Index: CHANGES.txt
==================================================================
--- CHANGES.txt
+++ CHANGES.txt
@@ -1,5 +1,19 @@
+Version 0.13.0
+2024-01-11
+
+[Feature] Support for hdtbl.
+[Changed] Build extras and build preprocessors are now listed in a multi-select box.
+[Improved] If no error has occurred, the log file will contain a success message.
+[Improved] The default font looked gross on macOS. This should be better now.
+[Bugfix] Calling troff over the system default shell now, potentially finding more paths.
+[Improved] BuildDocument uses a simpler execution approach now.
+[Feature] macOS Cmd+X/C/V are supported now.
+[Feature] Added a loading window so you won't think groffstudio would procrastinate.
+
+-------------------------------
+
Version 0.12.0
2022-03-14
[Feature] If the installed version of troff is not detected as groff, a warning is displayed.
[Changed] On platforms which probably use a package manager (currently, Linux and BSDs), the "update check" checkbox is disabled and the related libraries are not referenced.
Index: README.md
==================================================================
--- README.md
+++ README.md
@@ -2,11 +2,11 @@
You know what was missing with `groff`? A good alternative to TeXstudio. Here we go.
## Screenshot
-![Screenshot](https://i.imgur.com/MXLYfwq.png)
+![Screenshot](https://i.imgur.com/GNu2M6n.png)
## Features
* Written in Lazarus (Free Pascal).
* Should be cross-platform (but Windows support is mediocre yet).
Index: src/buildoutputwindow.lfm
==================================================================
--- src/buildoutputwindow.lfm
+++ src/buildoutputwindow.lfm
@@ -5,11 +5,11 @@
Width = 168
BorderStyle = bsDialog
Caption = 'building'
ClientHeight = 80
ClientWidth = 168
- LCLVersion = '2.3.0.0'
+ LCLVersion = '3.99.0.0'
object Label1: TLabel
Left = 32
Height = 37
Top = 16
Width = 117
Index: src/buildoutputwindow.pas
==================================================================
--- src/buildoutputwindow.pas
+++ src/buildoutputwindow.pas
@@ -18,11 +18,11 @@
{$mode ObjFPC}{$H+}
interface
uses
- Classes, SysUtils, Forms, StdCtrls, Process;
+ Classes, SysUtils, Forms, StdCtrls, Process, Dialogs;
type
{ TBuildStatusWindow }
@@ -42,60 +42,36 @@
{$R *.lfm}
function TBuildStatusWindow.BuildDocument(CommandLine: String; LogFile: String): Boolean;
var
- p: TProcess;
- n: LongInt;
str: String;
lh: TextFile;
-begin
- p := TProcess.Create(nil);
- p.Options := p.Options + [poUsePipes, poStderrToOutPut];
-
-{$IFDEF WINDOWS}
- p.Executable := 'cmd';
- p.Parameters.Add('/c');
-{$ENDIF}
-{$IFDEF UNIX}
- p.Executable := 'sh';
- p.Parameters.Add('-c');
-{$ENDIF}
- p.Parameters.Add(CommandLine);
- p.Execute;
+ ret: Boolean;
+begin
+{$IFDEF WINDOWS}
+ ret := RunCommand('cmd', ['/c', CommandLine], str, [], swoHIDE);
+{$ELSE}
+ ret := RunCommand('sh', ['-c', CommandLine], str, [], swoHIDE);
+{$ENDIF}
+
+ if Length(str) = 0 then str := 'No problems have occurred. :-)';
if LogFile <> '' then
begin
AssignFile(lh, LogFile);
- Rewrite(lh);
-
- while p.Running do
- begin
- n := p.Output.Read(str, 2048);
- if n > 0 then
- begin
- writeln(lh, str);
- end
- else Sleep(100);
- end;
-
- { We might have some buffer contents left. }
- repeat
- n := p.Output.Read(str, 2048);
- if n > 0 then
- begin
- writeln(lh, str);
- end;
- until n <= 0;
-
- CloseFile(lh);
- end;
-
- result := p.ExitStatus > 0;
- p.Free;
+ try
+ ReWrite(lh);
+ Write(lh, str);
+ finally
+ CloseFile(lh);
+ end;
+ end;
{ Close the status window: }
Close;
+
+ Result := ret;
end;
end.
Index: src/groffstudio.lpi
==================================================================
--- src/groffstudio.lpi
+++ src/groffstudio.lpi
@@ -20,19 +20,22 @@
-
+
+
+
+
@@ -74,10 +77,18 @@
+
+
+
+
+
+
+
+
@@ -88,19 +99,20 @@
-
+
+
Index: src/groffstudio.lpr
==================================================================
--- src/groffstudio.lpr
+++ src/groffstudio.lpr
@@ -1,25 +1,51 @@
-program groffstudio;
-
-{$mode objfpc}{$H+}
-
-uses
- {$IFDEF UNIX}
- cthreads,
- {$ENDIF}
- {$IFDEF HASAMIGA}
- athreads,
- {$ENDIF}
- Interfaces, // this includes the LCL widgetset
- Forms, lazcontrols, Unit1, Helpers, BuildOutputWindow
- { you can add units after this };
-
-{$R *.res}
-
-begin
- RequireDerivedFormResource:=True;
- Application.Scaled:=True;
- Application.Initialize;
- Application.CreateForm(TMainForm, MainForm);
- Application.Run;
-end.
-
+program groffstudio;
+
+{
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License, Version 1.1 only
+ (the "License"). You may not use this file except in compliance
+ with the License.
+
+ See the file LICENSE in this distribution for details.
+ A copy of the CDDL is also available via the Internet at
+ https://spdx.org/licenses/CDDL-1.1.html
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the contents of the LICENSE file from this
+ distribution.
+}
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}
+ cthreads,
+ {$ENDIF}
+ {$IFDEF HASAMIGA}
+ athreads,
+ {$ENDIF}
+ Interfaces,
+ Forms, lazcontrols, Unit1, Helpers, BuildOutputWindow, Splashscreen;
+
+{$R *.res}
+
+var
+ Splash: TSplashscreenWindow;
+
+begin
+ RequireDerivedFormResource:=True;
+ Application.Scaled:=True;
+ Application.Initialize;
+
+ { Load the loading screen }
+ Splash := TSplashscreenWindow.Create(Application);
+ Splash.Show;
+ Splash.Update;
+ Application.ProcessMessages;
+
+ Application.CreateForm(TMainForm, MainForm);
+
+ Splash.Close;
+ Application.Run;
+end.
+
ADDED src/splashscreen.lfm
Index: src/splashscreen.lfm
==================================================================
--- src/splashscreen.lfm
+++ src/splashscreen.lfm
@@ -0,0 +1,20 @@
+object SplashscreenWindow: TSplashscreenWindow
+ Left = 493
+ Height = 80
+ Top = 160
+ Width = 168
+ BorderStyle = bsNone
+ Caption = 'preparing'
+ ClientHeight = 80
+ ClientWidth = 168
+ FormStyle = fsSplash
+ object Label1: TLabel
+ Left = 16
+ Height = 37
+ Top = 16
+ Width = 141
+ Caption = 'preparing ...'
+ Font.Height = -27
+ ParentFont = False
+ end
+end
ADDED src/splashscreen.pas
Index: src/splashscreen.pas
==================================================================
--- src/splashscreen.pas
+++ src/splashscreen.pas
@@ -0,0 +1,42 @@
+unit Splashscreen;
+
+{
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License, Version 1.1 only
+ (the "License"). You may not use this file except in compliance
+ with the License.
+
+ See the file LICENSE in this distribution for details.
+ A copy of the CDDL is also available via the Internet at
+ https://spdx.org/licenses/CDDL-1.1.html
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the contents of the LICENSE file from this
+ distribution.
+}
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
+
+type
+
+ { TSplashscreenWindow }
+
+ TSplashscreenWindow = class(TForm)
+ Label1: TLabel;
+ private
+
+ public
+
+ end;
+
+implementation
+
+{$R *.lfm}
+
+end.
+
Index: src/unit1.lfm
==================================================================
--- src/unit1.lfm
+++ src/unit1.lfm
@@ -1,22 +1,22 @@
object MainForm: TMainForm
- Left = 2381
+ Left = 1073
Height = 692
Top = 99
- Width = 981
+ Width = 847
Caption = 'groffstudio'
ClientHeight = 692
- ClientWidth = 981
+ ClientWidth = 847
DefaultMonitor = dmPrimary
+ Position = poScreenCenter
OnClose = FormClose
OnCreate = FormCreate
- LCLVersion = '2.3.0.0'
object MainStatusBar: TStatusBar
Left = 0
Height = 23
Top = 669
- Width = 981
+ Width = 847
Panels = <
item
Text = 'file name with save status'
Width = 200
end
@@ -32,33 +32,33 @@
end
object ExtendedNotebook1: TExtendedNotebook
Left = 8
Height = 662
Top = 8
- Width = 961
+ Width = 827
ActivePage = tsEdit
Anchors = [akTop, akLeft, akRight, akBottom]
Style = tsFlatButtons
TabIndex = 0
TabOrder = 1
object tsEdit: TTabSheet
Caption = 'edit a groff document'
ClientHeight = 631
- ClientWidth = 953
+ ClientWidth = 819
ParentFont = False
object GroupBox1: TGroupBox
Left = 10
Height = 66
Top = 560
- Width = 933
+ Width = 799
Align = alBottom
BorderSpacing.Left = 10
BorderSpacing.Right = 10
BorderSpacing.Bottom = 5
Caption = 'build'
ClientHeight = 46
- ClientWidth = 929
+ ClientWidth = 795
TabOrder = 0
object Label1: TLabel
Left = 184
Height = 15
Top = -4
@@ -81,170 +81,134 @@
)
TabOrder = 0
Text = '[ select ]'
end
object Label2: TLabel
- Left = 806
+ Left = 672
Height = 15
Top = -4
Width = 78
Anchors = [akTop, akRight]
Caption = 'output format:'
ParentColor = False
end
object rdPs: TRadioButton
- Left = 807
+ Left = 673
Height = 19
Top = 16
Width = 71
Anchors = [akTop, akRight]
Caption = 'PostScript'
- OnChange = rdPsChange
TabOrder = 1
end
object rdPdf: TRadioButton
- Left = 887
+ Left = 753
Height = 19
Top = 16
Width = 39
Anchors = [akTop, akRight]
Caption = 'PDF'
- OnChange = rdPdfChange
TabOrder = 2
end
object Label3: TLabel
- Left = 424
+ Left = 419
Height = 15
Top = -4
Width = 76
Anchors = [akTop, akRight]
Caption = 'preprocessors:'
ParentColor = False
end
- object chkEqn: TCheckBox
- Left = 480
- Height = 19
- Top = 16
- Width = 38
- Anchors = [akTop, akRight]
- Caption = 'eqn'
- TabOrder = 3
- end
- object chkPic: TCheckBox
- Left = 566
- Height = 19
- Top = 16
- Width = 34
- Anchors = [akTop, akRight]
- Caption = 'pic'
- TabOrder = 4
- end
- object chkTbl: TCheckBox
- Left = 654
- Height = 19
- Top = 16
- Width = 32
- Anchors = [akTop, akRight]
- Caption = 'tbl'
- TabOrder = 5
- end
- object chkGrn: TCheckBox
- Left = 524
- Height = 19
- Top = 16
- Width = 36
- Anchors = [akTop, akRight]
- Caption = 'grn'
- TabOrder = 6
- end
- object chkChem: TCheckBox
- Left = 424
- Height = 19
- Top = 16
- Width = 48
- Anchors = [akTop, akRight]
- Caption = 'chem'
- TabOrder = 7
- end
- object chkRefer: TCheckBox
- Left = 606
- Height = 19
- Top = 16
- Width = 42
- Anchors = [akTop, akRight]
- Caption = 'refer'
- TabOrder = 8
- end
object Label4: TLabel
- Left = 707
+ Left = 544
Height = 15
Top = -4
Width = 34
Anchors = [akTop, akRight]
Caption = 'extras:'
ParentColor = False
end
- object chkPdfMark: TCheckBox
- Left = 708
- Height = 19
- Top = 16
- Width = 63
- Anchors = [akTop, akRight]
- Caption = 'Pdfmark'
- Enabled = False
- TabOrder = 9
- end
object btnBuild: TButton
Left = 0
Height = 29
Top = 10
Width = 75
Caption = 'build'
Color = clLime
Enabled = False
Font.Style = [fsBold, fsItalic]
- OnClick = btnBuildClick
ParentFont = False
- TabOrder = 10
+ TabOrder = 3
+ OnClick = btnBuildClick
end
object chkLogFile: TCheckBox
Left = 80
Height = 19
Hint = 'If enabled, a log file containing the groff output will be placed alongside the source document.'
Top = 16
Width = 68
Caption = 'log to file'
Enabled = False
- TabOrder = 11
+ TabOrder = 4
+ end
+ object chkBoxPreprocessors: TCheckComboBox
+ Left = 419
+ Height = 22
+ Top = 15
+ Width = 100
+ Anchors = [akTop, akRight]
+ ItemHeight = 16
+ Items.Strings = (
+ 'chem'
+ 'eqn'
+ 'grn'
+ 'pic'
+ 'refer'
+ 'tbl'
+ )
+ TabOrder = 5
+ end
+ object chkBoxExtras: TCheckComboBox
+ Left = 544
+ Height = 22
+ Top = 15
+ Width = 100
+ Anchors = [akTop, akRight]
+ ItemHeight = 16
+ Items.Strings = (
+ 'hdtbl'
+ 'Pdfmark'
+ )
+ TabOrder = 6
end
end
object btnSaveGroff: TButton
- Left = 868
+ Left = 734
Height = 28
Top = 528
Width = 75
Anchors = [akRight, akBottom]
Caption = 'save'
Font.Style = [fsBold]
- OnClick = btnSaveGroffClick
ParentFont = False
TabOrder = 1
+ OnClick = btnSaveGroffClick
end
object btnLoadGroff: TButton
- Left = 787
+ Left = 653
Height = 28
Top = 528
Width = 75
Anchors = [akRight, akBottom]
Caption = 'load'
Font.Style = [fsBold]
- OnClick = btnLoadGroffClick
ParentFont = False
TabOrder = 2
+ OnClick = btnLoadGroffClick
end
object Label5: TLabel
- Left = 331
+ Left = 197
Height = 15
Top = 541
Width = 438
Anchors = [akRight, akBottom]
Caption = 'note that everything build-related will be stored in the document''s storage directory'
@@ -255,21 +219,21 @@
end
inline SynEdit1: TSynEdit
Left = 10
Height = 523
Top = 0
- Width = 933
+ Width = 799
Anchors = [akTop, akLeft, akRight, akBottom]
Font.CharSet = 4
Font.Height = -13
- Font.Name = 'Consolas'
+ Font.Name = 'Andale Mono'
Font.Pitch = fpFixed
Font.Quality = fqCleartypeNatural
ParentColor = False
ParentFont = False
TabOrder = 3
- Gutter.Width = 55
+ Gutter.Width = 57
Gutter.MouseActions = <>
RightGutter.Width = 0
RightGutter.MouseActions = <>
Keystrokes = <
item
@@ -689,16 +653,28 @@
ShortCut = 57380
end
item
Command = ecColSelEditorBottom
ShortCut = 57379
+ end
+ item
+ Command = ecPaste
+ ShortCut = 4182
+ end
+ item
+ Command = ecCopy
+ ShortCut = 4163
+ end
+ item
+ Command = ecCut
+ ShortCut = 4184
end>
MouseActions = <>
MouseTextActions = <>
MouseSelActions = <>
- Options = [eoAutoIndent, eoGroupUndo, eoHideRightMargin, eoSmartTabs, eoTabsToSpaces, eoTrimTrailingSpaces, eoDragDropEditing, eoDoubleClickSelectsLine]
- Options2 = [eoEnhanceEndKey, eoFoldedCopyPaste, eoPersistentBlock, eoOverwriteBlock, eoAcceptDragDropEditing]
+ Options = [eoAutoIndent, eoEnhanceHomeKey, eoGroupUndo, eoHideRightMargin, eoKeepCaretX, eoSmartTabs, eoTabsToSpaces, eoTrimTrailingSpaces, eoDragDropEditing, eoDoubleClickSelectsLine]
+ Options2 = [eoEnhanceEndKey, eoPersistentBlock, eoOverwriteBlock, eoAcceptDragDropEditing]
MouseOptions = [emDragDropEditing, emDoubleClickSelectsLine]
VisibleSpecialChars = [vscSpace, vscTabAtLast]
SelectedColor.BackPriority = 50
SelectedColor.ForePriority = 50
SelectedColor.FramePriority = 50
@@ -723,11 +699,11 @@
object SynGutterMarks1: TSynGutterMarks
Width = 24
MouseActions = <>
end
object SynGutterLineNumber1: TSynGutterLineNumber
- Width = 15
+ Width = 17
MouseActions = <>
MarkupInfo.Background = clBtnFace
MarkupInfo.Foreground = clNone
DigitCount = 2
ShowOnlyLineNumbersMultiplesOf = 1
@@ -757,28 +733,28 @@
end
end
object tsSettings: TTabSheet
Caption = 'groffstudio settings'
ClientHeight = 631
- ClientWidth = 953
+ ClientWidth = 819
object chkAutoSaveBuildSettings: TCheckBox
Left = 0
Height = 19
Top = 16
Width = 309
Caption = 'save and restore the chosen build settings for next time'
TabOrder = 0
end
object btnSaveSettings: TButton
- Left = 864
+ Left = 730
Height = 25
Top = 600
Width = 91
Anchors = [akRight, akBottom]
Caption = 'save settings'
- OnClick = btnSaveSettingsClick
TabOrder = 1
+ OnClick = btnSaveSettingsClick
end
object Label14: TLabel
Left = 0
Height = 15
Top = 80
@@ -796,23 +772,23 @@
end
end
object tsGroff: TTabSheet
Caption = 'groff version'
ClientHeight = 631
- ClientWidth = 953
+ ClientWidth = 819
object GroupBox2: TGroupBox
Left = 20
Height = 57
Top = 566
- Width = 913
+ Width = 779
Align = alBottom
BorderSpacing.Left = 20
BorderSpacing.Right = 20
BorderSpacing.Bottom = 8
Caption = 'groff for Windows'
ClientHeight = 37
- ClientWidth = 909
+ ClientWidth = 775
TabOrder = 0
object Label6: TLabel
Left = 8
Height = 15
Top = 8
@@ -822,33 +798,33 @@
end
object edtOnlineGroffVersionWindows: TEdit
Left = 136
Height = 15
Top = 8
- Width = 676
+ Width = 542
Anchors = [akTop, akLeft, akRight]
BorderStyle = bsNone
Enabled = False
TabOrder = 0
Text = 'fetching ...'
end
object btnDownloadGroffWindows: TButton
- Left = 820
+ Left = 686
Height = 25
Top = 5
Width = 80
Anchors = [akTop, akRight]
Caption = 'download it'
- OnClick = btnDownloadGroffWindowsClick
TabOrder = 1
+ OnClick = btnDownloadGroffWindowsClick
end
end
object Label7: TLabel
Left = 8
- Height = 15
+ Height = 30
Top = 8
- Width = 941
+ Width = 807
Anchors = [akTop, akLeft, akRight]
Caption = 'as you might guess, groffstudio requires a working installation of groff. this page performs the basic checks for you. note that on windows, everything is harder than it should. :-)'
Constraints.MaxHeight = 582
ParentColor = False
WordWrap = True
@@ -863,21 +839,21 @@
end
object edtGroffInstalledVersion: TEdit
Left = 144
Height = 15
Top = 56
- Width = 805
+ Width = 671
Anchors = [akTop, akLeft, akRight]
BorderStyle = bsNone
Enabled = False
TabOrder = 1
end
object lblTroffCommandNotFound: TLabel
Left = 8
Height = 45
Top = 112
- Width = 940
+ Width = 806
Anchors = [akTop, akLeft, akRight]
Caption = 'groff was not found. in order to use groffstudio, you absolutely need groff in your PATH variable. on unix and unix-like systems, you''ll need to edit the $PATH variable. on windows, i warmly recommend the Rapid Environment Editor for that.'#13#10'please exit groffstudio at your nearest convenience and adjust your PATH variables. then try again.'
Font.Color = clRed
ParentColor = False
ParentFont = False
@@ -886,11 +862,11 @@
end
object edtGroffstudioInstalledVersion: TEdit
Left = 144
Height = 15
Top = 77
- Width = 805
+ Width = 671
Anchors = [akTop, akLeft, akRight]
BorderStyle = bsNone
Enabled = False
TabOrder = 2
end
@@ -904,11 +880,11 @@
end
end
object tsAbout: TTabSheet
Caption = 'about groffstudio'
ClientHeight = 631
- ClientWidth = 953
+ ClientWidth = 819
object lblAboutProductName: TLabel
Left = 0
Height = 61
Top = 16
Width = 315
@@ -958,11 +934,11 @@
end
object mLicense: TMemo
Left = 0
Height = 418
Top = 216
- Width = 960
+ Width = 826
Anchors = [akTop, akLeft, akRight]
ScrollBars = ssAutoBoth
TabOrder = 0
end
object lblWebsite: TLabel
Index: src/unit1.pas
==================================================================
--- src/unit1.pas
+++ src/unit1.pas
@@ -19,12 +19,12 @@
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls,
- ExtCtrls, Buttons, ExtendedNotebook, SynEdit, fphttpclient,
- RegExpr, LCLIntf, LCLType, IniPropStorage, Process, Helpers, fileinfo,
+ ExtCtrls, Buttons, ExtendedNotebook, SynEdit, fphttpclient, RegExpr, LCLIntf,
+ LCLType, IniPropStorage, ComboEx, Process, Helpers, fileinfo,
{$IF DEFINED(WINDOWS)}
winpeimagereader, opensslsockets,
{$ELSEIF DEFINED(DARWIN)}
machoreader, ssockets, sslsockets, sslbase, opensslsockets,
{$ELSEIF DEFINED(LINUX)}
@@ -40,20 +40,15 @@
btnSaveGroff: TButton;
btnLoadGroff: TButton;
btnBuild: TButton;
btnDownloadGroffWindows: TButton;
btnSaveSettings: TButton;
+ chkBoxExtras: TCheckComboBox;
+ chkBoxPreprocessors: TCheckComboBox;
chkUpdateCheckOnStart: TCheckBox;
chkLogFile: TCheckBox;
chkAutoSaveBuildSettings: TCheckBox;
- chkPdfMark: TCheckBox;
- chkRefer: TCheckBox;
- chkChem: TCheckBox;
- chkGrn: TCheckBox;
- chkTbl: TCheckBox;
- chkPic: TCheckBox;
- chkEqn: TCheckBox;
cmbMacro: TComboBox;
edtGroffInstalledVersion: TEdit;
edtGroffstudioInstalledVersion: TEdit;
edtOnlineGroffVersionWindows: TEdit;
ExtendedNotebook1: TExtendedNotebook;
@@ -98,12 +93,10 @@
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure lblFossilRepoClick(Sender: TObject);
procedure lblGithubRepoClick(Sender: TObject);
procedure lblWebsiteClick(Sender: TObject);
- procedure rdPdfChange(Sender: TObject);
- procedure rdPsChange(Sender: TObject);
procedure SynEdit1Change(Sender: TObject);
{$IFDEF DARWIN}
procedure GetSocketHandler(Sender: TObject; const UseSSL: Boolean; out AHandler: TSocketHandler);
{$ENDIF}
private
@@ -145,11 +138,15 @@
{$IFDEF DARWIN}
HTTPClient: TFPHttpClient;
{$ENDIF}
begin
// What's the current running groff version?
- if RunCommand('troff', ['--version'], GroffOutputVersion) then
+ {$IFDEF WINDOWS}
+ if RunCommand('cmd', ['/c', 'troff --version'], GroffOutputVersion, [], swoHIDE) then
+ {$ELSE}
+ if RunCommand('/bin/sh', ['-c', 'troff --version'], GroffOutputVersion, [], swoHIDE) then
+ {$ENDIF}
begin
edtGroffInstalledVersion.Text := GroffOutputVersion;
if pos('GNU', GroffOutputVersion) = 0 then
ShowMessage('groffstudio thinks that your installed version of troff is not GNU troff.' + LineEnding +
'If this is correct, you are advised to fix this before continuing.' + LineEnding +
@@ -188,17 +185,18 @@
if storeBuildSettings then
begin
chkLogFile.Checked := iniStorage.ReadBoolean('BuildLogFile', False);
cmbMacro.Text := iniStorage.ReadString('BuildChosenMacro', '[ select ]');
- chkChem.Checked := iniStorage.ReadBoolean('BuildUseChem', False);
- chkEqn.Checked := iniStorage.ReadBoolean('BuildUseEqn', False);
- chkGrn.Checked := iniStorage.ReadBoolean('BuildUseGrn', False);
- chkPic.Checked := iniStorage.ReadBoolean('BuildUsePic', False);
- chkRefer.Checked := iniStorage.ReadBoolean('BuildUseRefer', False);
- chkTbl.Checked := iniStorage.ReadBoolean('BuildUseTbl', False);
- chkPdfMark.Checked := iniStorage.ReadBoolean('BuildUsePdfMark', False);
+ chkBoxPreprocessors.Checked[0] := iniStorage.ReadBoolean('BuildUseChem', False);
+ chkBoxPreprocessors.Checked[1] := iniStorage.ReadBoolean('BuildUseEqn', False);
+ chkBoxPreprocessors.Checked[2] := iniStorage.ReadBoolean('BuildUseGrn', False);
+ chkBoxPreprocessors.Checked[3] := iniStorage.ReadBoolean('BuildUsePic', False);
+ chkBoxPreprocessors.Checked[4] := iniStorage.ReadBoolean('BuildUseRefer', False);
+ chkBoxPreprocessors.Checked[5] := iniStorage.ReadBoolean('BuildUseTbl', False);
+ chkBoxExtras.Checked[0] := iniStorage.ReadBoolean('BuildUseHdtbl', False);
+ chkBoxExtras.Checked[1] := iniStorage.ReadBoolean('BuildUsePdfMark', False);
rdPs.Checked := iniStorage.ReadBoolean('BuildToPostscript', False);
rdPdf.Checked := iniStorage.ReadBoolean('BuildToPDF', False);
end;
// What's the latest available version?
@@ -298,20 +296,10 @@
procedure TMainForm.lblWebsiteClick(Sender: TObject);
begin
OpenURL('https://groff.tuxproject.de');
end;
-procedure TMainForm.rdPdfChange(Sender: TObject);
-begin
- chkPdfMark.Enabled := True;
-end;
-
-procedure TMainForm.rdPsChange(Sender: TObject);
-begin
- chkPdfMark.Enabled := False;
-end;
-
procedure TMainForm.SynEdit1Change(Sender: TObject);
begin
// Set the "Changed" mark:
MainStatusBar.Panels[0].Text := '* ' + currentGroffFileName;
unsavedChanges := True;
@@ -340,27 +328,29 @@
// Build the parameters:
buildOpts := 'groff';
// - Macro:
- if cmbMacro.SelText <> '' then buildOpts := buildOpts + ' -' + cmbMacro.SelText;
+ if LeftStr(cmbMacro.Text, 1) = 'm' then buildOpts := buildOpts + ' -' + cmbMacro.Text;
// - Enforce UTF-8:
buildOpts := buildOpts + ' -Kutf8';
// - Preprocessors:
- if chkChem.Checked then buildOpts := buildOpts + ' -chem';
- if chkEqn.Checked then buildOpts := buildOpts + ' -eqn';
- if chkGrn.Checked then buildOpts := buildOpts + ' -grn';
- if chkPic.Checked then buildOpts := buildOpts + ' -pic';
- if chkRefer.Checked then buildOpts := buildOpts + ' -refer';
- if chkTbl.Checked then buildOpts := buildOpts + ' -tbl';
+ if chkBoxPreprocessors.Checked[0] then buildOpts := buildOpts + ' -chem';
+ if chkBoxPreprocessors.Checked[1] then buildOpts := buildOpts + ' -eqn';
+ if chkBoxPreprocessors.Checked[2] then buildOpts := buildOpts + ' -grn';
+ if chkBoxPreprocessors.Checked[3] then buildOpts := buildOpts + ' -pic';
+ if chkBoxPreprocessors.Checked[4] then buildOpts := buildOpts + ' -refer';
+ if chkBoxPreprocessors.Checked[5] then buildOpts := buildOpts + ' -tbl';
+
+ if chkBoxExtras.Checked[0] then buildOpts := buildOpts + ' -mhdtbl';
// - PDF-specifics:
if rdPdf.Checked then begin
buildOpts := buildOpts + ' -Tpdf';
- if chkPdfMark.Checked then buildOpts := buildOpts + ' -mpdfmark';
+ if chkBoxExtras.Checked[1] then buildOpts := buildOpts + ' -mpdfmark';
outputFileName := currentGroffFilePath + '.pdf';
end
else outputFileName := currentGroffFilePath + '.ps';
// - Input file:
@@ -437,17 +427,18 @@
procedure TMainForm.btnSaveSettingsClick(Sender: TObject);
begin
// Store the build settings:
iniStorage.WriteString('BuildChosenMacro', cmbMacro.Text);
iniStorage.WriteBoolean('BuildLogFile', chkLogFile.Checked);
- iniStorage.WriteBoolean('BuildUseChem', chkChem.Checked);
- iniStorage.WriteBoolean('BuildUseEqn', chkEqn.Checked);
- iniStorage.WriteBoolean('BuildUseGrn', chkGrn.Checked);
- iniStorage.WriteBoolean('BuildUsePic', chkPic.Checked);
- iniStorage.WriteBoolean('BuildUseRefer', chkRefer.Checked);
- iniStorage.WriteBoolean('BuildUseTbl', chkTbl.Checked);
- iniStorage.WriteBoolean('BuildUsePdfMark', chkPdfMark.Checked);
+ iniStorage.WriteBoolean('BuildUseChem', chkBoxPreprocessors.Checked[0]);
+ iniStorage.WriteBoolean('BuildUseEqn', chkBoxPreprocessors.Checked[1]);
+ iniStorage.WriteBoolean('BuildUseGrn', chkBoxPreprocessors.Checked[2]);
+ iniStorage.WriteBoolean('BuildUsePic', chkBoxPreprocessors.Checked[3]);
+ iniStorage.WriteBoolean('BuildUseRefer', chkBoxPreprocessors.Checked[4]);
+ iniStorage.WriteBoolean('BuildUseTbl', chkBoxPreprocessors.Checked[5]);
+ iniStorage.WriteBoolean('BuildUseHdtbl', chkBoxExtras.Checked[0]);
+ iniStorage.WriteBoolean('BuildUsePdfMark', chkBoxExtras.Checked[1]);
iniStorage.WriteBoolean('BuildToPostscript', rdPs.Checked);
iniStorage.WriteBoolean('BuildToPDF', rdPDF.Checked);
// Store the IDE settings:
iniStorage.WriteBoolean('AutoSaveBuildSettings', chkAutoSaveBuildSettings.Checked);