Seite 2 von 3
Verfasst: Samstag 16. Januar 2010, 12:08
von sma
snafu hat geschrieben:Bei so ziemlich jedem Thread, der fragt, wie man bestimmte Teile aus dem Quelltext einer Website holen kann, wird sofort auf ElementTree & Co verwiesen und jetzt plötzlich soll es keine gute Idee sein, PyParsing zu verwenden, weil es Overkill ist?
Erstens wirst du von mir selten das NIH-Argument hören, denn ich bin im Zweifel lieber für die einfache eigene Lösung als eine Abhängigkeit zu einer anderen Bibliothek und zweitens ist das IMHO nicht vergleichbar, denn das Problem, das in der Realität meist total kaputte HTML zu parsen ist schwer im Vergleich dazu, Sternchen in Escape-Sequenzen zu verwandeln. Und während HTML immer rekursiv ist, würde ich die Escape-Sequenzen nicht schachteln. Da stößt du sowieso an die Grenzen was so ein VT-100-Terminal so kann.
Stefan
Verfasst: Samstag 16. Januar 2010, 23:03
von snafu
Also bisher hat das Terminal kein Problem mit fett blinkend unterstrichen grüner Schrift auf gelbem Hintergrund. Und bei Rekursion wird's echt übel. Da dies an sich nicht in einer Python-Regexp möglich ist, müsste man drum herum bauen. Ich überlege schon, ob ich in diesem Fall nicht lieber Perl nutzen möchte. Letztlich spielt ja das Markup die Hauptrolle und die Definition der SGR-Konstanten ist ja nun nicht sehr Python-spezifisch. Die Beschränkungen von Python sind hier eher hinderlich und ich sehe eigentlich nicht ein, wieso ich auf die Rekursion verzichten sollte, nur weil Python da nicht mitmacht.
Verfasst: Freitag 22. Januar 2010, 09:35
von snafu
Nachdem mir das bisher alles noch nicht so zugesagt hat, werde ich mal einen Blick auf
Plex werfen, wo mir vor allem der ereignisorientierte Ansatz gefällt. Eventuell nehme ich die Klamotte am Wochenende nochmal in Angriff. Mal sehen...
Verfasst: Sonntag 24. Januar 2010, 01:35
von snafu
Neue Version mit anderem Markup. Farben und Escapen sind noch nicht implementiert.
http://paste.pocoo.org/show/169413/
EDIT: Ich merke gerade, dass das noch nicht mit überlappenden Verschachtelungen klar kommt. Wird also noch geändert.
Verfasst: Sonntag 11. April 2010, 10:34
von jerch
@snafu:
Falls Du noch an der farbigen Konsolenausgabe interessiert bist, hier mal eine einfache Version für Windows -->
http://paste.pocoo.org/show/200261/
Vllt. willst Du ja eine plattformübergreifende Lösung erstellen.
Das Markup ist ziemlich simpel gehalten, da kannst Du sicher nachbessern.
Was geht:
Vordergrund-/Hintergrundfarbe und Intensität setzen (vergleichbar mit
bold) und diese wiederzurücksetzen, wobei es keine "inneren" Farbereiche gibt, sondern der Ausgangswert wiederhergestellt wird. Mit '{@' lassen sich die Tags escapen, desweiteren gibts noch eine 'clrscr()'-Methode und eine Methode zum Setzen der Farbe für die gesamte Konsole.
Blinken und Unterstreichen funktioniert in Windows leider nur mit CJK-Schriften, daher hab ichs nicht weiterverfolgt.
Grüße jerch
Verfasst: Sonntag 11. April 2010, 10:53
von hendrikS
@jerch: Super!

Re: Terminalausgabe bunt machen
Verfasst: Mittwoch 29. September 2010, 09:15
von snafu
Das Projekt lebt ürigens noch. Hier nochmal die wichtigsten Attribute auf einem Blick:
Code: Alles auswählen
states = {
'background': {
'black': 40,
'blue': 104,
'cyan': 106,
'default': 49,
'green': 102,
'magenta': 105,
'red': 101,
'yellow': 103,
'white': 107},
'blink': 5,
'blink_off': 25,
'bold': 1,
'bold_off': 22,
'foreground': {
'black': 30,
'blue': 94,
'cyan': 96,
'default': 39,
'green': 92,
'magenta': 95,
'red': 91,
'yellow': 93,
'white': 97},
'inverse': 7,
'inverse_off': 27,
'reset': 0,
'strike': 9,
'strike_off': 29,
'underline': 4,
'underline_off': 24}
Hilfe zum Zusammensetzen:
Code: Alles auswählen
ESC = '\x1b'
CSI = ESC + '['
def make_sequence(*num_attrs):
attrs = ';'.join(str(attr) for attr in num_attrs)
return '{0}{1}m'.format(CSI, attrs)
Ich habe inzwischen auch eine Syntax für die möglichst einfache Anwendung innerhalb von Strings im Kopf:
- Attribute werden in spitzen Klammern geschrieben
- Für die Vordergrundfarbe wird ein `#` vor den Namen geschrieben
- Für die Hintergrundfarbe ein `&`
- Ein `/` vor dem Namen meint das entsprechende "Off-Attribut"
- Ein `/` ohne Namen meint `reset`
- Ein `/#` steht für `default` als Vordergrund
- Analog dazu `/&`
- Mehree Attributnamen werden durch `,` getrennt
- Whitespace zwischen Trenner und Attributnamen wird ignoriert
- Zugriff auf die Namen ist unabhängig von Groß- und Kleinschreibung
- Der Parser ist keine State-Machine, ein `/` ist wie gesagt einfach eine Art Synonym
Beispiele:
'This is a <bold,#red>very</> important thing.'
'<#green,&black>That message from outer space <bold>must</bold> end somehow.</>'
Re: Terminalausgabe bunt machen
Verfasst: Mittwoch 29. September 2010, 09:23
von BlackJack
@snafu: So nah an XML aber dann doch wieder was eigenes -- ich weiss nicht.
Re: Terminalausgabe bunt machen
Verfasst: Mittwoch 29. September 2010, 09:43
von snafu
Du meinst das jetzt nur wegen den spitzen Klammern und dem Slash, welche den Leser verwirren könnten oder weswegen genau? Ich finde halt, spitze Klammern heben sich besser hervor als eckige.
Und dann noch in die Runde gefragt: Was haltet ihr von der jetzigen Lösung, die ja ohne Verschachtelung und Zuständen auskommen soll?
Re: Terminalausgabe bunt machen
Verfasst: Donnerstag 30. September 2010, 10:16
von snafu
Habe es jetzt mal als
Tefos 0.0.1 rausgebracht. Das Formatting ist natürlich noch sehr beschissen und wird noch den angekündigten Parser bekommen. Auch zusätzliche Farben werden beim nächsten Mal aufgenommen.

Re: Terminalausgabe bunt machen
Verfasst: Donnerstag 30. September 2010, 12:10
von lynadge
Hi, ich finde das Thema Markup recht Interessant.
Um deine Syntax ein bisschen simpler zu halten, wie wäre es wenn du es ähnlich machst wie defnull es schon auf der ersten seite angesprochen hatte, nur halt mit spitzen Klammern: <bold,#red TEXT>
Ich bin der meinung das sich das um ein vielfaches leichter schreiben lässt. Evtl kannst du den Text ja noch mit einer Pipe abgrenzen: <bold,#red|TEXT>
Natürlich hat man auch noch die Möglichkeit zu verschachteln: <bold,#red|ROT <#blue|BLAU>>
Was hälst du von diesem Vorschlag?
#Edit
Ich sehe gerade, jerch hat einen ähnlichen Vorschlag gemacht.

Re: Terminalausgabe bunt machen
Verfasst: Freitag 1. Oktober 2010, 11:45
von snafu
Der Parser wird wohl folgende Syntax kriegen: `[[attr1,attr2,attr3: bla bla bla]]`.
Re: Terminalausgabe bunt machen
Verfasst: Samstag 2. Oktober 2010, 05:58
von snafu
Tefos 0.0.2 ist draußen.
Bitte beachtet, dass der Parser entsprechend der Versionierung noch sehr dumm ist. Es werden bisher stumpf Klammernpaare ersetzt. Weder Verschachtelung, noch Escaping klappt derzeit. Wenn man sich genau an die Regeln hält und keine "unerwarteten" Klammern einbaut, läuft es jedoch wie im Beispiel. Weitere Verbesserungen folgen natürlich noch.
Re: Terminalausgabe bunt machen
Verfasst: Dienstag 5. Oktober 2010, 15:19
von jens
Hab mir auch was gebastelt, allerdings ohne ein "markup":
http://paste.pocoo.org/show/271344/
sieht dann so aus:
Code: Alles auswählen
>>> c = ColorOut()
>>> c.colorize('no color')
'no color'
>>> c.colorize('bold', opts=("bold",))
'\\x1b[1mbold\\x1b[0m'
>>> c.colorize("colors!", foreground="red", background="blue", opts=("bold", "blink"))
'\\x1b[31;44;1;5mcolors!\\x1b[0m'
Es wird auch geprüft, ob überhaupt Escape Sequenzen nutzbar sind...
Das ganze ist geklaut von django, siehe:
http://code.djangoproject.com/browser/d ... mcolors.py
Re: Terminalausgabe bunt machen
Verfasst: Dienstag 5. Oktober 2010, 16:51
von Dav1d
Sphinx hat da auch was dabei...
Re: Terminalausgabe bunt machen
Verfasst: Dienstag 5. Oktober 2010, 17:36
von snafu
Pygments hat auch
was ausgeklügeltes.
Re: Terminalausgabe bunt machen
Verfasst: Dienstag 5. Oktober 2010, 17:49
von DasIch
Quasi jedes größere Python Projekt hat so eine Implementierung, logbook und Inyoka haben da auch was.
Re: Terminalausgabe bunt machen
Verfasst: Donnerstag 14. Oktober 2010, 13:16
von USER67
Hallo
ich habe tefos 0.0.2 ausprobiert, aber ich bekomme einen atrribute error von wegen
"str" object has no attribute "format"
dabei habe ich es genaus so wie oben gemacht

ich habe übrigens WinXP...
Re: Terminalausgabe bunt machen
Verfasst: Donnerstag 14. Oktober 2010, 13:19
von cofi
USER67 hat geschrieben: ich habe übrigens WinXP...
und eine Python-Version < 2.6
Re: Terminalausgabe bunt machen
Verfasst: Donnerstag 14. Oktober 2010, 14:07
von USER67
Ja...nämlich 2.5
ist das der grund?