INTRODUCTION |
HTML (Hyper Text Markup Language) est un langage de description de documents conçu pour les pages Web. Le rendu d’un site Web dans le navigateur, aussi complexe puisse-t-il paraître, est généré à partir d’un fichier texte ordinaire contenant un balisage (markup en anglais) marquant la structure du document en plus du texte visible. Ce balisage est constitué de paires de balises (tags en anglais) formées d’une balise ouvrante et d’une balise fermante. La balise ouvrante débute par un chevron < et se termine par son opposée > ; la balise fermante débute par </ et se termine par >. La structure de base d’un fichier texte HTML est constituée des balises <html> et <body> et de leur balise fermante correspondante. <html> <body> TigerJython Web-Site </body> </html> La casse des caractères formant les balises (majuscules ou minuscules) ainsi que les indentations et les retours à la ligne importent peu pour le rendu final du document. On aurait donc très bien pu obtenir le même résultat avec le fichier suivant qui n’est cependant pas recommandé puisqu’il est moins lisible et moins uniforme pour un humain.
|
QU’EST-CE QU’UNE CHAÎNE DE CARACTÈRES? |
Dans la plupart des programmes, particulièrement dans le contexte du Web, il faut un type de donnée capable de stocker du texte formé par un enchaînement de caractères individuels issu, par exemple, du clavier ou d’un fichier. Il est nécessaire de disposer également de certains caractères spéciaux permettant d’indiquer des retours à la ligne ou des tabulations. En Python, on utilise le type de donnée str pour stocker les chaînes de caractères. Le texte d’une chaine de caractères est placé entre guillemets simples ou doubles. Le texte d’une chaine de caractères peut être interprété comme une liste dont les éléments sont les caractères individuels qui le constituent. La plupart des opérations courantes sur les listes peuvent être utilisées sur les chaines de caractères à une différence importante près : On peut accéder aux caractères individuels d’une chaine de caractères par leur indice (parenthèses carrées), mais il n’est pas possible de modifier les caractères constituant les chaines par une affectation car les chaines de caractères sont un type immutable. Pour changer une chaine de caractères, il faut en fait en créer une nouvelle. En Python 2, les chaines de caractères sont représentées à l'interne par des caractères ASCII sur 8 bits. Si l'on préfixe la chaine de caractère par un u, comme dans u'chane de caractères', la représentation interne des caractères se fera alors dans l'encodage Unicode 16 bits, permettant d'inclure sans problème les caractères spéciaux et accentués. Les caractères individuels ne sont cependant pas représentés par un type particulier comme en C mais par une chaine de caractères de longueur 1. En Python 3, la représentation en Unicode sur 16 bits est celle adoptée par défaut. Le programme suivant définit un texte formatté en HTML et l’écrit sur la sortie standard. html = "<html><body>TigerJython Web Site</body></html>" print(html) On peut sans problème parcourir une chaine caractère à caractère en utilisant une boucle for et un indice : html = "<html><body>TigerJython Web Site</body></html>" for i in range(len(html)): print(html[i]) Il est cependant plus élégant d’utiliser une boucle for avec le mot-clé in pour en parcourir directement les éléments: html = "<html><body>TigerJython Web Site</body></html>" for c in html: print(c) Une chaine de caractères peut également contenir des caractères de contrôle spéciaux appelés séquences d’échappement qui débutent par un antislash (backslash en anglais). Parmi celles-ci, on compte notamment le retour à la ligne \n et la tabulation \t. Ces séquences permettent donc de créer la chaîne de caractères présentée tout en début de chapitre: html = "<html>\n <body>\n TigerJython Web Site\n </body>\n</html>" print(html) Il est possible de lire un texte depuis un fichier texte. Pour cela, créer un fichier welcome.html à l’aide de votre éditeur de texte favori dans le même dossier que votre programme Python, en y mettant le contenu suivant: <html> <body> <h1>TigerJython Web-Site</h1> Good morning </body> </html> On spécifie un titre de premier niveau avec la balise <h1>. Le programme suivant lit le fichier texte et stocke le contenu de ce dernier dans la chaine de caractères html qui est ensuite affichée sur la sortie standard html = open("welcome.html").read() print(html) |
MEMENTO |
Une chaine de caractères est un objet immutable constitué de caractères. On peut lire les caractères individuellement à l’aide de leur indice. Toutefois, toute tentative de modifier l’un des caractères de la chaine se soldera par une erreur (exception). En Python, contrairement à d’autres langages, il n’existe pas de type de donnée spécifique pour stocker les caractères individuels puisque des caractères isolés y sont considérés comme des chaines de caractères de longueur 1. On peut ouvrir des fichiers à l’aide de la fonction open() en spécifiant le chemin du fichier à ouvrir. Ce chemin peut être relatif au dossier contenant l’archive tigerjython2.jar ou absolu si on le préfixe d’un slash (dans Windows, il faut également spécifier une lettre pour identifier le lecteur). Par exemple:
Il est possible de joindre deux chaines de caractères avec l’opérateur + (concaténation). Il faut cependant que les deux opérandes soient réellement des chaînes de caractères. L’instruction >>> "pi = " + 3.1459 engendrera donc une erreur. Il faut en effet commencer par convertir le nombre 3.1459 en chaine de caractères en utilisant la fonction str(): >>> "pi = " + str(3.14159)
|
NAVIGATEUR WEB |
Le rôle le plus fondamental d’un navigateur Web est d’interpréter les balises HTML présentes dans un document HTML et d’en effectuer le rendu dans une fenêtre en respectant au mieux les informations de structure présentes dans le balisage HTML. On peut effectuer le rendu du fichier welcome.html sur le PC après avoir installé un navigateur (Firefox, Explorer, Chrome, Safari, Opera, etc.).
from ch.aplu.util import HtmlPane html = open("welcome.html").read() pane = HtmlPane() pane.insertText(html) |
MEMENTO |
Un navigateur Web interprète le balisage d’un document HTML et en effectue le rendu d’après les informations de structure contenues dans le HTML. HtmlPane ne connait que les balises HTML les plus courantes et fondamentales. Il n’est donc pas possible d’y afficher des documents HTML complexes. On peut également utiliser un objet HtmlPane pour afficher la sortie du programme dans une fenêtre séparée et avec une mise en forme moins austère que la simple console. |
HYPERLIENS |
La propagation explosive du web est essentiellement due au fait qu’un site Web peut contenir des éléments qui conduisent, par un simple clic de souris, à d’autres sites hébergé sur un autre serveur Web souvent situé à l’autre bout de la planète. Ces éléments sont appelés hyperliens (hyperlink en anglais) ou liens hypertextes et peuvent constituer un structure d’informations interconnectées, à la manière d’une toile d’araignée. Créer à nouveau un fichier welcome.html en y incluant la balise <a>. On y utilise également la balise <p> qui définit un nouveau paragraphe précédé par défaut d’un retour à la ligne. <html>
<body>
<h1>TigerJython Web-Site</h1>
<p>Good morning!</p>
<a href="http://www.tigerjython.ch/">TigerJython Home</a>
</body></html>
Pour rendre les hyperliens utilisables, il est nécessaire de définir une fonction de rappel linkCallback()(ou tout autre nom similaire) et d’enregistrer celle-ci avec le paramètre linkListener du constructeur HtmlPane(). Cette fonction de rappel sera donc automatiquement appelée lors d’un clic sur le lien, ce qui va faire naviguer le HtmlPane vers l’URL contenue dans l’attribut href de l’hyperlien. from ch.aplu.util import HtmlPane def linkCallback(url): pane.insertUrl(url) html = open("welcomex.html").read() pane = HtmlPane(linkListener = linkCallback) pane.insertText(html) |
MEMENTO |
Les hyperliens sont des références croisées dans un document permettant de sauter vers d’autres documents. Les documents liés constituent une fonctionnalité caractéristique du World Wide Web. Malheureusement, le rendu des pages Web n’est que partiel dans la fenêtre HtmlPane. Il est cependant possible d’utiliser le navigateur par défaut de la machine avec HtmlPane.browse() [plus... Notre programme lance donc un nouveau processus sur la machine en délégantune partie du travail au navigateur par défaut installé. En anglais, on dit "to spawn a new process"]]. from ch.aplu.util import HtmlPane HtmlPane.browse("www.tigerjython.com") |
EXERCICES |
|