Beta-testy łamania linii w [php]

Założony przez  Łukasz Tkacz.

Jak wiecie, podczas pisania postów w MyBB dostępny jest znacznik php, pozwalający na kolorowanie kodu źródłowego. Jest to bardzo wygodna opcja, często przydatna, ale niestety ma pewną sporą wadę - nie łamią się w niej linie, przez co doprowadza do "rozjeżdżania się" forum podczas przeglądania tematów.

Aby to wyeliminować przygotowałem poprawkę, chciałbym aby osoby chętne ją przetestowały i poinformowały o ewentualnych problemach.

Edytujemy plik
inc/class_parser.php:

Znaleźć na końcu pliku fragment:

}
?>

dodać przed nim:


private function deleteNbsp($text)
{
  return (strlen($text[0]) < 7) ? ' ' : $text[0];
}



Znaleźć linię (~826):


// Send back the code all nice and pretty


dodać przed nią:


$pattern = '#()+#';
$code = preg_replace_callback($pattern, array($this, 'deleteNbsp'), $code);


To zapewnia zamianę pojedynczych twardych spacji na miękkie, zaś wielokrotnych (wcięcia) pozostawienie bez zmian.
Wada? Jedna jest - takie coś powoduje przy długich linijka utracenie oryginalnego formatowania, no ale to jest cena za możliwość łamania linii.

Jeżeli ktoś znajdzie jakiś błąd / problem, proszę o info w tym temacie.
Używa ktoś? Jeżeli tak, proszę o informacje czy działa prawidłowo.
Witam,
niestety nie działa to prawidłowo.
Wyskakują błędy nad headerem.

Może w międzyczasie ktoś już rozwiązał ten problem?
Mi głównie chodzi o znaczniki CODE.
Nie potwierdzam głoszonego przez Ciebie błędu. Po instalacji na aktualnym 1.6.4 żadnych błędów w headerze nie ma.
W wypadku znacznika code nie jest potrzeba zabawa w modyfikację plików, wystarczy odpowiednie stylowanie (css).
[Obrazek: utut.jpg]
(17.03.2011, 14:45)lukasamd napisał(a):
private static function deleteNbsp($text)
{
  return (strlen($text[0]) < 7) ? ' ' : $text[0];
}

Nie wiem jaki rozmiar w pamięci może mieć $text, ale jeśli duży, zamiast skróconego zapisu lepiej zastosować konstrukcję if/else która ma mniejsze wykorzystanie pamięci i korzysta z mechanizmu "krowy" (COW - copy on write), w przeciwieństwie do tego skrótowca który w tym momencie tworzy dodatkową kopię zmiennej $text w pamięci.
Nic z tego nie rozumiem co napisałeś - może lukasamd zajmie tu jakieś stanowisko? :)
Riess:
Czemu miałby tworzyć dodatkową kopię lokalną, skoro dane nie są modyfikowane? Domyślnie idzie przez referencję i dopóki nie zrobię modyfikacji, nie powinno to ulegać zmianie.
Druga sprawa, że ten callback leci tylko dla fragmentów z nbsp, a więc ilość danych jakie musi "przemielić" jest niewielka w stosunku do całego tekstu. Różnica pomiędzy aktualnym rozwiązaniem a if/else jest niewidoczna nawet przy wrzuceniu zawartości pliku 34 KB (a za dużo też tam nie upchniemy).

adam-as:
Nieco zmieniłem opis i kody z pierwszego postu, sprawdź teraz.
(18.10.2011, 15:59)lukasamd napisał(a): Riess:
Czemu miałby tworzyć dodatkową kopię lokalną, skoro dane nie są modyfikowane? Domyślnie idzie przez referencję i dopóki nie zrobię modyfikacji, nie powinno to ulegać zmianie.

Bo tak działa ten operator, zawsze robi sobie wewnętrznie kopię tego na czym operuje.



Użytkownicy przeglądający ten wątek:

1 gości