Seite 7 von 9
					
				Re: Documentation Comment
				Verfasst: 30.08.2019 11:02
				von RSBasic
				Ich vergleiche heute Abend dein Code mit meinem Code. Da fehlt vielleicht ein SendMessage_()
Danke für dein Beispiel.
\\Edit:
Oder es hat was damit zu tun mit dem Ermitteln der summary-Tags, weil der Link ja abgeschnitten wird. Das war damals nicht so. Ich werde es prüfen.
			 
			
					
				Re: Documentation Comment
				Verfasst: 02.09.2019 12:27
				von RSBasic
				Hi HeX0R,
mein Code ist genauso aufgebaut wie dein Beispielcode.
Der einzige Unterschied, dass ich SetGadgetText() benutze, um RTF-Formate benutzen zu können.
Man kann auch mit deinem Beispielcode das Problem nachstellen:
Code: Alles auswählen
Procedure NewUpdateWindow_CallBack(Window, Msg, wparam, lparam)
   Protected StringBuffer.s, *el.ENLINK, txt.TEXTRANGE, w, h
   Select Msg
      Case #WM_NOTIFY
         *el = lParam
         If *el\nmhdr\idFrom = 0
            If *el\nmhdr\code = #EN_LINK
               If *el\msg = #WM_LBUTTONDOWN
                  StringBuffer   = Space(1024)
                  txt\chrg\cpMin = *el\chrg\cpMin
                  txt\chrg\cpMax = *el\chrg\cpMax
                  txt\lpstrText  = @StringBuffer
                  SendMessage_(*el\nmhdr\hwndFrom, #EM_GETTEXTRANGE, 0, txt)
                  If StringBuffer
                     Debug StringBuffer
                  EndIf
               EndIf
            EndIf
         EndIf
   EndSelect
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0, 0, 0, 800, 500, "", #PB_Window_SystemMenu)
SetWindowCallback(@NewUpdateWindow_CallBack(), 0)
EditorGadget(0, 0, 0, 800, 500, 0)
SendMessage_(GadgetID(0), #EM_SETEVENTMASK, 0, SendMessage_(GadgetID(0), #EM_GETEVENTMASK, 0, 0) | #ENM_LINK)
SendMessage_(GadgetID(0), #EM_AUTOURLDETECT, #True, 0)
;SetGadgetText(0, "Get attribute file:///D:\Programmierung\forumbeschr.txt valueaaaaaaa of a comment")
SetGadgetText(0, "{\rtf1{\colortbl ;\red0\green100\blue0;}{Ergebnis = LogString(): beschreibung file:///D:\Programmierung\forumbeschr.txt beschreibung2\par}{     abc\par}{Ergebnis: def\par}{Beispiel: \cf1 ghi \cf0 \par}}")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Der Pfad wird von RTF falsch interpretiert bzw. die Backslashes müssen escapted werden, damit der Pfad korrekt angezeigt werden kann.
Ich habe das Escapen eingebaut. Version kommt gleich.
 
			 
			
					
				Re: Documentation Comment
				Verfasst: 02.09.2019 12:38
				von RSBasic
				Documentation Comment 1.0.9 wurde veröffentlicht.
Changelog:
- Bugfix: Dateiverlinkungen (file:///...) werden jetzt korrekt angezeigt und geöffnet.
 
 
			 
			
					
				Re: Documentation Comment
				Verfasst: 02.09.2019 21:43
				von HeX0R
				O.k., dass Du RTF direkt nutzt war mir nicht bewusst, jetzt verstehe ich auch die ganze Diskussion.
Danke für das Update, läuft wie geschmiert nun!
			 
			
					
				Re: Documentation Comment
				Verfasst: 10.09.2019 11:37
				von hjf
				Hallo RSBasic,
mir ist beim Einsatz des Tools folgendes aufgefallen:
- In der 1. Zeile des PopUps steht "Ergebnis = Name()". Hat diese Proc aber keinen Rückgabewert,
  dann sollte das "Ergebnis =" auch nicht angezeigt werden. Die <Return>Zeile könnte dann auch
  automatisch ignoriert werden.
- Bei einem Quellfile mit ca. 3000 Zeilen generiert das Tool mehrere Sekunden Vollast auf eine CPU-Kern
  (ein Phenom mit 4x3,2GHz). Man hört am CPU-Lüfter, der CPU-Takt ist dann fast dauernd oben.
  Beim Arbeiten an einem Notebook (i7 7500U), schon garnicht im Akkubetrieb, das Gleiche. Nicht wirklich zu gebrauchen.
  Monitort man die CPU-Temperatur oder auch akustisch den Lüfter, dann ist das Verhalten mit zunehmender
  Größe der Files gut zu erkennen. Ohne das Tool habe ich hier um die 35°C CPU-Temp., bei dem o.g. File werden
  es dann 60°C (dann kommt der Lüfter).
  Das Parsen scheint nicht effizient genug zu laufen, schade.
hjf
			 
			
					
				Re: Documentation Comment
				Verfasst: 10.09.2019 11:43
				von RSBasic
				hjf hat geschrieben:- In der 1. Zeile des PopUps steht "Ergebnis = Name()". Hat diese Proc aber keinen Rückgabewert,
dann sollte das "Ergebnis =" auch nicht angezeigt werden. Die <Return>Zeile könnte dann auch
automatisch ignoriert werden.
Ich kann gerne so machen, dass "Ergebnis = " nur dann angezeigt wird, wenn der Return-Kommentar angegeben wurde.
Ich könnte zwar zusätzlich nach "ProcedureReturn" suchen, aber das würde die Performance noch etwas verschlechtern.
hjf hat geschrieben:- Bei einem Quellfile mit ca. 3000 Zeilen generiert das Toll mehrere Sekunden Vollast auf eine CPU-Kern
Ich werde ein paar Einstellungen bereitstellen, mit denen man etwas an der Performance des Parsers herumschrauben kann.
Version kommt später. Danke fürs Testen.
 
			 
			
					
				Re: Documentation Comment
				Verfasst: 10.09.2019 16:55
				von Sicro
				Ein paar Ideen:
- Das Tool nur beim Laden und Speichern des Codes ausführen
 
- Content_Changed-Event vom PB-IDE-Scintilla abfangen und das Tool nur ausführen, wenn eine gewisse Zeit der Code unverändert geblieben ist
 
- Geänderte Code-Bereiche lokalisieren und nur diese erneut parsen
 
- maxTokenValueLength=1000 herabsetzen, z. B. 150 reicht in dem Fall bestimmt auch (d. h. Procedure-Name: max. 150-Zeichen, Kommentare: max. 149-Zeichen)
 
- Das Parsen auf mehrere Threads verteilen
 
 
			 
			
					
				Re: Documentation Comment
				Verfasst: 14.09.2019 11:05
				von RSBasic
				Documentation Comment 1.1.0 wurde veröffentlicht.
Changelog:
- Geändert: Wenn kein "<return>" angegeben wurde, dann wird auch kein "Ergebnis = " vor dem Prozedurnamen angezeigt.
 
- Optimiert: Maximale Token-Länge wurde von 1000 auf 250 Zeichen für das Lesen der Prozedurnamen und Kommentare reduziert.
 
- Optimiert: Summary-Kommentare werden jetzt nicht mehr alle 3 Sekunden ermittelt, sondern nur, wenn die Datei sich geändert hat.
 
@hjf
Kannst du es nochmal testen? Dein Prozessor müsste mit dieser Version nicht mehr dauerhaft überlastet sein, sondern nur einmal kurz, wenn die den Tab wechselst oder die PB-Datei speicherst.
@Sicro
Danke für den Tipp mit dem maxTokenValueLength.
 
			 
			
					
				Re: Documentation Comment
				Verfasst: 14.09.2019 12:46
				von Sicro
				Code: Alles auswählen
;<comment>
;  <summary>Meine Funktionsbeschreibung...</summary>
;  <param>Parameter1: Beschreibung des ersten Parameters</param>
;  <param>Parameter2: Beschreibung des zweiten Parameters</param>
;  <param>Parameter3: Beschreibung des dritten Parameters</param>
;  <return>Beschreibung des Rückgabewertes</return>
;  <example>MeineFunktion(1, 2, "Hello")</example>
;</comment>
Procedure MeineFunktion(Parameter1, Parameter2.i, Parameter3.s)
    ;...
EndProcedure
Ist die Verwendung von 
Doxygen-Dokumentationskommentaren nicht viel klarer zu lesen:
Code: Alles auswählen
; @BRIEF Meine Funktionsbeschreibung...
; @PARAM Parameter1 Beschreibung des ersten Parameters
; @PARAM Parameter2 Beschreibung des zweiten Parameters
; @PARAM Parameter3 Beschreibung des dritten Parameters
; @RETURN Beschreibung des Rückgabewertes
; @EXAMPLE MeineFunktion(1, 2, "Hello")
;
Procedure MeineFunktion(Parameter1, Parameter2.i, Parameter3.s)
    ;...
EndProcedure
Wir könnten auch beide Varianten unterstützen.
 
			 
			
					
				Re: Documentation Comment
				Verfasst: 14.09.2019 21:53
				von SDL
				Hallo
wenn ich folgendes verwende:
Code: Alles auswählen
;<comment>
; <summary> Ermittelt ob ein Programm schon gestartet ist/ Autor:  PureLust </summary>
; <param> AppInstanceExists() </param>
; <return> #True/#False </return>
; <example> AppInstanceExist() </example>
; http://www.purebasic.fr/german/viewtopic.php?p=260173#p260173
;</comment>
wird der Link nicht angezeigt. Fehler oder Käfer?
PB 5.70 Win 7pro / DC 1.1.0