[source]class wikiparser parser/parseur(analyseur syntaxique) modele/template wikitext/wikicode
Classe VB parse un modéle wikitexte (plus d'info liens si dessous)
http://fr.wikipedia.org/wiki/Wikitexte
http://fr.wikipedia.org/wiki/Aide:Sy...un_mod.C3.A8le
usage
Code:
1 2 3 4 5 6 7
|
set p= New wikiparser
if p.parse({{nom_modele|param1|nom_param2=param2|param3}}) then
debug.print p.name ' affiche nom_modele
debug.print p.param(3) ' renvoie param3
debug.print p.param("nom_param2") ' renvoie param2
end if |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
'class wikiparser
Private cName As String
Private cParams As New Collection
Public Function Parse(Template As String) As Boolean
Dim sTemplate As Variant, equalPos As Integer, i As Integer, nb_brakets1 As Integer, nb_brakets2 As Integer
If Left(Template, 2) <> "{{" Or Right(Template, 2) <> "}}" Then
Parse = False 'modele malformé
Else
Template = Mid(Template, 3, Len(Template) - 4)
sTemplate = Split(Template, "|")
cName = sTemplate(0)
nb_brakets1 = 0
nb_brakets2 = 0
token = ""
For i = 1 To UBound(sTemplate)
DoEvents
token = token & sTemplate(i)
nb_brakets1 = Len(token) - Len(Replace(token, "{{", ""))
nb_brakets2 = Len(token) - Len(Replace(token, "}}", ""))
If nb_brakets1 = nb_brakets2 Then
equalPos = InStr(token, "=")
If equalPos > 0 Then ' si parametre nommé
On Error Resume Next
cParams.Add Right(token, Len(token) - equalPos), Left(token, equalPos - 1)
Else
cParams.Add token
End If
token = ""
Else 'modele imbriqué du style {{modele1|param1modele1|{{modele2|param1modele2}}|param2modele1}}
token = token & "|"
End If
Next i
Parse = True
End If
End Function
Public Property Get Name() As String 'proprité lecture seule renvoie le nom du modele
Name = cName
End Property
Public Property Get Param(index As Variant) As String 'proprité lecture seule renvoie le parametre du modele
Param = ""
On Error Resume Next
Param = cParams(index)
End Property |