Codetags mit Zeilenangaben

Hi,

Die PHP-Codetags haben ja momentan bekannterweise keinerlei Zeilenangaben:

[php]$text = „Hallo Welt“;
//Hallo Welt[/php]

Aber das kann ziemlich praktisch sein, beispielsweise bei Fehlermeldungen mit Zeilenangaben oder um jemanden sagen zu können „Guck mal in Zeile xyz“.

Allerdings gibt es das bekannte Problem mit dem Copy & Paste, bei dem die Zahlen mitkopiert werden. Für dieses Problem habe ich eine Lösung gefunden:

[html]<?xml version="1.0" encoding="iso-8859-1"?>

test .code{ font-family:monospace; font-size:13.3px; overflow:auto; }
1
2
3
4
5
6
7
8
text
text
text
text
text
text
text
text
[/html] bzw. Hier mit einem echtem PHP-Code: [html]<?xml version="1.0" encoding="iso-8859-1"?> test .var{ color:#00B; } .func{ color:#070; } .tvar{ color:#D00; } .com{ color:#FF8000; } .code{ font-family:monospace; font-size:13.3px; overflow:auto; }
1
2
3
4
5
6
7
8
echo "Testseite\n";
// Ausgabe

function connect (){
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
mysql_select_db("Datenbank");
}
//Verbindung zur DB
[/html]

Wenn ihr in diesem Beispiel den Code kopiert, dann werden die Zahlen nicht mitkopiert (es sei denn ihr geht mit der Maus sehr weit nach links).

Das Script, welches die Zeilenangaben macht, könnte ja zuerst die Anzahl an Zeilenumbrüchen zwischen den Codetags auszählen und dann in einer Schleife den div mit den Zahlen erstellen. Danach wird der normale Code eingesetzt.

Bitte eure Meinung dazu :smiley:

Geht mit tabellen ebenfalls…

Du solltestes noch so gestallten das die größe der zeilenummern nicht dazu führt das sie sich nach unten verschieben.

Meinst du sowas:
[html]<?xml version="1.0" encoding="iso-8859-1"?>

test
1 Foo
2 Bar
[/html] Weil genau das klappt nicht.

Die Zahlen sind genausogroß wie die Schrift und auch ein Monospace-font. Da sollte auch bei 100 Zeilen nichts passieren :wink:

Habe es aber getestet und es passiert was :wink:

Nein ich meinte es so:
[HTML]

1
2
3
Erste Zeile
Zweite Zeile
Dritte Zeile
[/HTML]

Also bei 30 Zeilen passier bei mir überhaupt nichts:
[html]<?xml version="1.0" encoding="iso-8859-1"?>

test .code{ font-family:monospace; font-size:13.3px; overflow:auto; }
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
text1
text2
text3
text4
text5
text6
text7
text8
text9
text10
text11
text12
text13
text14
text15
text16
text17
text18
text19
text20
text21
text22
text23
text24
text25
text26
text27
text28
text29
text30
text31
text32
text33
text34
text35
text36
[/html]

Also ich find auch, dass das ne gute Idee ist, die auch umgesetzt werden sollte.
Wie commodore ja schon sagte, kann man so viel besser helfen und sieht schneller im Code durch, gerade bei Fehlermeldungen…

Ich hab mir auch paar Gedanken zu Umsetzung gemacht:
Also die Zeilen könte man sich so anzeigen lassen (inhalt des divs):
[php]
$rows = implode(„
“, range(1, $lastrow = count(explode(„
“, $code))));
[/php]
Und für die Breite der Zeilenangabe sowas:
[php]
$rowswidth = strlen($lastrow)*10+10;
[/php]

Das müsste in die handler Funktionen für html, code und php der bbcode Klasse, hinter der folgenden Zeile stehen. (In der code funktion müsste allerdings explode(„\n“,$code) verwendet werden)

[php]
$code = $this->strip_front_back_whitespace($code, 1);
[/php]

Nun müsste nurnoch in die Templates für die jeweiligen bbcodes der code von Commodore eingearbeitet werden, so z.b.:
[php]

{$rows}
{$code}
[/php] Hoffe ihr setzt das mal um :) Gruß

Wo wir dann schon wohl beim nächstem Problem sind:
Es sollen nur relevante Codeausschnitte gepostet werden, was aber dann die Zeilennummerirung verfälscht. Man müsste eingeben können, ab welcher Zahl aus nummerriert werden soll.

MFG
Alti

Das wäre schon eine größere Veränderung an sourcecode.

Idee:

Man steckt die Ausgabe der Zahlen in eine eigene Funktion mit einem optionalen Parameter (Standardwert:1). Dann macht man einen zusätzlichen Regex für einen Code, der z.B. so aussehen kann:

[php;65]
//Zeile 65
//Viel code
[/php]

Der regex wäre dann in etwa so:

'/\[php;(\d)\](.*)\[\/php\]/isU'

An die Funktion zum erstellen wird dann als erste Variable der zweite Treffer im Regex übergeben (der eigentliche String) und als zweite Variable die Zahl die als erstes gematcht wurde (optional). Diese Zahl wird dann zum anfangs und endwert der Schleife addiert.

Sorry für Doppelpost, aber interessiert sich hierfür keiner? Kann den nichtmal einer der Admins was dazu sagen?

das wurde schon besprochen… am soucode wird nichts verändert und der stanard patch der verhindert das copy pasten (was für die meissten wichtiger ist als die numerierung)