Kit : Améliorations de la gestion du code

Ioan Calapodescu

Voici une petite proposition pour améliorer la gestion des codes dans le kit (articles, FAQ, sources, etc.). ♪

- Titre : Kit : Améliorations de la gestion du code

- Auteur : Ioan Calapodescu

- Parution : 16 novembre 2006

- Mise à jour : 5 mai 2007

- Licence : Ce document ment ment est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- 1. En résumé

- 2. Nouvelles fonctionnalités

- 2-A. Numérotation des lignes de code

- 2-B. Liaison avec un fichier

- 2-C. Code dissimulable

- 2-D. Overflow

- 2-E. Meilleure coloration

- 2-E-1. Avantages

- 2-E-2. Inconvénients

- 3. Nouveau système de coloration

- 3-A. L’API de coloration

- 3-B. Créez vos propres modes

- 3-C. Personnalisez la coloration

- 4. Langages déjà supportés par l’ancien système de coloration

- 4-A. Action script

- 4-B. ASP , ASP.NET

- 4-C. Awk

- 4-D. Borland C++ , C , C++ , C#

- 4-E. CSS

- 4-F. Delphi et Delphi pour .NET

- 4-G. INI

- 4-H. Java

- 4-I. Javascript

- 4-J. Shell linux

- 4-K. Oracle

- 4-L. Autre

- 4-M. Perso

- 4-N. PHP

- 4-O. PostGreSQL

- 4-P. Python

- 4-Q. SQL

- 4-R. VB , VB.NET

- 4-S. XML

- 5. Quelques-uns des nouveaux langages supportés

- 5-A. Ruby, RHTML

- 5-B. POV-Ray

- 5-C. Latex

- 5-D. Batch

- 5-E. Coldfusion

- 5-F. Ocaml

- 5-G. Makefile

- 5-H. Assembleur x86

- 5-I. Ada95

- 5-J. ANTLR

- 5-K. Apache conf

- 5-L. Aspect J

- 5-M. Eiffel

- 5-N. Cobol

- 5-O. Fortran

- 5-P. Frremarker

- 5-Q. Erlang

- 5-R. Groovy

- 5-S. JSP

- 5-T. Lisp

- 5-U. Objective C

- 5-V. Postscript

- 5-W. Propriétés

- 5-X. Relax NG

- 5-Y. Smalltalk

- 5-Z. XSL

- 6. Téléchargements

1 - En résumé

Je vais vous présenter quelques modifications que j’ai apportées au Kit actuel (version 5.9) pour améliorer la gestion des codes.

Pour commencer, on va faire le tour de quelques petites fonctionnalités du style : numérotation des lignes de code, liens avec un fichier ou encore les codes enroulables.

Dans la seconde partie, je vais détailler les modifications faites au système de coloration syntaxique. Différences, avantages et inconvénients par rapport à l’ancien système. Je vais aussi vous montrer comment créer un système de coloration si votre langage favori ne se trouve pas dans la centaine proposée. Par la même occasion, vous verrez comment modifier/étendre un langage, s’il ne vous convient pas dans l’état actuel.

Dans les deux parties suivantes, vous pourrez voir quelques exemples de coloration syntaxique. La première contient les langages déjà présents avec l’ancien système de coloration (ainsi, vous pourrez me dire ce qu’il y a à modifier, puisqu’il y a des différences), et la seconde quelques nouveaux.

Pour finir, vous trouverez en fin d’article les liens vers les sources (l’API Java utilisée) et vers une version du kit utilisant les binaires.

2 - Nouvelles fonctionnalités

2-A - Numérotation des lignes de code

Si on met en place ce nouveau système de gestion du code, vous pourrez numéroter les codes que vous proposez en exemple dans vos cours, tutoriels ou FAQ. Cela peut faciliter les explications ultérieures que vous ferrez sur ces mêmes codes. Voici un exemple :

1. /**

2. * HelloWorld.java

3. */

4. package hello;

5. public class HelloWorld {

6. public static void main(String[] args) {

7. System.out.println("Hello world !!!");

8. }

9. }

Regardez, tout se joue en ligne 7. ;)

Vous pouvez aussi spécifier la « ligne de départ » pour des extraits de fichiers. Par exemple :

1. public static void main(String[] args) {

2. System.out.println("Hello world !!!");

3. }

Voici le code qui a permis de générer les extraits ci-dessus :

<code langage="java" showLines="1">...</code>
...
<code langage="java" showLines="1" startLine="5">...</code>

2-B - Liaison avec un fichier

Si vous utilisez la possibilité de numéroter vos codes, il peut être intéressant, notamment dans le cas d’extraits, de fournir le fichier complet à télécharger. Voici un exemple :

1. /**

2. * HelloWorld.java

3. */

4. package hello;

5. public class HelloWorld {

6. public static void main(String[] args) {

7. System.out.println("Hello world !!!");

8. }

9. }

Et voici le code pour le kit :

<code langage="java" showLines="1" fichier="./fichiers/HelloWorld.java">...</code>

Voyons maintenant comment vous pouvez « dissimuler » votre code, si celui-ci est trop long/volumineux/laid ;)

2-C - Code dissimulable

Si certains de vos exemples sont trop « longs », il peut être pas mal de pouvoir les cacher, au moins temporairement, pour pouvoir continuer à lire tranquillement les explications qui tournent autour. Voici un exemple (clickouillez sur les flèches) :

Apache conf

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to point the LockFile directive
# at a local disk.  If you wish to share the same ServerRoot for multiple
# httpd daemons, you will need to change at least LockFile and PidFile.
#
ServerRoot "/opt/lampp"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so

Le code à utiliser pour l’effet est :

<code langage="apacheconf" titre="Apache conf" dissimulable="0">

Vous pouvez aussi utiliser la valeur « 1 » pour l’attribut dissimulable. Dans ce cas, le code sera dissimulable et dissimulé par défaut. Par exemple :

Apache conf

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to point the LockFile directive
# at a local disk.  If you wish to share the same ServerRoot for multiple
# httpd daemons, you will need to change at least LockFile and PidFile.
#
ServerRoot "/opt/lampp"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so

Le code à utiliser pour l’effet est :

<code langage="apacheconf" titre="Apache conf" dissimulable="1">

2-D - Overflow

En voilà une nouveauté qu’elle est bien pour la conduire. En plus ça ne m’a pas pris plus d’une ligne de code et grâce à elle vous allez pouvoir poser de gros paquets de code qui ne vont pas casser la mise en page de votre article. Par exemple :

Code beaucoup trop long

<paragraph>Ceci dit, pour ces effets, il faudra bien veiller à ce qu’ils ne soient pas bloquants pour certains visiteurs, qu’ils ne vont pas casser la validité XHTML du truc et que la fonctionnalité qu’ils proposent est accessible même sans JS. Il faudra aussi penser que ces effets ne seront pas transposables à d’autres formats (au hasard le PDF;).</paragraph>

Cette possibilité est seulement là pour veiller à ce que la mise en page ne soit pas cassée par vos codes trop longs, même si le visiteur est en 800x600, c’est tout. Ce n’est pas une raison pour écrire des gros pâtés illisibles et qui de toutes façons ne passeront pas en PDF. ;)

Errata : 'En plus ça ne m’a pas pris plus d’une ligne de code'

Précisons que ça ne m’a pas pris plus d’une ligne de code pour que ça fonctionne avec Firefox, la suite Mozilla, Seamonkey, Opera, etc. J’avais oublié de tester avec IE. Du coup c’est à compléter… Merci IE … (¬_¬)

Passons maintenant aux améliorations apportées à la coloration syntaxique.

2-E - Meilleure coloration

2-E-1 - Avantages

Dans cette partie, je vais juste vous détailler pourquoi c’est une alternative intéressante par rapport au système actuel. Je détaillerais son fonctionnement, le format XML utilisé pour décrire les langages, etc. un peu plus loin.

Pour faire bref, l’ancien système devenait (à mon avis) trop complexe à maintenir et à faire évoluer. Ce nouveau système va permettre d’avoir :

- Une base d’un peu plus d’une centaine de langages (voir ci-dessous). Même s’il est peu probable qu’on ait à tous les utiliser, au moins, on sait qu’ils sont disponibles. Et puis, si on retrouve quelqu’un qui fait du cobol, il sera surement ravi de savoir que le kit gère la coloration syntaxique de la chose. ;)

- Un traitement plus fin au niveau de chaque langage : une quinzaine de marqueurs disponibles (label, litteral, keyword, etc.).

- Une facilité d’évolution : la définition des langages se faisant de manière modulaire, il est facile de faire de l’assemblage. Par exemple à partir de la définition de Ruby et de HTML, ça prend quelques lignes (facilement lisibles) pour définir le RHTML. Je vous montrerai tout à l’heure comment avec du VB et quelques balises on crée du VB.NET :p

- Une meilleure mise en page des « codes imbriqués ». Par codes imbriqués, j’entends par exemple tout ce qui est développement web, ou il n’est pas rare de voir du HTML, côtoyer le langage de script serveur avec éventuellement une pointe de CSS/JS/etc. Voici un exemple, pour vous donner une idée :

JSP, Scriptlet Java, CSS et JS (pour avoir un mélange bien horrible : à ne surtout pas essayer à la maison)

1. <%@page contentType="text/html"%>

2. <%@page pageEncoding="UTF-8"%>

3. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

5. "http://www.w3.org/TR/html4/loose.dtd">

6. <html>

7. <head>

8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

9. <title>Hello</title>

10. <style type="text/css">

11. body{

12. font-family: Verdana, sans-serif;

13. font-size: 14px;

14. font-style: italic;

15. }

16. h1.hello{

17. color: #0000ff;

18. }

19. </style>

20. <script type="text/javascript">

21. function sayHello(name){

22. alert('Hello '+name+'');

23. }

24. </script>

25. </head>

26. <body>ééé

27. <%

28. boolean needToSayHello = Boolean.valueOf(request.getParameter("sayHello")); boolean needToSayHello = Boolean.valueOf(request.getParameter("sayHello"));

29. request.setAttribute("needToSayHello", needToSayHello);

30. %>

31. <%-- bla --%>

32. <c:if test="${needToSayHello}">

33. <h1 class="hello">

34. <a href="#" onclick="return sayHello('${param.name}');">

35. Say hello!

36. </a>

37. </h1>

38. </c:if>

39. </body>

40. </html>

Voici les quelques langages gérés actuellement par cette API :

Fichiers de définition des modes (un mode pouvant regrouper plusieurs langages)

ioan@ubuntu:~/java/projets/dvp/kit/coloration$ ls *.xml
actionscript.xml      icon.xml              psp.xml
ada95.xml             idl.xml               ptl.xml
antlr.xml             inform.xml            pvwave.xml
apacheconf.xml        ini.xml               pyrex.xml
apdl.xml              inno-setup.xml        python.xml
applescript.xml       interlis.xml          rd.xml
aspect-j.xml          io.xml                rebol.xml
aspnet.xml            javacc.xml            redcode.xml
asp.xml               javascript.xml        relax-ng-compact.xml
assembly-m68k.xml     java.xml              rest.xml
assembly-macro32.xml  jcl.xml               rhtml.xml
assembly-mcs51.xml    jhtml.xml             rib.xml
assembly-parrot.xml   jmk.xml               rpmspec.xml
assembly-r2000.xml    jsp.xml               rtf.xml
assembly-x86.xml      latex.xml             ruby.xml
awk.xml               lilypond.xml          rview.xml
batch.xml             lisp.xml              sas.xml
bbj.xml               literate-haskell.xml  scheme.xml
bcel.xml              lotos.xml             sdl_pr.xml
bibtex.xml            lua.xml               sgml.xml
b.xml                 mail.xml              shellscript.xml
chill.xml             makefile.xml          shtml.xml
cil.xml               maple.xml             slate.xml
cobol.xml             ml.xml                smalltalk.xml
coldfusion.xml        modula3.xml           smi-mib.xml
cplusplus.xml         moin.xml              splus.xml
csharp.xml            mqsc.xml              sqr.xml
css.xml               myghty.xml            squidconf.xml
cvs-commit.xml        netrexx.xml           ssharp.xml
c.xml                 nqc.xml               svn-commit.xml
doxygen.xml           nsis2.xml             swig.xml
dsssl.xml             objective-c.xml       tcl.xml
d.xml                 objectrexx.xml        texinfo.xml
eiffel.xml            occam.xml             text.xml
embperl.xml           omnimark.xml          tex.xml
erlang.xml            pascal.xml            tpl.xml
factor.xml            patch.xml             tsql.xml
forth.xml             perl.xml              twiki.xml
fortran.xml           php.xml               typoscript.xml
foxpro.xml            pike.xml              uscript.xml
freemarker.xml        pl1.xml               vbscript.xml
gettext.xml           pl-sql.xml            velocity.xml
gnuplot.xml           pop11.xml             verilog.xml
groovy.xml            postscript.xml        vhdl.xml
haskell.xml           povray.xml            xml.xml
hex.xml               powerdynamo.xml       xq.xml
htaccess.xml          progress.xml          xsl.xml
html.xml              prolog.xml            zpt.xml
i4gl.xml              props.xml
ioan@ubuntu:~/java/projets/dvp/kit/coloration$

En plus des langages correspondant aux fichiers xml ci-dessus, quelques alias sont disponibles (histoire de garder la compatibilité avec le kit actuel et/ou proposer une alternative pour les langages non encore définis) :

pascal=delphi, delphinet
actionscript=as
vbscript=asp, vb, vbnet
cplusplus=bcb, cpp
javascript=js
shellscript=linux
pl-sql=oracle,sql, postgresql
text=other, perso

2-E-2 - Inconvénients

Il y aura quand même du travail pour tout intégrer. Certains langages sont de base mieux définis que dans l’ancien système, pour d’autres, c’est malheureusement le contraire. Donc, il va y avoir un peu de travail à faire là-dessus pour que tout le monde puisse s’y retrouver. :)

Théoriquement, comme l’ensemble est modulaire et qu’une très grosse partie est faite, ça devrait aller assez vite. J’aurai par contre besoin de votre aide, si naturellement ça vous tente, afin que vous testiez la coloration sur vos nouveaux/anciens articles/FAQ/etc.

Voyons maintenant comment « ça marche » :)

3 - Nouveau système de coloration

3-A - L’API de coloration

Cette API joue exactement le même rôle que les fichiers de coloration perl utilisés précédemment : ils vont mettre en page les balises <code> avant que la « moulinette » XSLT prenne le relai pour créer les pagesHTML, XSL-FO, etc. Les prérequis sont Java 5.0 (dispo dans le PATH), dvp-coloration.jar et commons-lang.jar (dispos dans le CLASSPATH) et les fichiers de définition des langages.

Son mode d’emploi se limite à ça :

java -jar /chemin/vers/dvp-coloration.jar /chemin/vers/documents/original.xml /chemin/vers/resultat.xml /chemin/vers/definitions

Par exemple, pour les articles (sachant que j’ai placé les définitions des langages dans coloration, les jars dans lib et que je suis au niveau du répertoire script) :

java -jar ./lib/dvp-coloration.jar ../documents/$1/$1.xml ../ArtTmp.xml ./coloration

Pour ceux que ça intéresse, les sources sont dispo en bas de l’article.

Passons maintenant à la définition des langages ou modes.

3-B - Créez vos propres modes

Voici à quoi ressemble un fichier de définition de langage :

Pascal

1. <?xml version="1.0"?>

3. <!DOCTYPE MODE SYSTEM "xmode.dtd">

5. <!-- Pascal mode by Kristian Ovaska.

6. Delphi 3 was used as reference.

7. Modified by Barry Carr (Ixian Software Components Ltd)

8. Delphi 6 was used as reference.

9. Modified by Barry Carr (Ixian Software Components Ltd) Feb '04

10. Delphi 8 (for .NET) was used as reference

11. Keywords   = KEYWORD1

12. Directives = KEYWORD2.

13. Everything else as is-->

14. <MODE>

15. <PROPS>

16. <PROPERTY NAME="commentStart" VALUE="{" />

17. <PROPERTY NAME="commentEnd" VALUE="}" />

18. <PROPERTY NAME="lineComment" VALUE="//" />

19. </PROPS>

21. <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">

22. <!-- Compiler directives. -->

23. <SPAN TYPE="COMMENT3">

24. <BEGIN>{$</BEGIN>

25. <END>}</END>

26. </SPAN>

27. <SPAN TYPE="COMMENT3">

28. <BEGIN>(*$</BEGIN>

29. <END>*)</END>

30. </SPAN>

32. <!-- Normal comments. -->

33. <SPAN TYPE="COMMENT1">

34. <BEGIN>{</BEGIN>

35. <END>}</END>

36. </SPAN>

38. <SPAN TYPE="COMMENT1">

39. <BEGIN>(*</BEGIN>

40. <END>*)</END>

41. </SPAN>

43. <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>

45. <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">

46. <BEGIN>'</BEGIN>

47. <END>'</END>

48. </SPAN>

50. <SEQ TYPE="OPERATOR">)</SEQ>

51. <SEQ TYPE="OPERATOR">(</SEQ>

52. <SEQ TYPE="OPERATOR">]</SEQ>

53. <SEQ TYPE="OPERATOR">[</SEQ>

54. <SEQ TYPE="OPERATOR">.</SEQ>

55. <SEQ TYPE="OPERATOR">,</SEQ>

56. <SEQ TYPE="OPERATOR">;</SEQ>

57. <SEQ TYPE="OPERATOR">^</SEQ>

58. <SEQ TYPE="OPERATOR">@</SEQ>

59. <SEQ TYPE="OPERATOR">:=</SEQ>

60. <SEQ TYPE="OPERATOR">:</SEQ>

61. <SEQ TYPE="OPERATOR">=</SEQ>

62. <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>

63. <SEQ TYPE="OPERATOR">&gt;</SEQ>

64. <SEQ TYPE="OPERATOR">&lt;</SEQ>

65. <SEQ TYPE="OPERATOR">&gt;=</SEQ>

66. <SEQ TYPE="OPERATOR">&lt;=</SEQ>

67. <SEQ TYPE="OPERATOR">+</SEQ>

68. <SEQ TYPE="OPERATOR">-</SEQ>

69. <SEQ TYPE="OPERATOR">/</SEQ>

70. <SEQ TYPE="OPERATOR">*</SEQ>

72. <KEYWORDS>

73. <!-- Reserved words. Standard directives are not included, except

74. private, protected, public, published, and automated. -->

75. <KEYWORD1>and</KEYWORD1>

76. <KEYWORD1>array</KEYWORD1>

77. <KEYWORD1>as</KEYWORD1>

78. <KEYWORD1>at</KEYWORD1>

79. <KEYWORD1>asm</KEYWORD1>

80. <KEYWORD1>begin</KEYWORD1>

81. <KEYWORD1>case</KEYWORD1>

82. <KEYWORD1>class</KEYWORD1>

83. <KEYWORD1>const</KEYWORD1>

84. <KEYWORD1>constructor</KEYWORD1>

85. <KEYWORD1>destructor</KEYWORD1>

86. <KEYWORD1>dispinterface</KEYWORD1>

87. <KEYWORD1>div</KEYWORD1>

88. <KEYWORD1>do</KEYWORD1>

89. <KEYWORD1>downto</KEYWORD1>

90. <KEYWORD1>else</KEYWORD1>

91. <KEYWORD1>end</KEYWORD1>

92. <KEYWORD1>except</KEYWORD1>

93. <KEYWORD1>exports</KEYWORD1>

94. <KEYWORD1>file</KEYWORD1>

95. <KEYWORD1>final</KEYWORD1>

96. <KEYWORD1>finalization</KEYWORD1>

97. <KEYWORD1>finally</KEYWORD1>

98. <KEYWORD1>for</KEYWORD1>

99. <KEYWORD1>function</KEYWORD1>

100. <KEYWORD1>goto</KEYWORD1>

101. <KEYWORD1>if</KEYWORD1>

102. <KEYWORD1>implementation</KEYWORD1>

103. <KEYWORD1>in</KEYWORD1>

104. <KEYWORD1>inherited</KEYWORD1>

105. <KEYWORD1>initialization</KEYWORD1>

106. <KEYWORD1>inline</KEYWORD1>

107. <KEYWORD1>interface</KEYWORD1>

108. <KEYWORD1>is</KEYWORD1>

109. <KEYWORD1>label</KEYWORD1>

110. <KEYWORD1>mod</KEYWORD1>

111. <KEYWORD1>not</KEYWORD1>

112. <KEYWORD1>object</KEYWORD1>

113. <KEYWORD1>of</KEYWORD1>

114. <KEYWORD1>on</KEYWORD1>

115. <KEYWORD1>or</KEYWORD1>

116. <KEYWORD1>out</KEYWORD1>

117. <KEYWORD1>packed</KEYWORD1>

118. <KEYWORD1>procedure</KEYWORD1>

119. <KEYWORD1>program</KEYWORD1>

120. <KEYWORD1>property</KEYWORD1>

121. <KEYWORD1>raise</KEYWORD1>

122. <KEYWORD1>record</KEYWORD1>

123. <KEYWORD1>repeat</KEYWORD1>

124. <KEYWORD1>resourcestring</KEYWORD1>

125. <KEYWORD1>set</KEYWORD1>

126. <KEYWORD1>sealed</KEYWORD1>

127. <KEYWORD1>shl</KEYWORD1>

128. <KEYWORD1>shr</KEYWORD1>

129. <KEYWORD1>static</KEYWORD1>

130. <KEYWORD1>string</KEYWORD1>

131. <KEYWORD1>then</KEYWORD1>

132. <KEYWORD1>threadvar</KEYWORD1>

133. <KEYWORD1>to</KEYWORD1>

134. <KEYWORD1>try</KEYWORD1>

135. <KEYWORD1>type</KEYWORD1>

136. <KEYWORD1>unit</KEYWORD1>

137. <KEYWORD1>unsafe</KEYWORD1>

138. <KEYWORD1>until</KEYWORD1>

139. <KEYWORD1>uses</KEYWORD1>

140. <KEYWORD1>var</KEYWORD1>

141. <KEYWORD1>while</KEYWORD1>

142. <KEYWORD1>with</KEYWORD1>

143. <KEYWORD1>xor</KEYWORD1>

145. <KEYWORD2>absolute</KEYWORD2>

146. <KEYWORD2>abstract</KEYWORD2>

147. <KEYWORD2>assembler</KEYWORD2>

148. <KEYWORD2>automated</KEYWORD2>

149. <KEYWORD2>cdecl</KEYWORD2>

150. <KEYWORD2>contains</KEYWORD2>

151. <KEYWORD2>default</KEYWORD2>

152. <KEYWORD2>deprecated</KEYWORD2>

153. <KEYWORD2>dispid</KEYWORD2>

154. <KEYWORD2>dynamic</KEYWORD2>

155. <KEYWORD2>export</KEYWORD2>

156. <KEYWORD2>external</KEYWORD2>

157. <KEYWORD2>far</KEYWORD2>

158. <KEYWORD2>forward</KEYWORD2>

159. <KEYWORD2>implements</KEYWORD2>

160. <KEYWORD2>index</KEYWORD2>

161. <KEYWORD2>library</KEYWORD2>

162. <KEYWORD2>local</KEYWORD2>

163. <KEYWORD2>message</KEYWORD2>

164. <KEYWORD2>name</KEYWORD2>

165. <KEYWORD2>namespaces</KEYWORD2>

166. <KEYWORD2>near</KEYWORD2>

167. <KEYWORD2>nodefault</KEYWORD2>

168. <KEYWORD2>overload</KEYWORD2>

169. <KEYWORD2>override</KEYWORD2>

170. <KEYWORD2>package</KEYWORD2>

171. <KEYWORD2>pascal</KEYWORD2>

172. <KEYWORD2>platform</KEYWORD2>

173. <KEYWORD2>private</KEYWORD2>

174. <KEYWORD2>protected</KEYWORD2>

175. <KEYWORD2>public</KEYWORD2>

176. <KEYWORD2>published</KEYWORD2>

177. <KEYWORD2>read</KEYWORD2>

178. <KEYWORD2>readonly</KEYWORD2>

179. <KEYWORD2>register</KEYWORD2>

180. <KEYWORD2>reintroduce</KEYWORD2>

181. <KEYWORD2>requires</KEYWORD2>

182. <KEYWORD2>resident</KEYWORD2>

183. <KEYWORD2>safecall</KEYWORD2>

184. <KEYWORD2>stdcall</KEYWORD2>

185. <KEYWORD2>stored</KEYWORD2>

186. <KEYWORD2>varargs</KEYWORD2>

187. <KEYWORD2>virtual</KEYWORD2>

188. <KEYWORD2>write</KEYWORD2>

189. <KEYWORD2>writeonly</KEYWORD2>

191. <!-- Ordinal types. -->

192. <KEYWORD3>shortint</KEYWORD3>

193. <KEYWORD3>byte</KEYWORD3>

194. <KEYWORD3>char</KEYWORD3>

195. <KEYWORD3>smallint</KEYWORD3>

196. <KEYWORD3>integer</KEYWORD3>

197. <KEYWORD3>word</KEYWORD3>

198. <KEYWORD3>longint</KEYWORD3>

199. <KEYWORD3>cardinal</KEYWORD3>

200. <!-- Boolean types. -->

201. <KEYWORD3>boolean</KEYWORD3>

202. <KEYWORD3>bytebool</KEYWORD3>

203. <KEYWORD3>wordbool</KEYWORD3>

204. <KEYWORD3>longbool</KEYWORD3>

205. <!-- Real types. -->

206. <KEYWORD3>real</KEYWORD3>

207. <KEYWORD3>single</KEYWORD3>

208. <KEYWORD3>double</KEYWORD3>

209. <KEYWORD3>extended</KEYWORD3>

210. <KEYWORD3>comp</KEYWORD3>

211. <KEYWORD3>currency</KEYWORD3>

212. <!-- Untyped pointer. -->

213. <KEYWORD3>pointer</KEYWORD3>

215. <LITERAL2>false</LITERAL2>

216. <LITERAL2>nil</LITERAL2>

217. <LITERAL2>self</LITERAL2>

218. <LITERAL2>true</LITERAL2>

219. </KEYWORDS>

220. </RULES>

221. </MODE>

Bruno, j’espère que tu es rassuré en voyant que Delphi (même .NET) n’a pas été oublié. Il est simplement défini dans le fichier pascal, l’utilisateur n’a pas à se soucier de ce nom, il pourra toujours utiliser <code langage="delphi". ;)

Ceci dit, on pourra créer un fichier de définition spécial pour Delphi .NET, si celui actuellement disponible n’est pas suffisant :)

C’est justement ce que l’on va voir tout de suite en étendant la définition de VB pour mieux prendre en compte VB.NET. Voici le fichier original de définition de VB :

Langage VB (extrait)

<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<MODE>
<PROPS>
<PROPERTY NAME="lineComment" VALUE="'" />
</PROPS>

<RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>"</BEGIN>
<END>"</END>
</SPAN>

<!-- conditional compilation -->
<EOL_SPAN TYPE="KEYWORD2">#if</EOL_SPAN>
<EOL_SPAN TYPE="KEYWORD2">#else</EOL_SPAN>
<EOL_SPAN TYPE="KEYWORD2">#end</EOL_SPAN>

<EOL_SPAN TYPE="COMMENT1">'</EOL_SPAN>
<EOL_SPAN TYPE="COMMENT1">rem </EOL_SPAN>

<!-- Comparison operators -->
<SEQ TYPE="OPERATOR">&lt;</SEQ>
<SEQ TYPE="OPERATOR">&lt;=</SEQ>
<SEQ TYPE="OPERATOR">&gt;=</SEQ>
<SEQ TYPE="OPERATOR">&gt;</SEQ>
<SEQ TYPE="OPERATOR">=</SEQ>
<SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>
<SEQ TYPE="OPERATOR">.</SEQ>

<!-- Instruction separator -->
<MARK_PREVIOUS TYPE="LABEL" EXCLUDE_MATCH="TRUE"
AT_LINE_START="TRUE">:</MARK_PREVIOUS>

<KEYWORDS>
<!-- Conditional Statements -->
<KEYWORD1>if</KEYWORD1>
<KEYWORD1>then</KEYWORD1>
<KEYWORD1>else</KEYWORD1>
<KEYWORD1>elseif</KEYWORD1>
<KEYWORD1>select</KEYWORD1>
<KEYWORD1>case</KEYWORD1>

<!-- Operators -->
<!-- Comparison operators -->
<OPERATOR>is</OPERATOR>
<!-- Arithmetic operators -->
<OPERATOR>mod</OPERATOR>
<!-- Logical operators -->
<OPERATOR>and</OPERATOR>
<OPERATOR>or</OPERATOR>
<OPERATOR>not</OPERATOR>
<OPERATOR>xor</OPERATOR>
<OPERATOR>imp</OPERATOR>

<!-- Datatypes Constants/Literals -->
<KEYWORD3>false</KEYWORD3>
<KEYWORD3>true</KEYWORD3>
<KEYWORD3>empty</KEYWORD3>
<KEYWORD3>nothing</KEYWORD3>
<KEYWORD3>null</KEYWORD3>

<!-- VBScript Constants -->
<!-- Color constants -->
<LITERAL2>vbblack</LITERAL2>
<LITERAL2>vbred</LITERAL2>
<LITERAL2>vbgreen</LITERAL2>
<LITERAL2>vbyellow</LITERAL2>
<LITERAL2>vbblue</LITERAL2>
<LITERAL2>vbmagenta</LITERAL2>
<LITERAL2>vbcyan</LITERAL2>
<LITERAL2>vbwhite</LITERAL2>

<!-- Date Format Constants -->
<LITERAL2>vbGeneralDate</LITERAL2>
<LITERAL2>vbLongDate</LITERAL2>
<LITERAL2>vbShortDate</LITERAL2>
<LITERAL2>vbLongTime</LITERAL2>
<LITERAL2>vbShortTime</LITERAL2>

<!-- Miscellaneous  -->
<LITERAL2>vbObjectError</LITERAL2>
<KEYWORD2>Err</KEYWORD2>

</KEYWORDS>
</RULES>
</MODE>

A priori des mots clefs comme Imports et Namespace sont spécifiques à VB.NET. Créons un fichier pour y définir ce langage (en gros vb.net = vb + qques mots clefs supplémentaires).

vbnet.xml

<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<MODE>
<!-- Aucune propriété particulière, on va juste définir un ensemble de règles -->

<!-- Ensemble de règles principal-->
<RULES IGNORE_CASE="TRUE">

<!-- On importe les règles définies dans vbscript, puisqu’on va toutes les réutiliser -->
<!-- (NB : on peut importer de manière plus fine, cf. les DELEGATE) -->
<IMPORT DELEGATE="vbscript::MAIN"/>

<!-- On rajoute nos propres mots clefs (spécifiques à VB.NET) -->
<!-- Imports, NameSpace, Shared pour en prendre trois au hasard -->
<!-- Pour l’exemple on va les mettre en KEYWORD4 -->
<KEYWORDS>
<KEYWORD4>imports</KEYWORD4>
<KEYWORD4>namespace</KEYWORD4>
<KEYWORD4>shared</KEYWORD4>
</KEYWORDS>
</RULES>
</MODE>

Pour information, voici le même code VB.NET colorié une fois avec vb, une fois avec notre nouveau fichier :

code langage='vb'

' skdjfhskdfh
' sdkfsldkjfsldj
sdfs< ' sfsjldkfjsdf
Imports System
Imports System.Text.RegularExpressions

Dim s As String = "SELECT * FROM matable WHERE madate='aujourd'hui' AND flag=1"

Char &
NameSpace ExemplesRegEx &
Public Class Verification
Shared Sub Main()
Dim verif as Regex = new Regex("[0-9]{10}")
Dim numero as String = "0123456789"
Dim isNumero As Boolean = verif.IsMatch(numero)
If isNumero Then
Console.WriteLine("Le numéro de téléphone est valide ")
Else
Console.WriteLine("Le numéro de téléphone n’est pas valide ")
End If
End Sub
End Class
End NameSpace

code langage='vbnet'

' skdjfhskdfh
' sdkfsldkjfsldj
sdfs< ' sfsjldkfjsdf
Imports System
Imports System.Text.RegularExpressions

Dim s As String = "SELECT * FROM matable WHERE madate='aujourd'hui' AND flag=1"

Char &
NameSpace ExemplesRegEx &
Public Class Verification
Shared Sub Main()
Dim verif as Regex = new Regex("[0-9]{10}")
Dim numero as String = "0123456789"
Dim isNumero As Boolean = verif.IsMatch(numero)
If isNumero Then
Console.WriteLine("Le numéro de téléphone est valide ")
Else
Console.WriteLine("Le numéro de téléphone n’est pas valide ")
End If
End Sub
End Class
End NameSpace

« En gros », ce n’est pas plus compliqué que ça. Il faut relativiser, car il faut se taper la dtd xmode (c’est la seule doc disponible). D’un autre côté, il y a assez d’exemples pour que ce ne soit pas problématique.

Avant de passer aux exemples, voyons quelles possibilités (autres que de rajouter des règles) on a pour personnaliser la coloration d’un code.

3-C - Personnalisez la coloration

En fait, on a deux possibilités :

- Premièrement, on peut jouer sur les CSS (voir code.css), il y a une quinzaine de marqueurs différents. Ce fichier css contient une coloration syntaxique générique et les colorations spécifiques. Voici la coloration générique :

Coloration générique

/*Coloration générique*/
.keyword1 {
font-weight: bold;
color: #7F0055;
}

.keyword2 {
color: #0033FF;
}

.keyword3 {
color: #FF8040;
}

.keyword4 {
font-weight: bold;
color: #3366CC;
}

.function,.markup {
color: navy;
}

.operator {
color: #7F0055;
}

.label {
color: olive;
}

.digit{
color: red;
}

.comment1 {
color: #3f7f5f;
}

.comment2 {
color: #999999;
}

.comment3 {
color: #3f5fbf;
}

.comment4 {
font-style: italic;
color: #000080;
}

.literal1 {
color: #2a00ff;
}

.literal2 {
color: teal;
}

Pour rajouter une coloration spécifique à votre langage, trois étapes :

1. Créez votre propre feuille de style et demandez son inclusion dans code.css. Par exemple :

Coloration générique

/*Coloration langage java */
.java_keyword1 {
font-weight: bold;
color: #7F0055;
font-style: italic;
}

.java_keyword2 {
color: #0033FF;
font-style: italic;
}

.java_keyword3 {
color: #FF8040;
font-style: italic;
}

.java_keyword4 {
font-weight: bold;
color: #3366CC;
font-style: italic;
}
/* etc .*/

1. Indiquez au kit, qu’il y a une coloration spécifique à mettre en place pour votre langage. Rajoutez le nom de votre langage dans le fichier $KIT_HOME/script/coloration/languages.properties au niveau de colorations.connues. Par exemple :

#Colorations spécifiques connues (pour lesquelles il y a des css spécifiques)
colorations.connues=java, truc, bidule

1. Prévenez les responsables du kit pour que ces modifications soient intégrées dans les autres formats (par exemple, il n’y a pas moyen d’intégrer une css pour les pdf, il faut donc coder tout ça dans les xsl).

Enfin, voilà, voilà, je pense qu’entre la centaine de langages déjà disponibles, la possibilité de rajouter facilement nos règles à des langages existants et les possibilités de changer la mise en page du tout, on est tranquille avec la coloration syntaxique pour quelques années :)

Je vous laisse découvrir les exemples de coloration syntaxique, et j’attends vos remarques, critiques, avis, coups de main, coup de tête, etc. ;)

4 - Langages déjà supportés par l’ancien système de coloration

4-A - Action script

ActionScript

on (release) {
//gestion des propriétés de la popup
//  variable .variable
getURL("javascript:MM_openBrWindow('intro.html','nomfenetre','width=500, height=370,"
"status=no,scrollbars=no,resizable=no,titlebar=no')");
Machin := variable +1  toto.variable;
}
function trim(s:String):String {
var nEspace:Number = 32; // Code représentant l’espace
var nBegin:Number = 0;
var nEnd:Number = s.length;
var c:Number = s.charCodeAt(nBegin) ;
while (c == nEspace) {
c = s.charCodeAt(++nBegin) ;
}
c = s.charCodeAt(nEnd-1); /* -1 car les index commencent à 0*/
while (c == nEspace) {
c = s.charCodeAt(--nEnd) ;
}
return s.substring(nBegin, nEnd+1); // +1 car le second paramètre est l’index du premier caractère /* test */ suivant la chaîne à extraire
}
var sAncienneChaine:String = "     Ceci est une chaine avec des espaces inutiles au début et à la fin      ";
var sltChaine:String = trim(sAncienneChaine);
trace("-> \""+sltChaine+"\" <-");
trace("**/*****************************************/**");
/*
*  Autre exemple
*/
this.createEmptyMovieClip("triangle_mc", 10);
triangle_mc._x = triangle_mc._y = 100;
drawTriangle(triangle_mc, 100, 0x99FF00, 100);

function drawTriangle(target_mc:MovieClip, sideLength:Number, fillColor:Number, fillAlpha:Number):Void {
var tHeight:Number = sideLength * Math.sqrt(3) / 2;
with (target_mc) {
beginFill(fillColor, fillAlpha);
moveTo(sideLength / 2, 0);
lineTo(sideLength, tHeight);
lineTo(0, tHeight);
lineTo(sideLength / 2, 0);
endFill();
}
}
/* // Fin */
trace(Stage.width + " " + triangle_mc._width);
// */

4-B - ASP , ASP.NET

asp

<%
' récupération du paramètre
idimage_get = Request.QueryString("idimage")

' création de la connexion à la base de données
Set conn = Server.CreateObject("ADODB.Connection")
' ouverture de la connexion
conn.Open chainedeconnexion ' chainedeconnexion est à préciser sui

' création de la requete
requete = "SELECT type_image, bin_image FROM images WHERE idimage=" & idimage_get

' exécution de la requête
Set rs = conn.Execute(requete)

' positionnement du content-type
Response.ContentType = rs("type_image")

' écriture du contenu du champ blob
Response.BinaryWrite(rs("bin_image"))

' fermeture et destruction de la connexion
conn.close
Set conn = Nothing
%>

aspnet

<asp:calendar id="Calendar1"  runat="server"
Width="47px" Height="40px">
<TodayDayStyle Font-Names="Arial" Font-Bold="True" ForeColor="Red"></TodayDayStyle>
<SelectorStyle Font-Names="Arial"></SelectorStyle>
<%Truc muche sldgj%>
<%-- UneLigne --%>
<DayStyle Font-Names="Arial" ForeColor="#006600"></DayStyle>
<DayHeaderStyle Font-Names="Arial" ForeColor="White" BorderColor="#006600"
BackColor="#006600"></DayHeaderStyle>
<!-- The big boss -->
<!-- The big
<OtherMonthDayStyle Font-Names="Arial" ForeColor="#006600" BorderColor="White"
BackColor="White"></OtherMonthDayStyle>
boss -->
<OtherMonthDayStyle Font-Names="Arial" ForeColor="#006600" BorderColor="White"
BackColor="White"></OtherMonthDayStyle>
<%-- The big
<OtherMonthDayStyle Font-Names="Arial" ForeColor="#006600" BorderColor="White"
BackColor="White"></OtherMonthDayStyle>
boss --%>
<OtherMonthDayStyle Font-Names="Arial" ForeColor="#006600" BorderColor="White"
BackColor="White"></OtherMonthDayStyle>
</asp:calendar>

4-C - Awk

awk

#! /usr/bin/awk -f

BEGIN {
FS="/"
}
{
path=""
for (i = 1; i < (NF); i++) {
path = path $i "/"
}
print path
}

4-D - Borland C++ , C , C++ , C#

bcb

// qlksfj
#define ssdfs\ fsdf \
sdfsdf sdfsdf  sdfsdf \ sdfsdf
fsdfsdf sdfsdf sdfsfd
// skfskjfhd
#define sùfsmdf
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton *Button;
Button = dynamic_cast <TButton *> (Sender);
if (Button == Button1)
ShowMessage("Butt\"on1");
else
if (Button == Button2)
ShowMessage("Button2");
else
ShowMessage("C’est louche");
Button->Caption = "Appuyé";
}

C

char c1, c2, c3, c4;
/* ..000001
sdfsdf
sdfs01 */

// skjfdhksjdhfks

c1 = 5; /* ..00000101 */
c2 = 4; /* ..00000100 */
c3 = c1 <<2; /* 00000101(c1) -> 00010100(c3)*/

if (a==b) {
x = 5;
} else {
x = 10;
}

C++

/* ..000001
sdfsdf
sdfs01 */
// en début de ligne
#define c // Machin
// commentaire
#endif
#endif
#endif
#endif
#endif
// commentaire

class Base {
public:
void a() { cout << "Base::a" << endl; }
virtual void b(); { cout << "Base::b" << endl; }
};

int main()
{
Base x;
x.a(); // affiche Base::a
x.b(); // affiche Base::b

// le cas intéressant
}

C#

// code en début
// Déclaration des variables
ArrayList CompteurXML = new ArrayList();
ArrayList CompteurSQL = new ArrayList();
/* ..0
000
01
00 */
// qlksfj
#define ssdfsfsdf
// skfskjfhd
#define sùfsmdf
string sNomTable = Table.TableName;

// CompteurXML contient maintenant la liste des champs de la table
// passée en paramètre (provenant du fichier XML)

for ( int i = 0; i < dsTableSQL.Tables[0].Rows.Count - 1; i++ )
{
object [] ligne = dsTableSQL.Tables[0].Rows[i].ItemArray;

}

4-E - CSS

css

/* définition du style de la police, et largeur du select */
select {
font-family : Courier ;
font-size : 10px ;
width : 200px;
}

/* élément de couleur bleue */
option.bl_eu
{
color : #0000FF ;
background-color :#00CCFF ;

background : blue url(img.png) ;
background-color : blue ;
background-image : url(img.png) ;

}

4-F - Delphi et Delphi pour .NET

delphi

// Propriétés scalaires avec valeur par défaut
type
TMonSet = set of #0..#31;

...

property MonEntier : integer read FMonEntier write FMonEntier default 1;
property MonSet : TMonSet read FMonSet write FMonSet default [#0, #10, #13];

delphi

// commentaire
{
Un commentaire sur
plusieurs lignes }
{$ une directive }
Var i:Integer;
<a href="lien.html?parametre1=valeur1&parametre2=valeur2">test</a>

(*
Et un autre
*)
begin
For i:=Onglet.PageCount-1 DownTo 0 Do
Begin
Onglet.ActivePageIndex:=i;
// En commentaire d ON ' euuuuuu
ShowMessage('Truc muche !'kqjhsd'jhkjh’’’’’’hghg’’’’hg'); // c’est un comment !
{ et un autre }
FileName:= 'Document.doc'; // ou 'Document.rtf'
URL ='http://toto.com';
End;
end;

delphi pour .NET

// commentaire
{
Un commentaire sur
plusieurs lignes }
{$ une directive }
Var i:Integer;
(*
Et un autre
*)
begin
For i:=Onglet.PageCount-1 DownTo 0 Do
Begin
Onglet.ActivePageIndex:=i;
// En commentaire d ON ' euuuuuu
ShowMessage('Truc muche !'kqjhsd'jhkjh''hghghg'); // c’est un comment !
{ et un autre }
FileName:= 'Document.doc'; // ou 'Document.rtf'
URL ='http://toto.com';
End;
end;

4-G - INI

ini

[EditeurXML]
Nouveau=
Recent0="C:\BRUNO\HTML\kit.4.0.17\documents\tables\tables.xml"
Recent1="C:\BRUNO\HTML\kit.4.0.17\documents\srcdelphi\srcdelphi.xml"
SommaireWidth=310
WINDOWSTATE=2
WIDTH=696
HEIGHT=480
LEFT=162
TOP=44
TimerMAJSommaire=1000

4-H - Java

java

// un comment en deb
public class MaClasse{
public static Map uneVariableStatique = new HashMap();
static{
/*      uneVariableStatique.put("une clef","une valeur");
uneVariableStatique.put("une autre clef","une autre http:// jshdjshd");*/
//etc un comment et import
uneVariableStatique.put("une clef","une http://valeur");
uneVariableStatique.put("une autre clef","une autr\"e valeur\\\"");
qal.declareImports("import com.unilog.data.Track");
import toto;
}

}

4-I - Javascript

JavaScript

variable1 = document.formulaire.champs1.value;
/*variable1 = 12 */
variable2 = "qhkjqhfkq";
/*variable2 = 20 */
total = variable1 + variable2;
/*total = 1220 */

4-J - Shell linux

linux

#!/bin/bash
export PATH=$PATH:.
# preparation du repertoire destination
prepareMainDirs html cache archives pdf
prepareGenDirs $1 html cache

echo " Application de la coloration syntaxique"
perl coloration.pl ../documents/$1/$1.xml ../ArtTmp.xml > buildart.log

echo " Construction des pages html"
#Ligne modifiée par sinarf pour générer les fichiers php pour la version online.
perl buildart.pl ./../ArtTmp.xml ./../html/$1/ ./../cache/$1/ $1

cd ./../html/
java -jar ./../script/lib/Zippeur.jar ./../archives/$1.zip $1
if test $? -ne 0; then
echo Echec lors de la creation du zip.
exit 1
else
echo ==OK==
fi
cp ../documents/$1/$1.xml ../html/$1/
#suppression du fichier temporaire.
rm ../ArtTmp.xml > buildart.log
xxd xxdxxd 'slfshldfhl'    anacron bison php
lkjlj "lkjlsjdf"  55 55.999 ddd555 -666 +777 sldfkjg
+999 lksfgh 555  `xc,;vnx;  xcvxcv `

shellscript

#!/bin/bash
export PATH=$PATH:.
# preparation du repertoire destination
prepareMainDirs html cache archives pdf
prepareGenDirs $1 html cache

echo " Application de la coloration syntaxique"
perl coloration.pl ../documents/$1/$1.xml ../ArtTmp.xml > buildart.log

echo " Construction des pages html"
#Ligne modifiée par sinarf pour générer les fichiers php pour la version online.
perl buildart.pl ./../ArtTmp.xml ./../html/$1/ ./../cache/$1/ $1

cd ./../html/
java -jar ./../script/lib/Zippeur.jar ./../archives/$1.zip $1
if test $? -ne 0; then
echo Echec lors de la creation du zip.
exit 1
else
echo ==OK==
fi
cp ../documents/$1/$1.xml ../html/$1/
#suppression du fichier temporaire.
rm ../ArtTmp.xml > buildart.log
xxd xxdxxd 'slfshldfhl'    anacron bison php
lkjlj "lkjlsjdf"  55 55.999 ddd555 -666 +777 sldfkjg
+999 lksfgh 555  `xc,;vnx;  xcvxcv `

4-K - Oracle

oracle

CREAte TABLE    hr.emp
(
empno    NUMBER(5)        PRIMARY KEY,
ename    VARCHAR2(15)    NOT NULL,
job    VARCHAR2(10),
mgr    NUMBER(5),
hiredate    DATE        DEFAULT sysdate,
sal    NUMBER(7,2),
com    NUMBER(7,2),
deptno    NUMBER(3)        NOT NULL
CONSTRAINT dept_fk REFERENCES hr.departments
(department_id)
)
TABLESPACE    tbs1
-- on prend tous les entiers de la table #n moins les entiers de la table #n pour
STORAGE
(
INITIAL        50K
NEXT        50K
MAXEXTENTS    10
PCTINCREASE    25
) ;

4-L - Autre

other

COPY *.* C:\TEMP\BACKUP

4-M - Perso

Coloration personnalisée

// quartier courant
soit Quarter de type TChartQuarter;
// informations de graphismes du quartier courant dans son état
soit Graphics de type TChartQuarterGraphics;
// angle de départ, de milieu et de fin du quartier
soient MinAngle, MidAngle et MaxAngle de type Single;
// points sur la circonférence correspondant aux angles
soient MinPt, MidPt et MaxPt de type TPoint;
// point sur lequel centrer le texte
soit TextPos de type TPoint;
// le texte à afficher dans le quartier
soit Text de type string;

4-N - PHP

php

<?php

${'variable_1'} = 'Premier essai';
$variable_2 = 'Second essai';

echo $varia

?>

str_replace("\\", "\\\"","/", $current_dir); // Utilisateurs de Windows, pens

<?php
error_reporting(E_ALL);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<?php
// Exemple de code PHP pour Ano
/*Merci de ne pas faire gaffe à ce code crade*/
/* C’est juste pour un test, donc ce sera horrible volontairement
pis d’abord, si vous être pas content, je vous dit "zut"
Inutile de chercher à exécuter ce code, il ne fait absolument rien... */

/*

En PHP, les blocs de commentaires commencent par /* et finissent par *\/.
Les lignes de code ci-dessous gèrent la connexion à la base :

$host = 'localhost';
$user = 'root';
$bdd = 'ma_base';
$passwd  = '';
mysql_connect($host, $user,$passwd) or die('erreur de connexion au serveur');
mysql_select_db($bdd) or die('erreur de connexion a la base de donnees');

si c’est pas mignon tout plein ça...
//*/

$id_temp = 2.234343;
$id_temp += .1454545;
$id_temp = $id_temp-1.254624;
$id_temp = $id_temp+1243423;

if (comment == FALSE) {
echo 'Error'.$myVar/*.' !!!!'*/;
}
$mot[0] = "toto c est le plus beau, et c est \"Monsieur\" toto, ";
$mot[0] = "toto c’, je veux afficher des // , des /* , et des */ dans ma chaine";
$mot[1] = $_GET['toto'];
$mot[1] = $_POST['toto'];
$mot[1] = $_SERVER['toto'];
$mot[1] = $_ENV['toto'];
$mot[1] = array_diff_uassoc(toto(ARRAY_Multisort(hw_Document_Attributes()));

$SQL_guillemet = "SELECT * FROM MA_TABLE WHERE ID = $id_temp AND MOT = '$mot[0]'";
$SQL_quote = 'SELECT TOTO FROM MA_TABLE WHERE ID = '.$id_temp.' AND MOT = \''.$mot[0].'\'';

class MySystemException extends Exception
{
/**
* @desc Constructeur
*/
public function __construct($msg, $code, $file, $line, $context)
{
$this->message = $msg;
$this->code = $code;
$this->line = $line;
$this->file = $file;
$this->context = $context;

parent::__construct($msg, $code);
}

/**
* @desc Affichage de l’erreur
*/
public function showError()
{
echo 'PHP a généré l\'erreur système suivante : ['.$this->code.' | '.
$this->getMessage().'] à la ligne '.
$this->line.' du fichier '.$this->file;

// $Mytrace contient le contexte de l’exception
// $this->context contient le contexte de l’erreur

$Mytrace = $this->getTrace();
//print_r($Mytrace);
if ( ! empty($Mytrace['1']['function'] ))
{
echo ' sur la fonction '.$Mytrace['1']['function'];
}
echo '<br /><br/>Contexte lors de l\'erreur :<br/><pre>';
print_r($this->context);
echo '</pre>';
}
}

4-O - PostGreSQL

postgresql

SELECT setval('ma_sequence',456);          -- on initialise ma_sequence à 456
SELECT nextval('ma_sequence');             -- on incremente la proobtenons 457
SELECT currval('ma_sequence');             -- on demande lanons 457

4-P - Python

python

def toHtml(self, htmlFile):
"""
Ecris dans un fichier HTML la transformation
du fichier XML.
Si True est retourné, c’est que tout c’est bien passé.
Si def est retourné, des erreurs se sont produites.
"""
if (os.path.exists(self.xslFile) == False):
print ('Le fichier XSL n\'existe pas')
return False
if (os.path.exists(self.xmlFile) == False):
print ("Le fichier XML n\'existe pas")
return False
if (os.path.exists(self.xslFile) == False):
print ('Le def XSL n\'existe pas')
return False
styuri = OsPathToUri(self.xslFile)
srcuri = OsPathToUri(self.xmlFile)

4-Q - SQL

SQL

-- Commentaire
/* ssfdf
sdfsdfsf SELECT
sdfsdfsd*/
SELECT * FROM TOTO WHERE TITI="ksjdhfskdjhf WHERE"
skdhf

4-R - VB , VB.NET

vb

dfdf " erkejr " ' Initialisats
Private Sub Form_Load()
' Initialisation de l’accès aux données
Dim MaBD As String
Dim i as Integer

MoyMax = Format(MoyMax / 12, "#0.0   " ddd " eee ")   ' commentaire " h

' Initialisation du graphique simple
MoyMax = Format(MoyMax / 12, "#0.0 ' ")  ' commentaire " tftftf " hghgg
MSChart1.AllowSelections = False    ' Interdit la sélection dans le graphe
MoyMax = Format(MoyMax / 12, "#0.0 ' ")  ' commentaire " tftftf " hghgg
MoyMax = Format(MoyMax / 12, "#0.0 ' ")  ' commentaire " tftftf " hghgg
End Sub

vbnet

' skdjfhskdfh
' sdkfsldkjfsldj
sdfs< ' sfsjldkfjsdf
Imports System
Imports System.Text.RegularExpressions

Dim s As String = "SELECT * FROM matable WHERE madate='aujourd'hui' AND flag=1"

Char &
NameSpace ExemplesRegEx &
Public Class Verification
Shared Sub Main()
Dim verif as Regex = new Regex("[0-9]{10}")
Dim numero as String = "0123456789"
Dim isNumero As Boolean = verif.IsMatch(numero)
If isNumero Then
Console.WriteLine("Le numéro de téléphone est valide ")
Else
Console.WriteLine("Le numéro de téléphone n’est pas valide ")
End If
End Sub
End Class
End NameSpace

4-S - XML

xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
<xiti>
<!-- compteur Dotnet-->
<alias>Dotnet</alias>
<logg_er>logv99</logg_er>
<id>12345</id>
</xiti>
</document>

<a href="lien.html?parametre1=valeur1&aparametre2=valeur2">test</a>
&jhgsjdgs; qsdlfhqsdf ; qsdfqsd  &dfdfd dfdf &#9999   &#9999; sjskdh

5 - Quelques-uns des nouveaux langages supportés

5-A - Ruby, RHTML

Ruby

class Carnet
def initialize
@personnes = []
end
def ajoute(personne)
@personnes.push(personne)
@personnes = @personnes.sort { |a, b| par_nom(a, b) }
end
def retire(personne)
@personnes.delete(personne)
end
def par_nom(a, b)
if a.prenom == b.prenom
a.nom <=> b.nom
else
a.prenom <=> b.prenom
end
end
end

RHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><%= @page_title %></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%= stylesheet_link_tag "main" %>
<%= javascript_include_tag :defaults %>
</head>

<body<% if @page_class %> class="<%= @page_class %>"<% end %>>

<% unless session[:user_id] %><%= render :partial => "generic/loginstuff" -%><% end %>

<div id="container">

<div id="header">
</div>

<% unless @message_override && @message_override == 1 %>
<%= render :partial => "generic/messageboxes" %>
<% end %>

<div id="main">
<%= yield %>
</div>

<div id="footer">
</div>

</div>

</body>
</html>

5-B - POV-Ray

POV-Ray

#include "colors.inc"
camera {
location <3, 1, -10>
look_at <3,0,0>
}
light_source { <500,500,-1000> White }
text {
ttf "timrom.ttf" "Hello world!" 1, 0
pigment { White }
}

5-C - Latex

Latex

\documentclass[a4paper, 11pt]{article}

\title{Exemple de document \LaTeX}
\author{Moi}

\begin{document}
\maketitle
$\sum_{n=1}^{+\infty}\frac{1}{n^2}=\frac{\pi^2}{6}$
\end{document}

5-D - Batch

Batch

@rem -----------------------------
@rem G?n?rateur d'articles
@rem -----------------------------
@echo off

@if "%OS%"=="" deltree /Y .\..\html\%1 >buildart.txt
@if not "%OS%"=="" rmdir /s /q .\..\html\%1 >buildart.txt
@if "%OS%"=="" deltree /Y .\..\cache\%1 >buildart.txt
@if not "%OS%"=="" rmdir /s /q .\..\cache\%1 >buildart.txt

@mkdir .\..\archives >>buildart.txt

@mkdir .\..\html >>buildart.txt
@mkdir .\..\html\%1 >>buildart.txt
@mkdir .\..\html\%1\fichiers >>buildart.txt
@mkdir .\..\html\%1\images >>buildart.txt

@mkdir .\..\cache >>buildart.txt
@mkdir .\..\cache\%1 >>buildart.txt
@mkdir .\..\cache\%1\fichiers >>buildart.txt
@mkdir .\..\cache\%1\images >>buildart.txt

@copy .\..\css\article.css .\..\html\%1 >>buildart.log
@copy .\..\images\*.* .\..\html\%1\images >>buildart.log
@copy .\..\documents\%1\fichiers\*.* .\..\html\%1\fichiers >>buildart.log
@copy .\..\documents\%1\images\*.*   .\..\html\%1\images >>buildart.log
@copy .\..\documents\%1\fichiers\*.* .\..\cache\%1\fichiers >>buildart.log
@copy .\..\documents\%1\images\*.*   .\..\cache\%1\images >>buildart.log

@echo applique la coloration syntaxique :
@perl coloration.pl .\..\documents\%1\%1.xml .\..\ArtTmp.xml >>buildart.log

@echo construction des pages HTML
@perl buildArt.pl .\..\ArtTmp.xml .\..\html\%1\ .\..\cache\%1 %1

rem  construction du zip pour consultation off-line
@cd .\..\html
if exist .\..\archives\%1.zip @del /s/q .\..\archives\%1.zip
java -jar .\..\script\lib\Zippeur.jar .\..\archives\%1.zip %1
@cd .\..\script

@copy .\..\documents\%1\%1.xml   .\..\html\%1 >>buildart.log

5-E - Coldfusion

ColdFusion

<html>
<head>
<title>Exemple de code ColdFusion inséré dans du code HTML</title>
</head>
<body>

<CFSET nb = 42>
<CFOUTPUT>Valeur de nb : #nb#</CFOUTPUT>
<CFQUERY NAME="ma_requete" DATASOURCE="ma_source">
SELECT prenom
FROM employes
WHERE prenom LIKE 'J%'
ORDER BY prenom ASC
</CFQUERY>

Nombre d'employés : <CFOUTPUT>#ma_requete.recordcount#</CFOUTPUT><br>
<CFOUTPUT QUERY="ma_requete">
Prénom : #ma_requete.prenom#<br>
</CFOUTPUT>

</body>
</html>

5-F - Ocaml

ocaml

(* Le parcours *)
(*
g correspond au graphe,
aetevisite est la liste des sommets visité
avisiter sont les sommets à visiter
fAjout la fonction
fTraitement la fonction qui traite le sommet
*)
let rec parcours g aetevisite avisiter fAjout fTraitement =
match avisiter with
[] -> ()
|sommetCourant::reste ->
if (isinListe aetevisite sommetCourant) then
parcours g aetevisite reste fAjout fTraitement
else
begin
fTraitement sommetCourant;

let voisins = getVoisins g sommetCourant
in

let resteavisiter = fAjout reste voisins
in

let cequiaetevisite = sommetCourant::aetevisite
in

parcours g cequiaetevisite resteavisiter fAjout fTraitement
end
;;

5-G - Makefile

makefile

DEBUG=yes
CC=gcc
ifeq ($(DEBUG),yes)
CFLAGS=-Wall -ansi -g
LDFLAGS=-Wall -ansi -g
else
CFLAGS=-Wall -ansi
LDFLAGS=-Wall -ansi
endif
EXEC=hello
SRC= $(wildcard *.c)
OBJ= $(SRC:.c=.o)

all: $(EXEC)

ifeq ($(DEBUG),yes)
@echo "Génération en mode debug"
else
@echo "Génération en mode release"
endif

hello: $(OBJ)
@$(CC) -o $@ $^ $(LDFLAGS)

main.o: hello.h

%.o: %.c
@$(CC) -o $@ -c $< $(CFLAGS)

.PHONY: clean mrproper

clean:
@rm -rf *.o

mrproper: clean
@rm -rf $(EXEC)

5-H - Assembleur x86

assembly-x86

Org     0;

Jmp     Start

;---------------------;
; Programme principal ;
;---------------------;
Start:
Cli
Mov     Ax,07C0h
Mov     Ds,Ax
Mov     Es,Ax
; Initialisation de la pile ici
Sti

; Programme de boot proprement dit...
Hang:
Jmp Hang

End.:

;--- 00 jusqu'à 510 ---
times 510

5-I - Ada95

Ada95

declare
type Global is access Server;        --  see 9.1
A, B : Server;
G    : Global;
begin
--  activation of A and B
declare
type Local is access Server;
X : Global := new Server;  --  activation of X.all
L : Local  := new Server;  --  activation of L.all
C : Server;
begin
--  activation of C
G := X;  --  both G and X designate the same task object
...
end;  --  await termination of C and L.all (but not X.all)
...
end;  --  await termination of A, B, and G.all

5-J - ANTLR

ANTLR

set
{ Vector ids=null; }  // init-action
:  "(" ids=idList ")"
;
idList returns [Vector strs]
{ strs = new Vector(); }   // init-action
:  id:ID
{ strs.appendElement(id.getText()); }
(
"," id2:ID
{ strs.appendElement(id2.getText()); }
)*
;

5-K - Apache conf

Apache conf

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to point the LockFile directive
# at a local disk.  If you wish to share the same ServerRoot for multiple
# httpd daemons, you will need to change at least LockFile and PidFile.
#
ServerRoot "/opt/lampp"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
#LoadModule dbd_module modules/mod_dbd.so
LoadModule bucketeer_module modules/mod_bucketeer.so

<IfDefine JUSTTOMAKEAPXSHAPPY>
LoadModule php4_module        modules/libphp4.so
LoadModule php5_module        modules/libphp5.so
</IfDefine>

<IfModule !mpm_winnt_module>
<IfModule !mpm_netware_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User nobody
Group nogroup
</IfModule>
</IfModule>

# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#

#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.  e.g. admin@your-domain.com
#
ServerAdmin you@example.com

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
# XAMPP
ServerName localhost

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/opt/lampp/htdocs"

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
#XAMPP
#Order deny,allow
#Deny from all
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/opt/lampp/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
#Options Indexes FollowSymLinks
# XAMPP
Options Indexes FollowSymLinks ExecCGI Includes

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
#AllowOverride None
# since XAMPP 1.4:
AllowOverride All

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

</Directory>

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
#DirectoryIndex index.html
# XAMPP
DirectoryIndex index.html index.html.var index.php index.php3 index.php4
</IfModule>

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
</FilesMatch>

#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog logs/error_log

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here.  Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
CustomLog logs/access_log common

#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog logs/access_log combined
</IfModule>

# XAMPP
<IfDefine SSL>
Include etc/extra/httpd-ssl.conf
</IfDefine>
</IfModule>
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

# XAMPP
Include etc/extra/httpd-xampp.conf

5-L - Aspect J

Aspect J

aspect SetsInRotateCounting {
int rotateCount = 0;
int setCount = 0;

before(): call(void Line.rotate(double)) {
rotateCount++;
}

before(): call(void Point.set*(int))
&& cflow(call(void Line.rotate(double))) {
setCount++;
}
}

5-M - Eiffel

Eiffel

indexing
description: "[
Counters that you can increment by one,
decrement, and reset
]"
class
COUNTER

feature -- Access

item: INTEGER
-- Counter's value.

feature -- Element change

increment is
-- Increase counter by one.
do
item := item + 1
end

decrement is
-- Decrease counter by one.
do
item := item - 1
end

reset is
-- Reset counter to zero.
do
item := 0
end

end -- class COUNTER

5-N - Cobol

Cobol

000001 IDENTIFICATION D5ISION.
program-id. progtele.
author. M. Billaud.
date-written. 8/02/1998.
000005
*
* consultation du programme tele de la semaine.
*
* - realise avec Personal Cobol (Microfocus)
000010

ENVIRONMENT D5ISION.
INPUT-OUTPUT SECTION.
file-control.
000015     select F-FILMS assign to "semaine.txt"
organization line sequential.

DATA D5ISION.
000020 FILE SECTION.

fd F-FILMS.
01 F-ENR.
02 JOUR       pic XXX.
000025     02 CHAINE     pic XXXX.
*    heure de debut et duree en minutes
02 HHMM       pic 9999.
02 DUREE      pic 999.
*    titre
000030     02 TITRE      pic X(60).

WORKING-STORAGE SECTION.

* constantes definies par commodite.
000035 77  VRAI          pic X   value "V".
77  FAUX          pic X   value "F".

77  FIN-MENU      pic X.
77  FIN-FICHIER   pic X.
000040
77  CHOIX-MENU    pic X.

01  LIGNE-AFFICHAGE.
02            pic XX  value "* ".
000045     02 JOUR       pic XXX.
02            pic X   value " ".
02 CHAINE     pic X(4).
02            pic XXX value " | ".
02 HHMM       pic Z9B99.
000050     02            pic X   value " ".
02 TITRE      pic X(30).
02            pic XX  value " |".

01  LIGNE-ETOILES pic X(50) value all "*".
000055
77  JOUR-CHOISI   pic X(3).
77  NB-FILMS      pic 999.

000060 PROCEDURE D5ISION.
PRINCIPALE SECTION.
DEBUT.
display "hello".
move FAUX to FIN-MENU.
000065     perform MENU until FIN-MENU = VRAI.
stop run.

MENU.
display "Films de la semaine"
000070       display " ".
display "T. Tous les films"
display "J. Films d’un jour"
display "C. Films d’une chaine"
display "H. Recherche par heure de debut"
000075       display "Q. Quitter".
display " "
display "Votre choix ?"
accept CHOIX-MENU
evaluate CHOIX-MENU
000080       when "T"
when "t"
perform EDITER-TOUS-FILMS
when "J"
when "j"
000085             perform EDITER-JOUR
when "C"
when "c"
perform EDITER-CHAINE
when "H"
000090       when "h"
perform RECHERCHER-HORAIRE
when "Q"
when "q"
move VRAI to FIN-MENU
000095       when other
display "Choix invalide"
end-evaluate.

EDITER-TOUS-FILMS.
000100     move FAUX to FIN-FICHIER.
open input F-FILMS.
display LIGNE-ETOILES.
move 0 to NB-FILMS.
perform until FIN-FICHIER = VRAI
000105        move SPACES to F-ENR
read F-FILMS
at end
move VRAI to FIN-FICHIER
not at end
000110           add 1 to NB-FILMS
perform AFFICHER-ENREGISTREMENT
end-read
end-perform.
close F-FILMS.
000115     display LIGNE-ETOILES.
display NB-FILMS " films trouves.".
display " ".

AFFICHER-ENREGISTREMENT.
000120     move CHAINE of F-ENR to CHAINE of LIGNE-AFFICHAGE.
move JOUR   of F-ENR to JOUR   of LIGNE-AFFICHAGE.
move HHMM   of F-ENR to HHMM   of LIGNE-AFFICHAGE.
move TITRE  of F-ENR to TITRE  of LIGNE-AFFICHAGE.

000125     display LIGNE-AFFICHAGE.

EDITER-JOUR.
display "Quel Jour ? (3 premieres lettres majuscules)".
accept JOUR-CHOISI.
000130
move FAUX to FIN-FICHIER.
open input F-FILMS.
move 0 to NB-FILMS.
display LIGNE-ETOILES.
000135     perform until FIN-FICHIER = VRAI
move SPACES to F-ENR
read F-FILMS
at end
move VRAI to FIN-FICHIER
000140        not at end
if JOUR-CHOISI = JOUR of F-ENR
then
add 1 to NB-FILMS
perform AFFICHER-ENREGISTREMENT
000145           end-if
end-read
end-perform.
close F-FILMS.
display LIGNE-ETOILES.
000150     display NB-FILMS " films trouves pour le jour "
JOUR-CHOISI.
display " ".

EDITER-CHAINE.
000155           display "* EDITER-CHAINE : A completer".

RECHERCHER-HORAIRE.
display "* RECHERCHER-HORAIRE : A completer".

5-O - Fortran

Fortran

PROGRAM DEGRAD
!
! Imprime une table de conversion degrés -> radians
! =================================================
!
! Déclaration des variables
INTEGER DEG
REAL RAD, COEFF
!
! En-tête de programme
WRITE ( *, 10)
10 FORMAT      (' ',20('*') /                                        &
&             ' * Degres * Radians *' /                            &
&             ' ', 20('*') )
!
! Corps de programme
COEFF = (2.0 * 3.1416) / 360.0
DO DEG = 0, 90
RAD = DEG * COEFF
WRITE ( *, 20) DEG, RAD
20 FORMAT         (' *  ',I4,'  * ',F7.5,' *')
END DO
!
! Fin du tableau
WRITE ( *, 30)
30 FORMAT      (' ',20('*') )
!
! Fin de programme
STOP
END PROGRAM DEGRAD

5-P - Frremarker

Freemarker

<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

5-Q - Erlang

Erlang

-module(ball).

%% to run this program
%% redefine the OTHERNODE macro
%%  > c(ball).
%%  > ball:install_code().
%%  > ball:run().

%% redefine this macro to your nodename
-define(OTHERNODE, x@yuck).

-export([install_code/0, run/0, internal/1]).

%% install_code() sends the code over the network
%% to my windows machine
install_code() ->
install_code(?MODULE).

install_code(Mod) ->
ObjectPath = code:which(Mod),
{ok, Bin} = file:read_file(ObjectPath),
rpc:call(?OTHERNODE, code, load_binary,  [Mod, ObjectPath, Bin]).

run() ->
Me    = spawn(?MODULE, internal, [true]),
Other = spawn(?OTHERNODE, ?MODULE, internal, [false]),
Me    ! Other,
Other ! Me.

internal(Tag) ->
etk:start(),
Top = etk:toplevel([]),
etk:wm([geometry, Top, "155x125+100+100"]),
Canvas = etk:canvas(Top, []),
etk:pack([Canvas, {fill,both},{expand,yes}]),
Self = self(),
B = etk:button(Canvas, [{text, "Click to kill"},
{command, fun() -> Self ! quit end}]),
etk:cmd(Canvas, [create,window,75,25,{window, B}]),
receive
Pid ->
link(Pid),
loop(Tag, Canvas, Pid)
end.

loop(true, Canvas, Pid) ->
%% I got the tag create the ball
etk:cmd(Canvas,[create, oval, 50,50,100,100,
{fill,red},{tag,x}]),
receive
quit -> exit(die);
Other -> io:format("uugh:~p~n",[Other])
after 2000 ->
%% on timeout kill the ball
etk:cmd(Canvas, [delete, x]),
%% send a message to the other guy to create the ball
Pid ! show,
loop(false, Canvas, Pid)
end;
loop(false, Canvas, Pid) ->
receive
quit ->
exit(die);
show ->
loop(true, Canvas, Pid)
end.

5-R - Groovy

Groovy

class Greet {
def name
Greet(who) { name = who[0].toUpperCase() + who[1..-1] }
def salute() { println "Hello $name!" }
}

g = new Greet('world') // create object
g.salute() // Output "Hello World!"

5-S - JSP

jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%--
The taglib directive below imports the JSTL library. If you uncomment it,
you must also add the JSTL library to the project. The Add Library... action
on Libraries node in Projects view can be used to add the JSTL 1.1 library.
--%>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
--%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>

<h1>JSP Page</h1>
<br/>
<a href="./faces/purchaseOrder/List.jsp">List of PurchaseOrder</a>
<br/>
<a href="./faces/productCode/List.jsp">List of ProductCode</a>
<br/>
<a href="./faces/product/List.jsp">List of Product</a>
<br/>
<a href="./faces/microMarket/List.jsp">List of MicroMarket</a>
<br/>
<a href="./faces/manufacturer/List.jsp">List of Manufacturer</a>
<br/>
<a href="./faces/discountCode/List.jsp">List of DiscountCode</a>
<br/>
<a href="./faces/customer/List.jsp">List of Customer</a>
<br/>
<a href="./faces/welcomeJSF.jsp">JavaServer Faces Welcome Page</a>

<%--
This example uses JSTL, uncomment the taglib directive above.
To test, display the page like this: index.jsp?sayHello=true&name=Murphy
--%>
<%--
<c:if test="${param.sayHello}">
<!-- Let's welcome the user ${param.name} -->
Hello ${param.name}!
</c:if>
--%>

</body>
</html>

5-T - Lisp

assembly-x86

(defun reverse (l &optional (acc '()))
« renverse la liste l »
(if (null l)
acc
(reverse (cdr l) (cons (car l) acc))))

5-U - Objective C

Objective C

@interface Worker : NSObject
{
char *name;
@private
int age;
char *evaluation;
@protected
id job;
float wage;
@public
id boss;
}

5-V - Postscript

Postscript

%!PS
%% Une étoile
2 setlinewidth
%%
%% pour un angle d  (en degrés) trace un trait entre  (300,400)
%%      et (300 + 200 cos(d) , 400 + 300 sin(d))
/tracerayon {
300 400 moveto
dup dup cos 200 mul exch sin 200 mul rlineto
stroke
} def
%%
%% Boucle (variation de la variable de boucle de 0 à 360 par pas de 10)
0 10 360 {
tracerayon
} for
%%
showpage

5-W - Propriétés

Props

hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = net.sf.hibernate.dialect.PostgreSQLDialect

5-X - Relax NG

Relax NG

# A RELAX NG compact syntax pattern
# for an address book.
element addressBook {
# an entry in the address book
element card {
element name { text },
element email { text }  # an email address
}*
}

5-Y - Smalltalk

smalltalk

| rectangles aPoint|
rectangles := OrderedCollection
with: (Rectangle left: 0 right: 10 top: 100 bottom: 200)
with: (Rectangle left: 10 right: 10 top: 110 bottom: 210).
aPoint := Point x: 20 y: 20.
collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].

5-Z - XSL

XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes" indent="no" encoding="ISO-8859-1"/>
<xsl:template match="code" mode="code">

<xsl:choose>
<xsl:when test="count(./ligne)>0">
<ol style="overflow: auto;" id="contenuCode{generate-id(.)}">
<xsl:call-template name="create-empty-lines">
<xsl:with-param name="nbLignes" select="./ligne/@num"/>
</xsl:call-template>
<xsl:apply-templates select="./ligne" mode="code"/>
</ol>
</xsl:when>
<xsl:otherwise>
<pre id="contenuCode{generate-id(.)}"><xsl:apply-templates select="./* | text()" mode="code"/></pre>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="*" mode="code">
<xsl:if test="not(name(.) = 'code') and not(name(.) = 'ligne')">
<xsl:element name="span">
<xsl:attribute name="class"><xsl:value-of select="name(.)"/></xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:if>
</xsl:template>

<xsl:template match="ligne" mode="code">
<li class="ligne_code"><pre><xsl:apply-templates select="./* | text()" mode="code"/><xsl:value-of select="' '"/></pre></li>
</xsl:template>

<xsl:template name="create-empty-lines">
<xsl:param name="nbLignes"/>
<xsl:if test="$nbLignes>1">
<li class="ligne_code_vide"></li>
<xsl:call-template name="create-empty-lines">
<xsl:with-param name="nbLignes" select="$nbLignes - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

6 - Téléchargements

Modifications : petite description de l’ensemble des modifications à apporter pour monter le kit avec le nouveau système à partir d’une version 5.9 du kit.
Quick diff : liste détaillée des fichiers créés/modifiés/supprimés
Diff complet : liste détaillée des fichiers créés/modifiés/supprimés + description des modifications
Kit modifié : version du kit prête à essayer.
Sources API coloration : code source java