The TELEMAC-MASCARET system  trunk
utils_latex.f
Go to the documentation of this file.
1  ! brief Contains function to write a list of keywords into a LaTeX
2  !+ file (For the reference manual)
3  MODULE utils_latex
5  IMPLICIT NONE
6  CONTAINS
7  ! brief Write in Latex format a Rubrique
8  !
9  ! param nfic File descriptor
10  ! param lng Language (1: French 2:English)
11  !
12  SUBROUTINE write_rubrique2latex(NFIC,LNG,ORDERED_KEY1)
13  !
14  IMPLICIT NONE
15  !
16  INTEGER, INTENT(IN) :: LNG
17  INTEGER, INTENT(IN) :: NFIC
18  !
19  INTEGER :: I1,I2,I3,J,IRUB,IKEY,IERR
20  INTEGER :: IRUB1
21  INTEGER :: IRUB2
22  INTEGER :: IRUB3
23  CHARACTER(LEN=PATH_LEN), ALLOCATABLE :: TO_SORT1(:)
24  INTEGER :: ORDERED_KEY1(*)
25  INTEGER, ALLOCATABLE :: ORDERED_RUB1(:)
26  INTEGER, ALLOCATABLE :: ORDERED_RUB2(:)
27  INTEGER, ALLOCATABLE :: ORDERED_RUB3(:)
28  ALLOCATE(ordered_rub1(nrub(lng,1)),stat=ierr)
29  CALL check_allocate(ierr,'ORDERED_RUB')
30  ALLOCATE(ordered_rub2(nrub(lng,2)),stat=ierr)
31  CALL check_allocate(ierr,'ORDERED_RUB')
32  ALLOCATE(ordered_rub3(nrub(lng,3)),stat=ierr)
33  CALL check_allocate(ierr,'ORDERED_RUB')
34  ! LEVEL 1
35  ALLOCATE(to_sort1(nrub(lng,1)),stat=ierr)
36  CALL check_allocate(ierr,'TO_SORT1')
37  DO irub=1,nrub(lng,1)
38  to_sort1(irub) = repeat(' ',path_len)
39  to_sort1(irub) = rubrique(lng,irub,1)
40  ENDDO
41  CALL shell_string(nrub(lng,1),to_sort1,ordered_rub1)
42  DEALLOCATE(to_sort1)
43  ! Loop on rubriques
44  DO i1=1,nrub(lng,1)
45  irub1 = ordered_rub1(i1)
46  WRITE(nfic,'(A,A)') '%',repeat('-',80)
47  WRITE(nfic,'(3A)') "\section{",trim(rubrique(lng,irub1,1)),"}"
48  WRITE(nfic,'(A,A)') '%',repeat('-',80)
49  WRITE(nfic,'(A)') ' '
50  DO j=1,nkey
51  ! Identifying keywwords that are level 1
52  ikey = ordered_key1(j)
53  IF(has_rubrique(ikey,irub1,1,lng).AND.
54  & (mydico(ikey)%RUBRIQUE(lng,2)(1:1).EQ.' ')) THEN
55  WRITE(nfic,'(3a)') "\telkey{",
56  & trim(mydico(ikey)%KNOM(lng)),"}\\"
57  ENDIF
58  ENDDO
59  ! LEVEL 2
60  ALLOCATE(to_sort1(nrub(lng,2)),stat=ierr)
61  CALL check_allocate(ierr,'TO_SORT1')
62  DO irub=1,nrub(lng,2)
63  to_sort1(irub) = repeat(' ',path_len)
64  to_sort1(irub) = rubrique(lng,irub,2)
65  ENDDO
66  CALL shell_string(nrub(lng,2),to_sort1,ordered_rub2)
67  DEALLOCATE(to_sort1)
68  ! Loop on rubriques
69  DO i2=1,nrub(lng,2)
70  irub2 = ordered_rub2(i2)
71  IF(rub1_dep(irub1,irub2)) THEN
72  WRITE(nfic,'(A,A)') '%',repeat('-',80)
73  WRITE(nfic,'(3A)') "\subsection{",
74  & trim(rubrique(lng,irub2,2)),"}"
75  WRITE(nfic,'(A,A)') '%',repeat('-',80)
76  WRITE(nfic,'(A)') ' '
77  DO j=1,nkey
78  ! Identifying keywwords that are level 1
79  ikey = ordered_key1(j)
80  IF(has_rubrique(ikey,irub1,1,lng).AND.
81  & has_rubrique(ikey,irub2,2,lng).AND.
82  & (mydico(ikey)%RUBRIQUE(lng,3)(1:1).EQ.' ')) THEN
83  WRITE(nfic,'(3a)') "\telkey{",
84  & trim(mydico(ikey)%KNOM(lng)),"}\\"
85  ENDIF
86  ENDDO
87  ! LEVEL 3
88  ALLOCATE(to_sort1(nrub(lng,3)),stat=ierr)
89  CALL check_allocate(ierr,'TO_SORT1')
90  DO irub=1,nrub(lng,3)
91  to_sort1(irub) = repeat(' ',path_len)
92  to_sort1(irub) = rubrique(lng,irub,3)
93  ENDDO
94  CALL shell_string(nrub(lng,3),to_sort1,ordered_rub3)
95  DEALLOCATE(to_sort1)
96  ! Loop on rubriques
97  DO i3=1,nrub(lng,3)
98  irub3 = ordered_rub3(i3)
99  IF(rub2_dep(irub1,irub2,irub3)) THEN
100  WRITE(nfic,'(A,A)') '%',repeat('-',80)
101  WRITE(nfic,'(3A)') "\subsubsection{",
102  & trim(rubrique(lng,irub3,3)),"}"
103  WRITE(nfic,'(A,A)') '%',repeat('-',80)
104  WRITE(nfic,'(A)') ' '
105  DO j=1,nkey
106  ! Identifying keywwords that are level 1
107  ikey = ordered_key1(j)
108  IF(has_rubrique(ikey,irub1,1,lng).AND.
109  & has_rubrique(ikey,irub2,2,lng).AND.
110  & has_rubrique(ikey,irub3,3,lng)) THEN
111  WRITE(nfic,'(3a)') "\telkey{",
112  & trim(mydico(ikey)%KNOM(lng)),"}\\"
113  ENDIF
114  ENDDO
115  ENDIF
116  ENDDO
117  ENDIF
118  ENDDO
119  ENDDO ! LEVEL 1
120 
121  END SUBROUTINE
122  ! brief Writes a latex documentation from the dictionary
123  !
124  ! param filename name of the output file
125  ! param lng Language of the output
126  SUBROUTINE write2latex(FILENAME,LNG)
127  !
128  IMPLICIT NONE
129  !
130  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: FILENAME
131  INTEGER, INTENT(IN) :: LNG
132  !
133  INTEGER :: I,NFIC,IERR,IKEY
134  CHARACTER(LEN=PATH_LEN), ALLOCATABLE :: TO_SORT1(:),TO_SORT2(:)
135  INTEGER, ALLOCATABLE :: ORDERED_KEY1(:),ORDERED_KEY2(:)
136  INTEGER, ALLOCATABLE :: ORDERED_RUB(:)
137 !
138  nfic = 666
139  WRITE(*,*) '---- LATEX PROCESS ----'
140  WRITE(*,*) 'WRITING IN : ',trim(filename)
141  OPEN(nfic,file=trim(filename),iostat=ierr)
142  CALL check_call(ierr,'WRITE2LATEX')
143  WRITE(*,*) ''
144  WRITE(*,*) 'TOTAL NUMBER OF KEY IN THE DICTIONARY: ',nkey
145  WRITE(*,*) ''
146  !
147  ! First Chapter the list of all keywords with informations
148  !
149  WRITE(nfic,'(A,A)') '%',repeat('-',80)
150  IF(lng.EQ.lng_fr) THEN
151  WRITE(nfic,'(A)') '\chapter{Liste detaillée des mots clefs}'
152  ELSE
153  WRITE(nfic,'(A)') '\chapter{Detail list of keywords}'
154  ENDIF
155  WRITE(nfic,'(A,A)') '%',repeat('-',80)
156  WRITE(nfic,'(A)') ' '
157  !
158  ! Sorting key words by alpahbetical order for each language
159  !
160  ALLOCATE(to_sort1(nkey),stat=ierr)
161  CALL check_allocate(ierr,'TO_SORT1')
162  ALLOCATE(to_sort2(nkey),stat=ierr)
163  CALL check_allocate(ierr,'TO_SORT2')
164  ALLOCATE(ordered_key1(nkey),stat=ierr)
165  CALL check_allocate(ierr,'ORDERED_KEY1')
166  ALLOCATE(ordered_key2(nkey),stat=ierr)
167  CALL check_allocate(ierr,'ORDERED_KEY2')
168  ALLOCATE(ordered_rub(nkey),stat=ierr)
169  CALL check_allocate(ierr,'ORDERED_RUB')
170  ! Initialising list of keywords
171  DO ikey=1,nkey
172  to_sort1(ikey) = repeat(' ',path_len)
173  to_sort2(ikey) = repeat(' ',path_len)
174  to_sort1(ikey)(1:72) = mydico(ikey)%KNOM(lng)
175  to_sort2(ikey)(1:72) = mydico(ikey)%KNOM(3-lng)
176  ENDDO
177  ! Sorting
178  CALL shell_string(nkey,to_sort1,ordered_key1)
179  CALL shell_string(nkey,to_sort2,ordered_key2)
180  DEALLOCATE(to_sort1)
181  DEALLOCATE(to_sort2)
182  ! Looping on ordered keywords
183  DO i=1,nkey
184  ikey = ordered_key1(i)
185  ! Name of the keywords
186  WRITE(nfic,'(A,A)') '%',repeat('-',80)
187  WRITE(nfic,'(3A)') "\section{",trim(mydico(ikey)%KNOM(lng)),"}"
188  WRITE(nfic,'(A,A)') '%',repeat('-',80)
189  WRITE(nfic,'(A)') " "
190  ! The other informations are in an array
191  WRITE(nfic,'(A)') "\begin{tabular}{ll}"
192  ! Type
193  SELECT CASE(mydico(ikey)%KTYPE)
194  CASE(1) ! INTEGER
195  IF(lng.EQ.lng_fr) THEN
196  WRITE(nfic,'(A)') "Type : & Entier\\"
197  ELSE
198  WRITE(nfic,'(A)') "Type : & Integer\\"
199  ENDIF
200  CASE(2) ! REAL
201  IF(lng.EQ.lng_fr) THEN
202  WRITE(nfic,'(A)') "Type : & Réel\\"
203  ELSE
204  WRITE(nfic,'(A)') "Type : & Real\\"
205  ENDIF
206  CASE(3) ! LOGICAL
207  IF(lng.EQ.lng_fr) THEN
208  WRITE(nfic,'(A)') "Type : & Logique\\"
209  ELSE
210  WRITE(nfic,'(A)') "Type : & Logical\\"
211  ENDIF
212  CASE(4) ! CHARACTER
213  IF(lng.EQ.lng_fr) THEN
214  WRITE(nfic,'(A)') "Type : & Caractère\\"
215  ELSE
216  WRITE(nfic,'(A)') "Type : & String\\"
217  ENDIF
218  END SELECT
219  ! Size
220  IF(lng.EQ.lng_fr) THEN
221  WRITE(nfic,'(A,I2,A)') "Taille : & ",mydico(ikey)%TAILLE,"\\"
222  ELSE
223  WRITE(nfic,'(A,I2,A)')
224  & "Dimension : & ",mydico(ikey)%TAILLE,"\\"
225  ENDIF
226  ! Mnemo
227  WRITE(nfic,'(A)') "Mnemo & ",trim(mydico(ikey)%MNEMO),"\\"
228  ! Default values
229  CALL write_default(nfic,ikey,lng)
230  ! And the name of the keyword in the other language
231  IF(lng.EQ.lng_fr) THEN
232  WRITE(nfic,'(3A)') "Mot clef anglais : & ",
233  & trim(mydico(ikey)%KNOM(2)),"\\"
234  ELSE
235  WRITE(nfic,'(3A)') "French keyword : & \telkey{",
236  & trim(mydico(ikey)%KNOM(1)),"}\\"
237  ENDIF
238  WRITE(nfic,'(a)') "\end{tabular}"
239  WRITE(nfic,'(A)') "\\"
240  ! The help informations
241  IF(mydico(ikey)%AIDE(lng)(1:3).EQ.' ') THEN
242  WRITE(nfic,'(A)') 'TODO: WRITE HELP FOR THAT KEYWORD'
243  ELSE
244  WRITE(nfic,'(A)') trim(mydico(ikey)%AIDE(lng))
245  ENDIF
246  WRITE(nfic,'(A)') "%"
247  ENDDO
248 !
249 !
250  !
251  ! Keywsords by rubriques
252  !
253  WRITE(nfic,'(A,A)') '%',repeat('-',80)
254  IF(lng.EQ.lng_fr) THEN
255  WRITE(nfic,'(A)') '\chapter{Liste des mots clefs par rubrique}'
256  ELSE
257  WRITE(nfic,'(A)')
258  & '\chapter{List of keywords classified according to type}'
259  ENDIF
260  WRITE(nfic,'(A,A)') '%',repeat('-',80)
261  WRITE(nfic,'(A)') ' '
262  CALL write_rubrique2latex(nfic,lng,ordered_key1)
263 
264 !
265  WRITE(nfic,'(A,A)') '%',repeat('-',80)
266  IF(lng.EQ.lng_fr) THEN
267  WRITE(nfic,'(A)') '\chapter{Glossaire}'
268  ELSE
269  WRITE(nfic,'(A)') '\chapter{Glossary}'
270  ENDIF
271  WRITE(nfic,'(A,A)') '%',repeat('-',80)
272  WRITE(nfic,'(A)') ' '
273  !
274  ! Section list of keywords lng -> 3-lng
275  !
276  WRITE(nfic,'(A,A)') '%',repeat('-',80)
277  IF(lng.EQ.lng_fr) THEN
278  WRITE(nfic,'(A)') '\section{Glossaire francais/anglais}'
279  ELSE
280  WRITE(nfic,'(A)') '\section{English/French glossary}'
281  ENDIF
282  WRITE(nfic,'(A,A)') '%',repeat('-',80)
283  WRITE(nfic,'(A)') ' '
284  ! Keywords are written in a longatble
285  WRITE(nfic,'(A)') '\begin{longtable}'//
286  & '{|p{0.5\linewidth}|p{0.5\linewidth}|}'
287  WRITE(nfic,'(A)') '\hline'
288  DO i=1,nkey
289  ikey = ordered_key1(i)
290  WRITE(nfic,'(5A)') "\telkey{",trim(mydico(ikey)%KNOM(lng)),
291  & "} & \telkey{",trim(mydico(ikey)%KNOM(3-lng)),
292  & "}\\"
293  WRITE(nfic,'(A)') '\hline'
294  ENDDO
295  WRITE(nfic,'(A)') '\end{longtable}'
296  WRITE(nfic,'(A)') '%'
297  !
298  ! Section list of keywords 3-lng -> lng
299  !
300  WRITE(nfic,'(A,A)') '%',repeat('-',80)
301  IF(lng.EQ.lng_fr) THEN
302  WRITE(nfic,'(A)') '\section{Glossaire anglais/francais}'
303  ELSE
304  WRITE(nfic,'(A)') '\section{French/English glossary}'
305  ENDIF
306  WRITE(nfic,'(A,A)') '%',repeat('-',80)
307  WRITE(nfic,'(A)') ' '
308  ! Keywords are written in a longatble
309  WRITE(nfic,'(A)') '\begin{longtable}'//
310  & '{|p{0.5\linewidth}|p{0.5\linewidth}|}'
311  WRITE(nfic,'(A)') '\hline'
312  DO i=1,nkey
313  ikey = ordered_key2(i)
314  WRITE(nfic,'(5A)') "\telkey{",trim(mydico(ikey)%KNOM(3-lng)),
315  & "} & \telkey{",trim(mydico(ikey)%KNOM(lng)),
316  & "}\\"
317  WRITE(nfic,'(A)') '\hline'
318  ENDDO
319  WRITE(nfic,'(A)') '\end{longtable}'
320 
321  CLOSE(nfic)
322 !
323  END SUBROUTINE
324  !
325  END MODULE utils_latex
subroutine write_rubrique2latex(NFIC, LNG, ORDERED_KEY1)
Definition: utils_latex.f:14
subroutine write2latex(FILENAME, LNG)
Definition: utils_latex.f:128
subroutine write_default(NFIC, IKEY, LNG)
Definition: dico_data.f:473
logical, dimension(:,:,:), allocatable rub2_dep
Definition: dico_data.f:86
integer, dimension(2, 3) nrub
Definition: dico_data.f:87
integer nkey
Definition: dico_data.f:80
logical function has_rubrique(IKEY, IRUB, LEVEL, LNG)
Definition: dico_data.f:524
character(len=string_len), dimension(2, rmax, 3) rubrique
Definition: dico_data.f:84
logical, dimension(:,:), allocatable rub1_dep
Definition: dico_data.f:86
type(keyword), dimension(nmax *4) mydico
Definition: dico_data.f:78
subroutine shell_string(N, A, B)
Definition: shell_string.f:10