Index: CHANGES.txt
==================================================================
--- CHANGES.txt
+++ CHANGES.txt
@@ -1,5 +1,12 @@
+Version [next]
+
+[Feature] Support for hdtbl.
+[Changed] Build extras and build preprocessors are now listed in a multi-select box.
+
+-------------------------------
+
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: src/groffstudio.lpi
==================================================================
--- src/groffstudio.lpi
+++ src/groffstudio.lpi
@@ -20,11 +20,11 @@
-
+
Index: src/unit1.lfm
==================================================================
--- src/unit1.lfm
+++ src/unit1.lfm
@@ -1,22 +1,22 @@
object MainForm: TMainForm
- Left = 2381
+ Left = 2515
Height = 692
Top = 99
- Width = 981
+ Width = 847
Caption = 'groffstudio'
ClientHeight = 692
- ClientWidth = 981
+ ClientWidth = 847
DefaultMonitor = dmPrimary
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,120 +81,54 @@
)
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
@@ -202,25 +136,55 @@
Color = clLime
Enabled = False
Font.Style = [fsBold, fsItalic]
OnClick = btnBuildClick
ParentFont = False
- TabOrder = 10
+ TabOrder = 3
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 = 24
+ 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 = 24
+ 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'
@@ -228,11 +192,11 @@
OnClick = btnSaveGroffClick
ParentFont = False
TabOrder = 1
end
object btnLoadGroff: TButton
- Left = 787
+ Left = 653
Height = 28
Top = 528
Width = 75
Anchors = [akRight, akBottom]
Caption = 'load'
@@ -240,11 +204,11 @@
OnClick = btnLoadGroffClick
ParentFont = False
TabOrder = 2
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,11 +219,11 @@
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.Pitch = fpFixed
@@ -757,21 +721,21 @@
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'
@@ -796,23 +760,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,19 +786,19 @@
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'
@@ -842,13 +806,13 @@
TabOrder = 1
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 +827,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 +850,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 +868,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 +922,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
@@ -188,17 +181,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 +292,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;
@@ -346,21 +330,23 @@
// - 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 +423,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);