Le dimanche 17 juin 2012 15:38:22 Benoît Minisini a écrit : > Le 12/06/2012 23:52, Adrien Prokopowicz a écrit : > > Hi, > > > > I noticed that the Higlight.Analyze() method doesn't like when the Gambas > > code > > hasn't spaces between operators, commas and a few other ones. > > > > There is a good example of that problem here : > > http://www.gambasforge.org/wiki/testHighlight > > > > Maybe this behaviour is intended, in order to keep Gambas code clean, but I > > haven't found any function to add these spaces, like in the IDE. > > Do you know where I can find this ? > > > > Regards, > > Adrien. > > > > Do you have some code to show? Maybe you don't use the Analyze() method > correctly... > >
Here is the function that makes the conversion Gambas string -> html : Public Sub GambasToHtml(sValue As String) As XmlElement Dim sLignes, s, sCode As String Dim i, nbLignes, lenligne As Integer Dim sTypes As String[] = ["", "normal", "keyword", "function", "operator", "symbol", "number", "string", "comment", "", "", "datatype", "", "", "", "", "error", "help", "preprocessor"] Dim Positions, Types, Lengths As New Integer[] Dim lignes As String[] Dim tableau As New HtmlTable Dim elmt As XmlElement Dim conteneur As New XmlElement("code") If Not sValue Then Return 'sret = "<table class=\"code\"><tr><td class=\"numlignes\">" tableau.ClassName = "code" tableau[0, 0].ClassName = "numlignes" tableau[0, 1].ClassName = "code" tableau[0, 1].AppendChild(conteneur) sValue = Replace$(sValue, "\r\n", "\n") 'Compatibilité win/mac/linux sValue = Trim$(sValue) 'Espaces indésirables lignes = Split(sValue, "\r\n", "", False) For Each s In lignes Highlight.Analyze(s) If Highlight.Positions.Count = 0 Then conteneur.AppendText(s) conteneur.AppendFromText("<br />") 'sCode &= s & "<br />" Inc nbLignes Continue Endif Positions = Highlight.Positions Types = Highlight.Types Lengths.Clear() For i = 0 To Highlight.Symbols.Max Lengths.Push(Len(Highlight.Symbols[i])) Next lenligne = Len(s) For i = 1 To lenligne If Positions.Count <= 0 'sCode &= String.Mid(s, i, 1) conteneur.AppendText(Mid(s, i, 1)) Else If i = (Positions[0] + 1) 'sCode &= "<span class=\"" & sTypes[Types[0]] & "\">" & String.Mid$(s, Positions[0] + 1, Lengths[0]) & "</span>" elmt = New XmlElement("span") elmt.ClassName = sTypes[Types[0]] elmt.TextContent = Mid$(s, Positions[0] + 1, Lengths[0]) conteneur.AppendChild(elmt) i += (Lengths[0] - 1) Positions.Extract(0) Lengths.Extract(0) Types.Extract(0) ' Else If Mid$(s, i, 1) = " " ' 'sCode &= " " ' tableau[0, 1].AppendFromText(" ") Else 'sCode &= String.Mid$(s, i, 1) conteneur.AppendText(String.Mid(s, i, 1)) Endif Next 'sCode &= "<br />" conteneur.AppendFromText("<br />") Inc nbLignes Next For i = 1 To nbLignes sLignes &= (i & "<br />\n") Next tableau[0, 0].AppendFromText(sLignes) ' sCode = Replace$(sCode, "&", "&") ' sCode = Replace$(sCode, "<", "<") ' sCode = Replace$(sCode, ">", ">") ' sCode = RegexpReplace(sCode, "<(/?(span|br).*)>", "<&1>") ' sCode = Replace$(sCode, "&nbsp;", " ") ' sRet &= "</td><td class=\"code\">" ' sret &= sCode ' sRet &= "</td></tr></table>" ' Return XmlElement.FromText(sRet)[0] elmt = New XmlElement("div") elmt.ClassName = "code" elmt.AppendChild(tableau) Return elmt End The full code is available here : (svn checkout) https://gambasforge.svn.sourceforge.net/svnroot/gambasforge/trunk Regards, Adrien. ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user