Syntax-Highlighting

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

Sonntag 24. Juni 2018, 12:47

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.
long long ago; /* in a galaxy far far away */
Benutzeravatar
sls
User
Beiträge: 427
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: ::

Sonntag 24. Juni 2018, 13:17

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: 5132
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 24. Juni 2018, 13:55

@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.
long long ago; /* in a galaxy far far away */
Benutzeravatar
sls
User
Beiträge: 427
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: ::

Sonntag 24. Juni 2018, 14:51

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: 894
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Sonntag 24. Juni 2018, 14:52

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: 5132
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 24. Juni 2018, 15:14

@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.
long long ago; /* in a galaxy far far away */
Benutzeravatar
sls
User
Beiträge: 427
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: ::

Sonntag 24. Juni 2018, 15:32

@__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: 938
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Dienstag 26. Juni 2018, 19:26

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: 5132
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dienstag 26. Juni 2018, 19:40

@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.
long long ago; /* in a galaxy far far away */
Benutzeravatar
Damaskus
Administrator
Beiträge: 938
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Mittwoch 27. Juni 2018, 14:53

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: 5132
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 7. Juli 2018, 14:46

Ping. :-)
long long ago; /* in a galaxy far far away */
Benutzeravatar
Damaskus
Administrator
Beiträge: 938
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Montag 9. Juli 2018, 07:14

Ja ok, vergessen... Schande über mein Haupt!
Benutzeravatar
sls
User
Beiträge: 427
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: ::

Montag 9. Juli 2018, 15:10

@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: 5132
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 26. Juli 2018, 07:44

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()
long long ago; /* in a galaxy far far away */
Benutzeravatar
Damaskus
Administrator
Beiträge: 938
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Dienstag 31. Juli 2018, 14:55

Highlighting sollte gefixt sein, bitte testen!
Antworten