AdaDoc. How to write a module for AdaDoc. August 28, 2002



Similar documents
TATJA: A Test Automation Tool for Java Applets

Eventia Log Parsing Editor 1.0 Administration Guide

CS506 Web Design and Development Solved Online Quiz No. 01

Building a Multi-Threaded Web Server

Software documentation systems

Listeners. Formats. Free Form. Formatted

Continuous Integration Part 2

Web development... the server side (of the force)

TCP/IP Networking, Part 2: Web-Based Control

Java Application Developer Certificate Program Competencies

Web Development using PHP (WD_PHP) Duration 1.5 months

Course Name: ADVANCE COURSE IN SOFTWARE DEVELOPMENT (Specialization:.Net Technologies)

VIRTUAL LABORATORY: MULTI-STYLE CODE EDITOR

SPSS for Windows importing and exporting data

Open Source VoiceXML Interpreter over Asterisk for Use in IVR Applications

El Dorado Union High School District Educational Services

WIRIS quizzes web services Getting started with PHP and Java

Programming Project 1: Lexical Analyzer (Scanner)

AQA GCSE in Computer Science Computer Science Microsoft IT Academy Mapping

Perl in a nutshell. First CGI Script and Perl. Creating a Link to a Script. print Function. Parsing Data 4/27/2009. First CGI Script and Perl

Pre-authentication XXE vulnerability in the Services Drupal module

Introduction to Java Applications Pearson Education, Inc. All rights reserved.

Fundamentals of Java Programming

Web-enabling Ada Applications with AWS

Thursday, February 7, DOM via PHP

CHAPTER 6 EXTRACTION OF METHOD SIGNATURES FROM UML CLASS DIAGRAM

Review your answers, feedback, and question scores below. An asterisk (*) indicates a correct answer.

Introduction to: Computers & Programming: Input and Output (IO)

Chulalongkorn University International School of Engineering Department of Computer Engineering Computer Programming Lab.

Visual Basic. murach's TRAINING & REFERENCE

Using Dedicated Servers from the game

MONETA.Assistant API Reference

Using the VMRC Plug-In: Startup, Invoking Methods, and Shutdown on page 4

Facebook Twitter YouTube Google Plus Website

Optimizing and interfacing with Cython. Konrad HINSEN Centre de Biophysique Moléculaire (Orléans) and Synchrotron Soleil (St Aubin)

LabVIEW Internet Toolkit User Guide

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

Understand for FORTRAN

CHAPTER 9: DATAPORT AND XMLPORT CHANGES

ACS 5.x and later: Integration with Microsoft Active Directory Configuration Example

Smooks Dev Tools Reference Guide. Version: GA

Programming and Software Development CTAG Alignments

How To Write A Program In Java (Programming) On A Microsoft Macbook Or Ipad (For Pc) Or Ipa (For Mac) (For Microsoft) (Programmer) (Or Mac) Or Macbook (For

Java (12 Weeks) Introduction to Java Programming Language

Published. Technical Bulletin: Use and Configuration of Quanterix Database Backup Scripts 1. PURPOSE 2. REFERENCES 3.

Reduces development time by 90%

ICT. PHP coding. Universityy. in any

We will learn the Python programming language. Why? Because it is easy to learn and many people write programs in Python so we can share.

Website Report: To-Do Tasks: 22 SEO SCORE: 73 / 100. Add the exact keywords to this URL.

DTD Tutorial. About the tutorial. Tutorial

Log Analyzer Reference

Microsoft Windows PowerShell v2 For Administrators

Introduction to Python

Developing Web Views for VMware vcenter Orchestrator

Professional. SlickEdif. John Hurst IC..T...L. i 1 8 О 7» \ WILEY \ Wiley Publishing, Inc.

JavaScript. JavaScript: fundamentals, concepts, object model. Document Object Model. The Web Page. The window object (1/2) The document object

Concrete uses of XML in software development and data analysis.

EMC Documentum Composer

Schema Classes. Polyhedra Ltd

How to utilize Administration and Monitoring Console (AMC) in your TDI solution

RTI Routing Service. Release Notes

PHP Tutorial From beginner to master

How to translate VisualPlace

Javadoc like technical documentation for CAPRI

CLC Server Command Line Tools USER MANUAL

Hands-On: Introduction to Object-Oriented Programming in LabVIEW

Programming Assignment II Due Date: See online CISC 672 schedule Individual Assignment

The C Programming Language course syllabus associate level

Java - gently. Originaux. Prérequis. Objectifs

ISIS Application Program Interface ISIS_DLL User s Manual. Preliminary Version

Saruman Documentation

High-Level Programming Languages. Nell Dale & John Lewis (adaptation by Michael Goldwasser)

Oracle Database 10g: Program with PL/SQL

HP Service Manager. Software Version: 9.40 For the supported Windows and Linux operating systems. Application Setup help topics for printing

Web Services for Management Perl Library VMware ESX Server 3.5, VMware ESX Server 3i version 3.5, and VMware VirtualCenter 2.5

Structured Data and Visualization. Structured Data. Programming Language Support. Programming Language Support. Programming Language Support

PL/SQL Overview. Basic Structure and Syntax of PL/SQL

CSE 308. Coding Conventions. Reference

Langages Orientés Objet Java

Compiler I: Syntax Analysis Human Thought

INFORMATION BROCHURE Certificate Course in Web Design Using PHP/MySQL

1. To start Installation: To install the reporting tool, copy the entire contents of the zip file to a directory of your choice. Run the exe.

EXCEL IMPORT user guide

Novell Identity Manager

POB-JAVA Documentation

Chapter 4 Accessing Data

The end. Carl Nettelblad

How to monitor AD security with MOM

10CS73:Web Programming

PHP Debugging. Draft: March 19, Christopher Vickery

Lecture 5: Java Fundamentals III

User Manual. User Manual: NXPowerLite File Server Edition. File Server Edition, Version 3.7 Copyright Neuxpower Solutions Ltd

Course Number: IAC-SOFT-WDAD Web Design and Application Development

Managed App Configuration for App Developers. February 22, 2016

Licence Informatique Année Exceptions

LATITUDE Patient Management System

Windows PowerShell. 3.0 Step by Step. Ed Wilson

This module explains fundamental aspects of Microsoft Dynamics NAV Development Environment.

Transcription:

AdaDoc How to write a module for AdaDoc. August 28, 2002 Contents 1 Introduction 2 1.1 What is an AdaDoc module? 2 1.2 Required knowledge.. 2 1.3 Required software 2 1.4 Modules implementation 3 2 Writing a module 3 2.1 Writing the module specification. 4 2.2 Redefine the callbacks. 4 2.3 Writing the module body 4 2.4 Writing of the Begin_Document and the End_Document procedures. 5 2.5 Callbacks body.. 6 2.5.1 Start_Group and End_Element callbacks. 6 2.5.2 Standard callbacks.. 6 2.6 Options and the attributes dictionary.. 7 2.7 Adding the module in the main program 7 2.7.1 Adding the context clause. 7 2.7.2 Options type.. 8 2.7.3 Options array.. 8 2.7.4 The processing. 8 2.8 Compilation. 9 3 Feedback 9 4 Code source of the example module 10 4.1 module-xy.ads.. 10 4.2 module-xy.adb.. 11 4.3 Result file of the example module (Module.Xy.txt). 12 1

1 INTRODUCTION 1 Introduction This manual describes the structure of an AdaDoc module, the given features and the instructions to write your own module. 1.1 What is an AdaDoc module? AdaDoc modules are the last step to create the output file. The modules content the rules and the way to write HTML, L A T E X, plan text or any other format. A module could write a specification (header) for others programming language, send the specifications directly in a database as well. The system of module had been created in such way that any user of AdaDoc could write his own modules easily. 1.2 Required knowledge Any particular knowledge is required. You just have to know the basic of the Ada95 language to write a module. AdaDoc use the OOP paradigm, but you don t need to know the Ada95 OOP to write a module. The most important knowledge you must have, are required by the output format. 1.3 Required software You need to recompile AdaDoc, if you want to add a module to it. For that you need the following software XML/Ada 1 version 0.7.1. GNAT 2 (XML/Ada depend on GNAT). AdaDoc sources 3 and the XSD diagram. 1 XML/Ada a full XML suite: http://libre.act-europe.fr/xmlada/ 2 GNAT Ada95 compiler: http://www.gnat.com 3 AdaDoc: http://adadoc.sf.net http://adadoc.sf.net 2 Julien Burdy & Vincent Decorges

2 WRITING A MODULE 1.4 Modules implementation 1.4 Modules implementation Go to the next section, if you don t want to know the implementation s details. The last state of AdaDoc (after the XML file creation) is to parse the XML file to write the final output file. The XML parser (api SAX of XML/Ada) sends callbacks every time it reads a XML element. This callback are caught and processed by the AdaDoc interface and finally send to the modules. If a child module had redefined a callback, it would be treated otherwise it would do nothing. This allows to not redefined all the callbacks. An AdaDoc module is just an inheritance of the Module (Modules.ads) class. UML reprenstation of module classes. 2 Writing a module This section describes step by step how to write a module. We are going to write an example module called xy. This module writes information of an Ada95 specification in a text file. The XSD diagram shows the arborescence of the XML elements. Take look at it to understand the different callbacks. We are frequently using a dictionary abstract data type in AdaDoc. Its specification (dict_tda.ads) is in the tools directory of the AdaDoc sources. http://adadoc.sf.net 3 Julien Burdy & Vincent Decorges

2.1 Writing the module specification 2 WRITING A MODULE 2.1 Writing the module specification Create a module-xy.ads file in directory module. Edit the file and add the lines: package Module. Xy i s type Object is new Module. Object with n ull record ; procedure Begin_Document ( S e l f : Object ; Package_Name : S t r i n g ; A t t s, Tags : Dict_Type ) ; procedure End_Document ( S e l f : Object ) ; end Module. Xy ; It is the specification of the smallest module you could write. You should redefine the Begin_Document and the End_Document procedures because they are abstract. 2.2 Redefine the callbacks You have to choose which callback you want to redefine. All the callbacks are in the module.ads file. For your module we are going to write only the procedures and their parameters. We need to redefine the following callbacks: Start_Group To know when we have begun a group of procedures or a group of parameters. A_Procedure A procedure. A_Parameter A parameter. The module-xy.ads file look like that now: package Module. Xy i s type Object is new Module. Object with n ull record ; procedure Begin_Document ( S e l f : Object ; Package_Name : S t r i n g ; A t t s, Tags : Dict_Type ) ; procedure End_Document ( S e l f : Object ) ; procedure Start_Group ( S e l f : Object ; Group : Element_Type ) ; procedure A_Parameter ( S e l f : Object ; A t t s : Dict_Type ; Its_Name, Its_Type, Its_Mode : S t r i n g ) ; procedure A_Procedure ( S e l f : Object ; A t t s : Dict_Type ; Its_Name : S t r i n g ; In_Prot_Obj : Boolean ) ; end Module. Xy ; 2.3 Writing the module body We need to write the body of the package. We are using the gnatstub tools for that 4. After we have run gnatstub module-xy.ads on the command line, the file module-xy.adb had been created in the same directory that the specification. 4 gnatstub is a gnat tools to write a package body from a specification. http://adadoc.sf.net 4 Julien Burdy & Vincent Decorges

2 WRITING A MODULE 2.4 Writing of the Begin_Document and the End_Document procedures 2.4 Writing of the Begin_Document and the End_Document procedures These two procedures are going to open and close the output text file. As a module is an abstract machine, we can declare the file directly in the body of the package. with Ada. Text_IO ; use Ada. Text_IO ; package body Module. Xy i s F i c h i e r : File_Type ; D e c l a r a t i o n de notre f i c h i e r procedure Begin_Document ( S e l f : Object ; Package_Name : S t r i n g ; A t t s, Tags : Dict_Type ) is Create ( F i c h i e r, Name = > Package_Name & ". t x t " ) ; Put_Line ( F i c h i e r, " Paquetage : " & Package_Name ) ; end Begin_Document ; procedure End_Document ( s e l f : Object ) is New_Line ( F i c h i e r ) ; Put_Line ( F i c h i e r, " Fin. " ) ; Close ( F i c h i e r ) ; end End_Document ; end Module. Xy ; http://adadoc.sf.net 5 Julien Burdy & Vincent Decorges

2.5 Callbacks body 2 WRITING A MODULE 2.5 Callbacks body 2.5.1 Start_Group and End_Element callbacks We are going to write the Start_Group callback, which announce the ning of any XML element. You can see the elements list in the XSD diagram or in the Element_Type type of module.ads. We need the Is_Subprograms callback to know when a subprogram s and the Is_Parameters to know when the parameters. package body Module. Xy i s procedure Start_Group ( S e l f : Object ; Group : Element_Type ) is case Group i s when Is_Subprograms => Put_Line ( F i c h i e r, " V o i c i l a l i s t e des sous programmes " ) ; Put_Line ( F i c h i e r, " " ) ; when Is_ Parameters => Put_Line ( F i c h i e r, " L i s t e des parametres : " ) ; when others => null ; end case ; end Start_Group ; end Module. Xy ; NB: The End_Element callback works the same way, but it is called at the end of a group or an element. We need this call back to close a table (for example </TABLE> in HTML). 2.5.2 Standard callbacks We are going to write the body of the A_Procedure and the A_Parameter callbacks and using their parameters. procedure A_Procedure ( S e l f : Object ; A t t s : Dict_Type ; Its_Name : S t r i n g ; In_Prot_Obj : Boolean ) is New_Line ( F i c h i e r ) ; Put_Line ( F i c h i e r, Its_Name & " une procedure " ) ; end A_Procedure ; procedure A_Parameter ( S e l f : Object ; A t t s : Dict_Type ; Its_Name, Its_Type, Its_Mode : S t r i n g ) is Put_Line ( F i c h i e r, Its_Name & " est de type " & Its_Type & " e t de mode de passage " & Its_Mode ) ; end A_Parameter ; http://adadoc.sf.net 6 Julien Burdy & Vincent Decorges

2 WRITING A MODULE 2.6 Options and the attributes dictionary 2.6 Options and the attributes dictionary In this state our module is already usable. But to finish it, we need to talk about the options and the attributes dictionary. AdaDoc user can give options to module. To catch them, each module has a Option_Exist function that takes the options string parameters and return if the user as given this option or not. Nearly all the callbacks have an attributes dictionary as parameters. It contains all the optional value of a callback (for example a comment). To know the existence or the absence of an attribute in the dictionary we should use the Exist function. The Value_Of function returns the value of an attribute. We are going to modify the A_Procedure procedure to make an example. If the user as given the c option to AdaDoc and a comment exist for the procedure then we are going to print this comment. procedure A_Procedure ( S e l f : Object ; A t t s : Dict_Type ; Its_Name : S t r i n g ; In_Prot_Obj : Boolean ) is New_Line ( F i c h i e r ) ; i f Option_Exist ( S e l f, " c " ) and E x i s t ( A t t s, " comment " ) then Put_Line ( F i c h i e r, " Commentaire : " & Value_Of ( A t t s, " comment " ) ) ; end i f ; Put_Line ( F i c h i e r, Its_Name & " une procedure " ) ; end A_Procedure ; NB : A comment is a string of character with a symbol to mark a new line in the attributes dictionary. You certainly need to replace this symbol (for example in HTML by a < BR >). 2.7 Adding the module in the main program We need to make four modifications to the main program to add correctly our xy module into AdaDoc. The execution of our module depends on an option in the main program. 2.7.1 Adding the context clause We are ning by adding the context clause of our module. with Module. Xy ; Notre module procedure AdaDoc i s http://adadoc.sf.net 7 Julien Burdy & Vincent Decorges

2.7 Adding the module in the main program 2 WRITING A MODULE 2.7.2 Options type We need to add an option in the enumerate type Option_Name. We call our module Example type Option_Name i s ( Delete_Xml, Extract_Comment, No_HTML, HTML, LaTeX, Exemple, our module Show_Help ) ; 2.7.3 Options array Now we add our module in the options array. This array contains: The name of the option (of type Option_Name). A boolean variable, to know if an action is active by default. The main switch of the option. If both characters (here "E") are entering by the user when executing adadoc, the option is active. All the following characters are sent as option of the module (in our module "-Ec" will active the print of the comments) Options is normally empty but you can use it to force an option. Option tab with s t a t, switch, comment, d e f a u l t options Option_Tab : Option_Tab_Type : = ( Delete_Xml = > ( False, Switch => S( " x " ), Options = > S( " " ) ), Debut de l a j o u t de notre module Exemple => ( False, Switch => S( " E{ a z } " ), Comment = > S( " I c i notre d e s c r i p t i o n. " ), Options = > S( " " ) ), Fin de l a j o u t de notre module Show_Help => ( False, Switch => S( " h " ), Options = > S( " " ) ) ) ; NB : Switches are case sensitive. 2.7.4 The processing Finally we add in Module section of adadoc.adb the instructions to run our module. http://adadoc.sf.net 8 Julien Burdy & Vincent Decorges

3 FEEDBACK 2.8 Compilation Modules : declare Use_ Default : Boolean : = True ; i f Option_Tab ( Exemple ). Stat then s i l é t a t est a c t i v e Parse_XML ( XML_File_Name. A l l, new Module. Xy. Object, Instance de notre module Dict_Tags, Option_Tab ( Exemple ). Options. A l l ) ; Ses options Use_ Default : = False ; end i f ; end Modules ; 2.8 Compilation Now you have to compile AdaDoc. Use the make batch file for Windows system and the makelinux script for Linux system. 3 Feedback You can send us your module at erreur@users.sourceforge.net and we will add then to the AdaDoc distribution. http://adadoc.sf.net 9 Julien Burdy & Vincent Decorges

4 CODE SOURCE OF THE EXAMPLE MODULE 4 Code source of the example module 4.1 module-xy.ads 1 2 @filename Module. Xy. ads 3 @author J u l i e n Burdy & Vincent Decorges 4 @date 7. 7. 0 2 5 @ brief Module exemple du document " Comment e c r i r e un module. " 6 7 H i s t o r y : 8 Date M o d i f i c a t i o n Author 9 10 package Module. Xy i s 11 12 L o b j e t derive. 13 type Object is new Module. Object with n ull record ; 14 15 Annonce du debut du document. 16 Cet evenement est appele une seule f o i s. 17 procedure Begin_Document ( S e l f : Object ; Package_Name : S t r i n g ; 18 A t t s, Tags : Dict_Type ) ; 19 20 Annonce du l a f i n du document. 21 Cet evenement est appele une seule f o i s. 22 procedure End_Document ( s e l f : Object ) ; 23 24 Annonce des édbut de groupes ( ou d Element_Type en general ). 25 procedure Start_Group ( S e l f : Object ; Group : Element_Type ) ; 26 27 Annonce d une procedure. 28 procedure A_Parameter ( S e l f : Object ; A t t s : Dict_Type ; Its_Name, 29 Its_Type, Its_Mode : S t r i n g ) ; 30 31 Annonce d un parametre. 32 procedure A_Procedure ( S e l f : Object ; A t t s : Dict_Type ; 33 Its_Name : S t r i n g ; In_Prot_Obj : Boolean ) ; 34 35 end Module. Xy ; http://adadoc.sf.net 10 Julien Burdy & Vincent Decorges

4 CODE SOURCE OF THE EXAMPLE MODULE 4.2 module-xy.adb 4.2 module-xy.adb 1 with Ada. Text_IO ; use Ada. Text_IO ; 2 package body Module. Xy i s 3 4 F i c h i e r : File_Type ; D e c l a r a t i o n de notre f i c h i e r 5 6 procedure Begin_Document ( S e l f : Object ; Package_Name : S t r i n g ; 7 A t t s, Tags : Dict_Type ) is 8 9 Create ( F i c h i e r, Name = > Package_Name & ". t x t " ) ; 10 Put_Line ( F i c h i e r, " Paquetage : " & Package_Name ) ; 11 end Begin_Document ; 12 13 procedure End_Document ( s e l f : Object ) is 14 15 New_Line ( F i c h i e r ) ; 16 Put_Line ( F i c h i e r, " Fin. " ) ; 17 Close ( F i c h i e r ) ; 18 end End_Document ; 19 20 21 procedure A_Procedure ( S e l f : Object ; A t t s : Dict_Type ; 22 Its_Name : S t r i n g ; In_Prot_Obj : Boolean ) is 23 24 New_Line ( F i c h i e r ) ; 25 i f Option_Exist ( S e l f, " c " ) and 26 E x i s t ( A t t s, " comment " ) then 27 Put_Line ( F i c h i e r, " Commentaire : " & 28 Value_Of ( A t t s, " comment " ) ) ; 29 end i f ; 30 Put_Line ( F i c h i e r, Its_Name & " une procedure " ) ; 31 end A_Procedure ; 32 33 34 procedure A_Parameter ( S e l f : Object ; A t t s : Dict_Type ; Its_Name, 35 Its_Type, Its_Mode : S t r i n g ) is 36 37 Put_Line ( F i c h i e r, Its_Name & " est de type " & Its_Type & 38 " e t de mode de passage " & Its_Mode ) ; 39 end A_Parameter ; 40 41 procedure Start_Group ( S e l f : Object ; Group : Element_Type ) is 42 43 case Group i s 44 when Is_Subprograms => 45 Put_Line ( F i c h i e r, " V o i c i l a l i s t e des sous programmes " ) ; 46 Put_Line ( F i c h i e r, " " ) ; 47 when Is_ Parameters => 48 Put_Line ( F i c h i e r, " L i s t e des parametres : " ) ; 49 when others => 50 null ; 51 end case ; 52 end Start_Group ; 53 54 end Module. Xy ; http://adadoc.sf.net 11 Julien Burdy & Vincent Decorges

4.3 Result file of the example module (Module.Xy.txt) 4 CODE SOURCE OF THE EXAMPLE MODULE 4.3 Result file of the example module (Module.Xy.txt) Paquetage : Module.Xy Voici la liste des sous programmes ---------------------------------- Commentaire : Annonce du debut du document. Cet evenement est appele une seule fois. Begin_Document une procedure... Liste des parametres : Tags est de type Dict_Type et de mode de passage in Atts est de type Dict_Type et de mode de passage in Package_Name est de type String et de mode de passage in Self est de type Object et de mode de passage in Commentaire : Annonce du la fin du document. Cet evenement est appele une seule fois. End_Document une procedure... Liste des parametres : self est de type Object et de mode de passage in Commentaire : Annonce des début de groupes (ou d'element_type en general). Start_Group une procedure... Liste des parametres : Group est de type Element_Type et de mode de passage in Self est de type Object et de mode de passage in Commentaire : Annonce d'une procedure. A_Parameter une procedure... Liste des parametres : Its_Mode est de type String et de mode de passage in Its_Type est de type String et de mode de passage in Its_Name est de type String et de mode de passage in Atts est de type Dict_Type et de mode de passage in Self est de type Object et de mode de passage in Commentaire : Annonce d'un parametre. A_Procedure une procedure... Liste des parametres : In_Prot_Obj est de type Boolean et de mode de passage in Its_Name est de type String et de mode de passage in Atts est de type Dict_Type et de mode de passage in Self est de type Object et de mode de passage in Fin. http://adadoc.sf.net 12 Julien Burdy & Vincent Decorges