Seite 7 von 8

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