with Ada.Text_IO, Ada.Strings.Fixed, Ada.Strings.Unbounded, Ada.Characters.Handling, Ada.Command_Line; with ARM_Master, ARM_Contents, ARM_Format; procedure ARM_Formatter is -- -- Ada reference manual formatter (ARM_Form). -- -- This is the main subprogram: format the sources for the -- Ada reference manual and other documents -- (in a vaguely Scribe-like macro language) into the actual -- reference manual files (in various formats). -- -- --------------------------------------- -- Copyright 2000, 2002, 2004, 2005, 2006, 2011, 2012 -- AXE Consultants. All rights reserved. -- P.O. Box 1512, Madison WI 53701 -- E-Mail: randy@rrsoftware.com -- -- ARM_Form is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License version 3 -- as published by the Free Software Foundation. -- -- AXE CONSULTANTS MAKES THIS TOOL AND SOURCE CODE AVAILABLE ON AN "AS IS" -- BASIS AND MAKES NO WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, -- CAPABILITY, EFFICIENCY, MERCHANTABILITY, OR FUNCTIONING OF THIS TOOL. -- IN NO EVENT WILL AXE CONSULTANTS BE LIABLE FOR ANY GENERAL, -- CONSEQUENTIAL, INDIRECT, INCIDENTAL, EXEMPLARY, OR SPECIAL DAMAGES, -- EVEN IF AXE CONSULTANTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -- DAMAGES. -- -- A copy of the GNU General Public License is available in the file -- gpl-3-0.txt in the standard distribution of the ARM_Form tool. -- Otherwise, see . -- -- If the GPLv3 license is not satisfactory for your needs, a commercial -- use license is available for this tool. Contact Randy at AXE Consultants -- for more information. -- -- --------------------------------------- -- -- Edit History: -- -- 3/ 9/00 - RLB - Created base program. -- 4/14/00 - RLB - Created from analysis program. -- 4/18/00 - RLB - Added scanning pass. -- 4/19/00 - RLB - Split 03 into two files. Added HTML output object. -- 4/24/00 - RLB - Added Change_Kind and Display_Index_Entries. -- 5/15/00 - RLB - Split formatter from input. -- 5/16/00 - RLB - Added missing Destroy for formatting objects. -- 5/18/00 - RLB - Added RTF output object. -- 5/25/00 - RLB - Added the Big-Files option. Added the library separator. -- 5/28/00 - RLB - Added index. -- 8/31/00 - RLB - Added the New-Changes option. -- 7/18/02 - RLB - Changed copyright date. -- - RLB - Changed Creates to include title and header. -- - RLB - Added Version parameter to command line and formatting -- commands. -- 9/10/04 - RLB - Updated descriptions of standard commands. -- 9/14/04 - RLB - Moved version to ARM_Contents. -- 12/05/04 - RLB - Split/added various source files. -- 6/ 2/05 - RLB - Added Corrigendum output module for comparisons to -- Amendment document. -- 10/12/05 - RLB - Changed the title to reflect what we learned from ISO. -- 10/28/05 - RLB - Added Annex Q. -- 1/ 5/06 - RLB - Revised to use master files, rather than hard-coded -- properties. -- 1/12/06 - RLB - Removed Document completely. -- 10/18/11 - RLB - Changed to GPLv3 license. -- 10/19/11 - RLB - Removed junk withs (now in master file handler). -- 4/ 3/12 - RLB - Removed dead variable. -- Standard commands for Ada standards: -- For Original (Ada 95) RM: -- Arm_Form RM No-Changes 0 -- For Original AARM: -- Arm_Form AARM No-Changes 0 -- For RM with Corr: -- [With change bars for Word 97/2000:] -- Arm_Form RM RTF New-Changes 1 -- [Final versions with no changes:] -- Arm_Form RM New-Only 1 -- For AARM with Corr: -- [HTML; RTF for display]: -- Arm_Form RM Show-Changes 1 -- [TXT; RTF for printing]: -- Arm_Form RM New-Only 1 -- For RM with Corr and Amd: -- [With change bars for Word 97/2000:] -- Arm_Form RM RTF New-Changes 2 -- [With change ballons for Word XP/2003:] -- Arm_Form RM RTF Show-Changes 2 -- [Final versions with no changes:] -- Arm_Form RM New-Only 2 -- For AARM with Corr and Amd: -- [HTML; RTF for display]: -- Arm_Form RM Changes-Only 2 -- (for only Amd changes) or -- Arm_Form RM Show-Changes 2 -- (for all changes) -- [TXT; RTF for printing]: -- Arm_Form RM New-Only 2 No_Command_Error : exception; Format : ARM_Master.Output_Format_Type; -- Format to generate. Master_File : Ada.Strings.Unbounded.Unbounded_String; -- Master file for document to generate. Change_Kind : ARM_Format.Change_Kind; -- Changes to generate. Change_Version : ARM_Contents.Change_Version_Type; -- Change version. procedure Get_Commands is -- Process the command line for this program. begin if Ada.Command_Line.Argument_Count not in 1 .. 4 then Ada.Text_IO.Put_Line ("** Wrong number of arguments"); raise No_Command_Error; end if; if Ada.Command_Line.Argument_Count >= 4 then declare Version_Arg : String := Ada.Characters.Handling.To_Lower ( Ada.Strings.Fixed.Trim (Ada.Command_Line.Argument(4), Ada.Strings.Right)); begin if Version_Arg'Length = 1 and then Version_Arg(Version_Arg'First) in ARM_Contents.Change_Version_Type then Change_Version := Version_Arg(Version_Arg'First); else Ada.Text_IO.Put_Line ("** Unrecognized change version: " & Version_Arg); raise No_Command_Error; end if; end; else Change_Version := '0'; end if; if Ada.Command_Line.Argument_Count >= 3 then declare Changes_Arg : String := Ada.Characters.Handling.To_Lower ( Ada.Strings.Fixed.Trim (Ada.Command_Line.Argument(3), Ada.Strings.Right)); begin if Changes_Arg = "no-changes" then Change_Kind := ARM_Format.Old_Only; elsif Changes_Arg = "new-only" then Change_Kind := ARM_Format.New_Only; elsif Changes_Arg = "changes-only" then Change_Kind := ARM_Format.Changes_Only; elsif Changes_Arg = "show-changes" then Change_Kind := ARM_Format.Show_Changes; elsif Changes_Arg = "new-changes" then Change_Kind := ARM_Format.New_Changes; else Ada.Text_IO.Put_Line ("** Unrecognized changes: " & Changes_Arg); raise No_Command_Error; end if; end; else Change_Kind := ARM_Format.New_Only; end if; if Ada.Command_Line.Argument_Count >= 2 then declare Format_Arg : String := Ada.Characters.Handling.To_Lower ( Ada.Strings.Fixed.Trim (Ada.Command_Line.Argument(2), Ada.Strings.Right)); begin if Format_Arg = "rtf" then Format := ARM_Master.RTF; elsif Format_Arg = "html" then Format := ARM_Master.HTML; elsif Format_Arg = "text" then Format := ARM_Master.Text; elsif Format_Arg = "corr" then Format := ARM_Master.Corr; elsif Format_Arg = "info" then Format := ARM_Master.Info; else Ada.Text_IO.Put_Line ("** Unrecognized format: " & Format_Arg); raise No_Command_Error; end if; end; else Format := ARM_Master.HTML; end if; declare use type Ada.Strings.Unbounded.Unbounded_String; begin Master_File := Ada.Strings.Unbounded.To_Unbounded_String( Ada.Strings.Fixed.Trim (Ada.Command_Line.Argument(1), Ada.Strings.Right)); if Ada.Strings.Unbounded.Index (Master_File, ".") = 0 then -- Add extension if it is missing. Master_File := Master_File & ".MSM"; end if; end; exception when No_Command_Error => Ada.Text_IO.Put_Line (" Usage: Arm_Form [[, [, ]]]}"); Ada.Text_IO.Put_Line (" where: is the file name (and optional path) for the master file"); Ada.Text_IO.Put_Line (" for the document;"); Ada.Text_IO.Put_Line (" where: = 'Text' (text files),"); Ada.Text_IO.Put_Line (" 'HTML' (HTML files),"); Ada.Text_IO.Put_Line (" 'RTF' (RTF files for Word 97 or later),"); Ada.Text_IO.Put_Line (" 'Corr' (Corrigendum-style command files for comparisons);"); Ada.Text_IO.Put_Line (" where: = 'No-Changes' (RM text),"); Ada.Text_IO.Put_Line (" 'New-Only' (Revised RM text only for ),"); Ada.Text_IO.Put_Line (" 'Changes-Only' (Text with changes marked for only),"); Ada.Text_IO.Put_Line (" 'Show-Changes' (Text with changes marked for and earlier),"); Ada.Text_IO.Put_Line (" 'New-Changes' (Text with insertions marked for and earlier);"); Ada.Text_IO.Put_Line (" where: = a value in 0 .. 9 representing the change version"); Ada.Text_IO.Put_Line (" 0-Original Ada 95 (equivalent to No-Changes)"); Ada.Text_IO.Put_Line (" 1-Technical Corrigendum 1"); Ada.Text_IO.Put_Line (" 2-Amendment 1"); raise No_Command_Error; end Get_Commands; begin Ada.Text_IO.Put_Line ("Ada Manual formatter"); Ada.Text_IO.Put_Line (" Copyright 2000, 2002, 2004, 2005, 2006, 2011, 2012 AXE Consultants"); Ada.Text_IO.Put_Line (" P.O. Box 1512, Madison WI 53701"); Get_Commands; Ada.Text_IO.Put_Line (" Master File = " & Ada.Strings.Unbounded.To_String(Master_File)); Ada.Text_IO.Put_Line (" Format = " & ARM_Master.Output_Format_Type'Image(Format)); Ada.Text_IO.Put_Line (" Changes = " & ARM_Format.Change_Kind'Image(Change_Kind)); Ada.Text_IO.Put_Line (" Version = " & Change_Version); ARM_Master.Read_and_Process_Master_File ( File_Name => Ada.Strings.Unbounded.To_String(Master_File), The_Change_Kind => Change_Kind, The_Change_Version => Change_Version, Output_Format => Format); Ada.Text_IO.Put_Line ("Ada document created"); exception when No_Command_Error => null; -- Error message displayed by command line processor. end ARM_Formatter;