Syntax-Highlighting

Kritik und Vorschläge für dieses Board bitte hier rein.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Selbst wenn man den [ Python ]-Button verwendet, rät Highlight.js — und das oft falsch. Kann man das Plugin so ändern, dass es wenigstens beim Python-Button fest Python highlightet? Und wie schwer wäre es bei [ code ] ein [ code = irgendwas ] zu erlauben und das `irgendwas` dann einfach als `class` auf dem <code>-Tag im HTML setzen zu lassen? Denn das sollte highlight.js dann dem Raten bevorzugen. Welches phpBB-Plugin wird denn verwendet?

Und für meinen Geschmack kann das eingesetzte highlight.js zu wenige Sprachen. Eigentlich kann es ja laut Webseite 176 Programmier- und Auszeichnungssprachen, das hier im Forum eingesetzte kann aber nur 23 (apache, bash, coffeescript, cpp, cs, css, diff, http, ini, java, javascript, json, makefile, xml, markdown, nginx, objectivec, perl, php, python, ruby, shell, sql). Also für meinen Geschmack kann es da ja gar nicht genug Auswahl geben (kein Basic, Pascal (Delphi), und kein x86-Assembler‽ :-)), aber wirklich fehlen tun hier zum Beispiel Django-Templates, Hy, QML, und YAML.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Ich erdreiste mich diesen Thread für die Frage zu nutzen, ob man einen Mechanismus implementieren kann der erkennt wann Leute Python Source-Code in einen Beitrag pasten und diese dann zwingt ihn mit entsprechenden Code-Tags zu formatieren. (Ähnlich wie bei Stackoverflow)

Das ist ja eine der Sachen die wirklich am konsequentesten ignoriert wird.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sls: Ich schätze ”man” kann, es müsste nur jemanden geben der ein entsprechendes Plugin für phpBB schreibt, oder es zumindest sucht und findet, falls es so etwas schon geben sollte.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Stackoverflow scheint Code-prettify (https://github.com/google/code-prettify) zu verwenden. Evtl. ist das eine Option, falls man das mit highlight.js nicht umsetzen kann.
When we say computer, we mean the electronic computer.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

sls hat geschrieben: Sonntag 24. Juni 2018, 13:17 Das ist ja eine der Sachen die wirklich am konsequentesten ignoriert wird.
Ist mir seitdem ich hier bin auch aufgefallen. Nachvollziehen kann ich es nicht.
Vielleicht sollten alle "Helper" da mal strikt sein, der erste der antwortet gibt eine Info bzgl [ code][ /code] oder [ Python][ /Python]
und das erst danach geholfen werden kann.
Alle anderen halten sich solange zurück, bis korrekt gepostet wurde.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sls: highlight.js unterstützt mehr Sprachen und das Problem ist ja auch nicht das highlighten sondern das raten welche Sprache es ist. Das funktioniert bei SO auch nicht so viel besser, nur das dort wohl Tags eine Rolle spielen, das heisst wenn ich den Beitrag bei SO als Python tagge, wird Python mit höherer Wahrscheinlichkeit erkannt. Und wenn es gar nicht klappt kann man auch explizit die Sprache angeben. Letzteres fehlt hier. Und das ist kein highlight.js-Problem, sondern dass das phpBB-Pluging, das hier zum Einsatz kommt, das nicht vorsieht.

Ich fände es halt schön wenn [ Python ] auch tatsächlich nur Python wäre, [ code ] am besten gar nicht highlighted oder rät und es die Möglichkeit für [ code=sprache ] gäbe um die Sprache explizit anzugeben. Und dann wären mehr Sprachen als die 23 genannten nett. Das wäre mir aber letzlich nicht so wichtig wie die Möglichkeit Python-Code auch wirklich als Python-Code setzen zu können und nicht hoffen zu müssen das er als Perl oder C# geraten wird, weil das blöd aussieht wenn beispielsweise aus der Ganzzahldivision mit ``//`` plötzlich ein Kommentar wird.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@__black__: ja, das Highlighten ist nicht optimal. Ich bin auch kein Fan davon darauf zu vertrauen dass die Sprache richtig erkannt wird, gar kein Highlightning finde ich jedoch noch viel schlimmer. Wenn ich Damaskus wäre, wäre ich Damaskus, und dann würde ich vielleicht schauen ob man das implementieren kann dass der Nutzer seinen Source-Code in Code-Tags setzen *muss*, das Auswählen der richtigen Sprache sollten die Benutzer dann gerade noch so schaffen.
When we say computer, we mean the electronic computer.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Ja, der Highlighter ist nicht optimal.
Solange aber keiner mir eine fertige und erprobte Extension liefert, muss ich verwenden was es auf dem Markt gibt, bzw sobald ich etwas freie Zeit habe mich darum kümmern.

code-prettify ist durchaus auch einen Versuch Wert!
Kann ich bei Gelegenheit auch mal testen.
Allerdings wird es die nächsten Woche eher nichts.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Damaskus: Jetzt hast Du immer noch nicht verraten *was* denn verwendet wird. :-) Also welches phpBB-Plugin das highlight.js verwendet. Man kann highlight.js ja durchaus sagen welche Sprache es ist, damit es nicht raten muss.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Achso, sry!
Ich hab die Frage bzw. die Aufgabe komplett überlesen.

Es wird gar kein Plugin mehr verwendet, sonder highlight.js ist manuell eingebaut.
Meine ich...

Ich schaue Morgen in die Doku vom Forum rein, dann kann ich es genau sagen.
Per Default sollte auch Python als Syntax angegeben werden. Aber so aus dem Kopf heraus kann ich es echt nicht sicher sagen.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ping. :-)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Ja ok, vergessen... Schande über mein Haupt!
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@Damaskus: brauchst / willst du eigentlich Unterstützung? Ich hätte keinen Stress damit o.g. Plugins zu testen.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und aus aktuellem Anlass mal wieder ein Ping. :-) Der Anlass ist dieser Python-Code der in [ Python ]-Tags steht, aber als SQL gehighlighted wird, was ihn im Grunde fast unlesbar macht. Da wäre sogar *kein* Highlighting besser.

Code: Alles auswählen

def change_case(word):
    """Change case to lower if it is a short word (≤5) or upper if it
    is a long word (≥7).  Otherwise return word unchanged.

    >>> change_case('SPAM')
    'spam'
    >>> change_case('Mississippi')
    'MISSISSIPPI'
    >>> 'Python'
    'Python'
    """
    if len(word) <= 5:
        word = word.lower()
    elif len(word) >= 7:
        word = word.upper()
    return word


def mix_words(words):
    """Return the words in the given iterable shuffled in a
    deterministically way.
    
    >>> words = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']
    >>> mix_words(words)
    ['bbb', 'aaa', 'fff']

    In contrast to the specification the given words can be any iterable
    and if it is a sequence it is not changed by this implementation.
    
    >>> words  # Not changed!
    ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']

    .. warning::
        
        The algorithm from the specification drops up to five words
        from the input.  Especially when there are less than six words,
        all the input is dropped.  That is a bug in the specification,
        not in the implementation!

        Technically there is even one word too many dropped if the goal
        was to avoid an :exc:`IndexError` in the shuffle algorithm.
        Also per specification.
    
    >>> [(i, mix_words(words[:i])) for i in range(1, len(words) + 1)]
    [(1, []), (2, []), (3, []), (4, []), (5, []), (6, ['bbb', 'aaa', 'fff'])]
    
    The order of the given words doesn't matter at all.
    
    >>> import random
    >>> random.shuffle(words)
    >>> mix_words(words)
    ['bbb', 'aaa', 'fff']
    
    .. todo::
    
        An improvement would be to extend the result by the remaining,
        currently dropped words.
    """
    words = sorted(words)
    indices = [-5, 0, -1]
    # 
    # Determine minimum length of `words` so that indexing is still
    # guaranteed to work.
    # 
    min_length = max((-index if index < 0 else index + 1) for index in indices)

    result = list()
    # 
    # Could be ``>=`` to drop less words but specification says otherwise.
    # 
    while len(words) > min_length:  
        result.extend(words.pop(index) for index in indices)
    return result


def main():
    words = map(change_case, input('Enter a saying or poem: ').split())
    print(' '.join(mix_words(words)))


if __name__ == '__main__':
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Highlighting sollte gefixt sein, bitte testen!
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Über die Farben läßt sich ja streiten, aber __blackjacks__ Beispiel sieht jetzt lesbar aus. Vielen Dank!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm. Also python code Highlighting geht nicht. Ist immer alles grün. Oder mach ich was falsch?

Wie ist denn jetzt die Syntax?

Code: Alles auswählen

[code=python]
oder

Code: Alles auswählen

[python]
?!?

Es wäre auch gut, wenn es ein direkten Button dafür gibt ;) Oder zumindest einen Hinweis Text unter den Buttons ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@jens: Blockst Du oder Dein Browser eventuell *.cloudflare.com? Die Syntax ist [ code ] oder [ code=sprache ].

Wenn man im Browser in der JavaScript-Console folgendes eingibt:

Code: Alles auswählen

hljs.listLanguages().forEach(x => console.log(x))
Wird momentan diese Liste ausgespuckt:
  • apache
  • bash
  • coffeescript
  • cpp
  • cs
  • css
  • diff
  • http
  • ini
  • java
  • javascript
  • json
  • makefile
  • xml
  • markdown
  • nginx
  • objectivec
  • perl
  • php
  • python
  • ruby
  • shell
  • sqlapache
  • bash
  • coffeescript
  • cpp
  • cs
  • css
  • diff
  • http
  • ini
  • java
  • javascript
  • json
  • makefile
  • xml
  • markdown
  • nginx
  • objectivec
  • perl
  • php
  • python
  • ruby
  • shell
  • sql
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__blackjack__ hat geschrieben: Samstag 15. September 2018, 11:36 @jens: Blockst Du oder Dein Browser eventuell *.cloudflare.com? Die Syntax ist [ code ] oder [ code=sprache ].
Ich bin zwar nicht Jens aber Danke für diesen Hinweis, mein Umatrix hat das doch tatsächlich "ungewünscht" so gemacht. Gefixt.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Warum wird das schon wieder von Cloudflare ausgeliefert....?!
Ich hab das doch extra lokal abgelegt, damit es nicht via cdn von irgendwo ausgeliefert wird.
Werde ich an einem der nächsten Wochenende fixen.
Antworten