Wikipedia:Lua/Werkstatt/Archiv/2022

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 2 Jahren von Vollbracht in Abschnitt Finde einen Fehler nicht
Zur Navigation springen Zur Suche springen

Technische Fragen zur Implementierung von Modul:Hiero/Cell

Zum Modul wurden im Vorhergendenen Abschnitt Probleme aufgeworfen, die weitgehend gelöst sind und deren Lösung in der Diskusion zur Lua-Dokumentation bearbeitet werden. Diesen Teil habe ich daher jetzt zur Archivierung ausgegliedert.

Ausgegliederter Text:

Und nun stehe ich auf dem Schlauch. Mit dem Modul Hiero/Cell wird das Modul Hiero/Cartouche genutzt, um Kartuschen und Namensbezeichnungen in Tabellenzellen zu schreiben. Mit Kartuschen funktioniert das auch. Die Anweisung
{{#invoke:Hiero/Cell|name|kind=Horus|code=N5-V30!C10!N5-F44!Z1|border=ltd|colspan=2}} 
führt zum gewünschten Ergebnis. Doch wenn ich
{{#invoke:Hiero/Cell|list|
Eigen {name {code{A5} } Wiki {Wikitext {No5} } }
Thron {name {code{A6} } Wiki {Wikitext {No6} } }
|de}}
aufrufe, wird an Stelle von Cartouche.Title die Funktion p.Title aufgerufen. Woran kann das liegen? --Vollbracht (Diskussion) 03:03, 6. Jan. 2022 (CET)
Ich habe es mir angesehen. Beim zweiten Bsp bricht das Programm in der Funktion Cell.list bei der Zeile local title = Cartouche.Title(v, language) ab. Die Fehlermeldung kommt aus Modul:Hiero/Cartouche, da Cartouche über pcall(require, "Modul:Hiero/Cartouche") definiert wird. Dort wird in der Funktion p.Title ein frame.args[1] gesucht, das es gar nicht gibt und das deshalb auch nicht mit nil verglichen werden kann. Vermutlich! Eine konkrete Antwort kann ich nicht geben. Mein Vorschlag wäre nicht das Modul:Hiero/Cartouche einzubinden, sondern eine Kopie und da p.Title auszukommentieren, um zu sehen ob dann Cartouche.Title aufgerufen werden kann. Ansonsten möchte ich Programming in Lua : 8.4 verlinken wo Error Handling and Exceptions von Lua besprochen wird. Vielleicht muss man in p.Title frame.args[1] mit pcall aufrufen? --Goldzahn (Diskussion) 08:45, 6. Jan. 2022 (CET)
Deine Vermutung stimmt auf jeden Fall. Aus Cell.list heraus sollte p.Title aber überhaupt nicht erkennbar sein. Dass er in dieser Funktion landet muss zwangsläufig zum Fehler führen, weil Cell.list als Parameter kein frame mitgibt. Dann hilft auch kein pcall.
Der Weg des geringsten Widerstandes wäre, jetzt die Funktionalität von Cartouche.Title nicht einzubinden, sondern direkt nach Cell.Title zu kopieren. Aber dann wüsste ich immer noch nicht, was ich mit der Einbindung falsch gemacht habe.
Der nächste Klops kommt gleich hinterher: Ich wollte mir das mit wm.log ansehen und da sagt der mir doch glatt, dass er wm nicht kennt. Irgendwas läuft hier mächtig schief.
Dir aber erst mal schon jetzt vielen Dank für Deine Mühe! --Vollbracht (Diskussion) 09:13, 6. Jan. 2022 (CET)

WM.log ist ein vertipper, das heißt richtig mw.log. Wegen Moduleinbindung: Dazu könnte etwas in den Hilfetexten stehen, Goldzahn (Diskussion) 09:55, 6. Jan. 2022 (CET)

Ich habe mir lua-users.org/wiki/ModulesTutorial angesehen: Nur eine Idee: Im Modul:Hiero/Cartouche ist die Funktion p.Title nicht local. Vielleicht wird sie deshalb beim Aufruf mitgeladen? Wie auch immer, mit Modulen habe ich keine Erfahrung. Goldzahn (Diskussion) 10:40, 6. Jan. 2022 (CET)
Vollbracht ich habe auf test.wikipedia.org die Module angelegt und in Module:Hiero/Cell die Funktion Cartouche.Title ins Modul genommen. Das hat funktioniert. Problem, dann klappt das mit dem Module:SimpleStruct nicht und Parser.parse(frame.args[1]) in Funktion p.list(frame) bringt es nicht. Mein Vorschlag wäre auf test.wikipedia.org ganz einfache Module anlegen und so ausprobieren warum das nicht funktioniert. Mit invoke:Hiero/Cell|name hat es funktioniert, was ist also bei Hiero/Cell|list anders? Goldzahn (Diskussion) 17:30, 7. Jan. 2022 (CET)
Ich war mit dem Problem bereits in der β-Welt. Das Verhalten war genau wie (später) hier, nur dass alles furchtbar träge lief und Änderungen teils scheinbar ohne Wirkung blieben.
Bei der Einbindung hatte ich mich vollständig an die Vorlage gehalten. Es sollte so sein, dass auf mit local bezeichnete Elemente von außen überhaupt nicht zugegriffen werden kann. Um aus einem anderen Modul heraus auf eine Service-Funktion (hier "Cartouche.Title(NameType, language)") zugreifen zu können, muss erst mal die Service-Struktur (hier "Cartouche={}") angelegt sein. Die hatte ich zunächst analog zu der Struktur, die für die Vorlagen zurück gegeben wird ("p={}") als lokal deklariert. Das ist auch völlig ausreichend. Das Schlüsselwort "local" davor zu entfernen bringt auch in diesem Zusammenhang keine Änderung. --Vollbracht (Diskussion) 19:19, 7. Jan. 2022 (CET)
Mir ist gerade ein Fehler aufgefallen. Später mehr. --Vollbracht (Diskussion) 19:23, 7. Jan. 2022 (CET)
Benutzer:Vollbracht Ich habe in test.wikipedia.org die Module SimpleStruct und Cartouche zum laufen gebracht. Ich kann mir im Module:Hiero/Cell content[v]['Wiki']['Wikitext'] anzeigen lassen: es ist "No6". Allerdings komme ich in der Funktion Cell.list dennoch nicht weiter, weil ich mich tiefer in den Code einarbeiten müsste, um weiter zu kommen. Vielleicht reicht es aus, wenn du dir das ansiehst? Was ich gemacht habe, ist, alle Funktionen, die in anderen Modulen genutzt werden sollen, müssen bei "p." eingehängt sein. So wird z.B aus Cartouche.Title die Funktion p.Cartouche_Title und aus SimpleStruct.parse wird p.parse. --Goldzahn (Diskussion) 21:35, 7. Jan. 2022 (CET)
Aber, da waren wir doch bereits viel weiter. Die genannten Funktionen können doch schon längst genutzt werden.
Ich weiß nicht, wie ich mir Deine Variante ansehen kann, aber dass die funktionieren, kannst Du Dir unter Benutzer:Vollbracht/BNR 1 ansehen. Wie sie eingebunden werden, steht momentan unter Benutzer:Vollbracht/BNR 1/Vorlage:Modulspielwiese. Trotzdem interessiert mich doch sehr, wie Du die Einbindung verändert hast, um auf die p-Funktionen aus Lua heraus zuzugreifen. --Vollbracht (Diskussion) 22:07, 7. Jan. 2022 (CET)
Habs gefunden. --Vollbracht (Diskussion) 22:10, 7. Jan. 2022 (CET)
Du machst also aus der Not eine Tugend und bindest in einem Lua-Modul gezielt die Funktionen ein, die eigentlich für die Verwendung in Vorlagen gedacht sind? --Vollbracht (Diskussion) 22:26, 7. Jan. 2022 (CET)
Der Fehler, den ich gefunden zu haben gemeint habe, war wohl keiner. Auf der Hilfeseite ist beschrieben, wie mit einer Standardroutine am Schluss das Objekt, dessen Methoden aus anderen Lua-Moduln heraus aufgerufen werden sollen, mit p.Objektname exportiert werden soll. Eine Auswirkung konnte ich noch nicht feststellen.
In der Zwischenzeit habe ich einen Fehler behoben, bei dem ich nicht verstanden habe, wie der übergangen worden sein kann. Auch habe ich die inline-Doku des Moduls aufgebohrt. Vielleicht verstehst Du den code jetzt besser. --Vollbracht (Diskussion) 00:02, 8. Jan. 2022 (CET)
Genau bei "pairs(typeStruct)" bin ich noch hängen geblieben, sonst funktionieren die drei Beispieler. Siehe [1]. Wo ich vorhin stecken blieb habe ich jetzt korrigiert, zB heißt es jetzt "local title = Cartouche.Cartouche_Title(v, language)". Das erste "Cartouche" vor dem Punkt kommt von local _, Cartouche = pcall(require, "Module:Hiero/Cartouche"). Also die Funktionen aus dem anderen Modul, wo sie an p hängen, werden bei Cartouche in diesem Modul angehängt. Ich habe jetzt nur die drei Beispiele ausprobiert, gut möglich das andere Beispiele noch einen Fehler produzieren würden. Die Namen der Funktionen sind so jetzt wohl nicht das wahre, Cartouche.Cartouche_Title, aber das muss so ja nicht bleiben. PS: Ist sicher schon 3, 4 Jahre her, dass ich mir Lua-Code angesehen habe. Bin deshalb etwas eingerostet. Hat aber Spaß gemacht und mit etwas "Anlauf" ging es dann auch wieder.
Goldzahn (Diskussion) 01:48, 8. Jan. 2022 (CET)
Die entscheidenden Schritte waren hier:
  • Trennung von Methoden für Moduln von Funktionen für Vorlagen
  • Namensunterscheidung der Funktionen zur Verarbeitung von jenen zur Behandlung von fehlerhaften Eingaben
Die Lösung ist häslich, aber es ist eine Lösung. Damit bist Du gerade weiter als ich. --Vollbracht (Diskussion) 02:07, 8. Jan. 2022 (CET)
Basierend auf Deinem Ansatz, alles über p laufen zu lassen, habe ich jetzt eine Lösung (mit einigen behobenen Fehlern) implementiert. Da diese eine Veröffentlichung der Methoden auch für Vorlagen voraussetzt, arbeitet sie nicht mit der Produktivversion von Modul:Hiero/Cartouche. Bevor ich das Modul:Hiero/Cell in eine öffentliche Vorlage einbaue und es damit produktiv schalte, möchte ich dieses Problem beheben. --Vollbracht (Diskussion) 00:52, 9. Jan. 2022 (CET)

Die Lösung des Problems hat Unzulänglichkeiten in Hilfe:Lua/Modul im Wiki aufgeworfen. Alle weiteren Ansätze zur Überarbeitung der gefundenen Lösung des Problems sollen bitte infolge dessen in der Hilfe Diskussion:Lua/Modul im Wiki erörtert werden. Damit bitte ich um Archivierung auch dieses Abschnittes.

Archivierung dieses Abschnittes wurde gewünscht von: --Vollbracht (Diskussion) 03:20, 9. Jan. 2022 (CET)

Finde einen Fehler nicht

Ich schreibe gerade ein Modul:Test. Das wird auf der Seite Benutzer:Vollbracht/fehlerhaft eingesetzt. In Zeile 232 des Moduls habe ich festgelegt, wie ich mir die Ausgabe wünsche: Der Wikitext endS soll nicht interpretiert, sondern mit allen Steuerzeichen und Markups ausgegeben werden. Das geschieht jedoch nicht. Ich stehe hier wie Ochs vorm Berge und sehe nicht, woran das liegt.

Ursprünglich hatte ich die ganze Tabelle als Wikitext formuliert. Damit hatte ich dann auch bei der ersten Zeile bereits unerwartete Probleme derselben Art bekommen. Das hatte ich in den Griff bekommen, indem ich sie auf html-Code umgestellt habe.

Hat jemand eine Idee? --Vollbracht (Diskussion) 14:46, 12. Dez. 2022 (CET)

Du brauchst frame:extensionTag, siehe Hilfe zu Lua im Wiki. -- hgzh 15:00, 12. Dez. 2022 (CET)
Vielen Dank! --Vollbracht (Diskussion) 16:35, 12. Dez. 2022 (CET)

Übrigens ist das Werkzeug jetzt bereits nutzbar. Es ist zwar noch nicht in jeder erdenklichen Weise durchgetestet, aber auf Testseiten im Modulnamensraum sollte es uneingeschränkt genutzt werden können. --Vollbracht (Diskussion) 17:35, 12. Dez. 2022 (CET)

Ich glaube es wäre sinnvoll, das Modul entsprechend zu dokumentieren, insbesondere wenn es bereits im Modulnamensraum zur Verfügung gestellt wird ... --Yellowcard (D.) 09:44, 14. Dez. 2022 (CET)
Ist passiert. Dabei sind Schönheitsfehler zutage gekommen, die ich noch auszumerzen versuche. --Vollbracht (Diskussion) 13:06, 15. Dez. 2022 (CET)
Archivierung dieses Abschnittes wurde gewünscht von: --Vollbracht (Diskussion) 17:35, 12. Dez. 2022 (CET)