Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 17:17 | |
| Bonsoir à tous, Je pense que l'ajout de la console aura été la plus grande innovation de RMVX Ace. Super pratique pour le débugage des scripts. Et c'est pourquoi je n'ai pas pu résister à l'envie de personnaliser un peu ce formidable outil. Grâce à ce script (mon premier sur Ace, faut bien vivre avec son temps) vous aurez la possibilité de colorer les chaines affichées par la consoles. Cela permet également de faire un rapide outil de coloration syntaxique. Un screenshot parlant mieux de la question que des phrases: Pour ce faire, copiez ce script tout en haut de la liste (Avant Vocab). - Code:
-
#============================================================ # Advanced RGSS3 Console # Berka http://www.rpgmakervx-fr.com # v0.5 VX Ace only. 01-21-12 # # Thanks to Azuma-01 for symbols and regexp matching # Free of use. Please ask me before publishing anywhere. # # Add a basic syntax haighlighter to the default RGSS Console # May cause a slight slowdown in the console display. #------------------------------------------------------------ # Use Kernel#puts to activate the syntax highlighter. # Kernel#print stays unchanged.$ # Console#gets extracts the input of the console # use: eval(Console.gets) to script while testing. #------------------------------------------------------------ # Change the color of the console: # Console.color(H_RED) # Set the color of the console # print("this text is red") # Text displayed in red # Console.color = nil # Remove the coloration #============================================================
module Berka module Console LINE_NUMBERS = true # Display line numbers ON/OFF BACKGROUND = true # Display a white background ON/OFF ENABLEPROMPT = true # Enable the gets command ON/OFF PARSE_P = false # Enable parsing for Kernel#p function /!\ end end
module Win32 GSH ||= Win32API.new('kernel32','GetStdHandle','l','l') SCTA||= Win32API.new('kernel32','SetConsoleTextAttribute','ll','l') end
module Highlighter H_BLACK = 0x0000 # black H_DBLUE = 0x0001 # dark blue H_DGREEN = 0x0002 # dark green H_DCYAN = 0x0003 # dark cyan H_DRED = 0x0004 # dark red H_DPURPLE = 0x0005 # dark purple H_DYELLOW = 0x0006 # dark yellow H_GREY = 0x0007 # grey H_DGREY = 0x0008 # dark grey H_BLUE = 0x0009 # blue H_GREEN = 0x000a # green H_CYAN = 0x000b # cyan H_RED = 0x000c # red H_PURPLE = 0x000d # purple H_YELLOW = 0x000e # yellow H_WHITE = 0x000f # white H_INTENSITY = 0x0080 # background intensity # Ruby's special words H_KWORDS=["alias","begin","BEGIN","break","case","defined","do","else","elsif", "end","END","ensure","for","if","in","include","loop","next","raise", "redo","rescue","retry","return","super","then","undef","unless", "until","when","while","yield","false","nil","self","true","__FILE__", "__LINE__","and","not","or","def","class","module","catch","fail", "load","throw"] # Ruby's operators H_OPERATORS=["=","+","-","/","*","%",'(',')','[',']','{','}','<','>','&','|', ',','!',"?",":",";",'.'] def self.parse(*args) args.flatten.each{|l| Console.color=nil print("#{sprintf("%03d",$consolelines+=1)}:\s")if Berka::Console::LINE_NUMBERS l.split(/ /).each{|e| case e when *H_KWORDS then Console.color=H_BLUE when /^\d*[.]?\d+$/ then Console.color=H_DRED when /\/.*\/(?:[imx]{,3})/ then Console.color=H_DPURPLE # by Azuma-01 when /^:.*$/ then Console.color=H_DYELLOW # by Azuma-01 when /^#.*$/ then Console.color=H_DGREEN # by Azuma-01 else e.split(//).each{|f| @s=!@s if r=(f=='"'||f=="'") if(@s)||r;Console.color=H_DPURPLE elsif f=~/^\d*[.]?\d+$/;Console.color=H_DRED else Console.color=(H_OPERATORS.include?(f)? H_DCYAN : H_BLACK) end print(f) } print(" ") next end print("#{e} ") } } print("\n") end end
include Highlighter
module Console $consolelines=0 # Console lines counter def self.init @outhwnd=Win32::GSH.call(-11) end def self.color=(c=H_BLACK) Win32::SCTA.call(@outhwnd,(c||=H_BLACK)|(Berka::Console::BACKGROUND ? 0x00f0 : 0))# rescue nil end def self.gets $stdin.gets end end Console.init
# Kernel#puts redefinition def puts(*a) a.each{|n|Highlighter.parse(*n)} end #Kernel#p redefinition def p(*a) Berka::Console::PARSE_P ? (a.each{|b|puts b.inspect}) : Kernel.p(*a) end # Kernel#gets def gets Console.gets end
L'utilisation est simple: - une fonction gets est ajoutée pour extraire la saisie console - la fonction puts active la coloration syntaxique, faites: puts("[1,2,3]") - la fonction print est laissée telle quelle. - pour changer de couleur d'affichage: Console.color = H_RED Vous trouverez les codes couleurs au début du script. Merci de me demander la permission avant de copier ce script à droite à gauche. Tout simplement pour que je puisse moi-même assurer le support du système. Berka
Dernière édition par berka le Mar 24 Jan 2012 - 23:42, édité 4 fois |
|
Citadin Lv.7
Inscrit le : 15/03/2011 Messages : 167
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:07 | |
| Génial ! Et il code est étonnamment claire tu as bien SOLUTIONNé ton objectif de rendre cette console plus claire Merci beaucoup du partage Edit: Juste parce que je suis un petit peu emmerdant. J'appartiens à l'école qui considère qu'un module peut faire 2 offices. 1 => Espace nom 2 => Mixins Donc je ne suis pas un grand fan des inclusions de modules qui ne jouent pas avec les attributs. Ce n'est que mon opinion et pas vraiment une critique, mais plutot une interrogation Pourquoi inclure un module qui ne jouent pas avec les attributs (sauf erreur de ma part et dans ce cas ... mea culpa). |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:16 | |
| Merci pour la critique. J'ai ajouté une rapide fonction gets. Pour ce qui est de la clarté j'ai fait un petit effort Pour ce qui est de l'utilisation des modules: - J'aurais éventuellement pu ouvrir une classe Console plutôt qu'un module. Je ne l'ai pas fait car je ne souhaite pas embrouiller l'utilisation par des instanciations. - J'ai conservé un module Berka pour les réglages. C'est une convention que je me suis donné. Ca me permet en cas de problème de voir les autres scripts "Berka" utilisés et faire un support. - J'ai également défini un module Win32 pour éviter la répétition de déclarations Win32API. Parce que ça, c'est mortel. |
|
Citadin Lv.7
Inscrit le : 15/03/2011 Messages : 167
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:18 | |
| La question que je me pose principalement est concernant l'inclusion? Par soucis de rapidité d'écriture de code ? |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:20 | |
| Oui. Et puis c'est aussi que je suis le seul à nommer les APIs par leurs acronymes plutot qu'en camelcase. Je devrais en effet éviter l'inclusion. |
|
Citadin Lv.7
Inscrit le : 15/03/2011 Messages : 167
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:24 | |
| L'important reste tout de même que ça fonctionne ! Merci du partage ! |
|
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:45 | |
| J'aime ! Merci du partage ! |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:50 | |
| Merci Zang' Un problème de balise ? C'est où ? J'ai pas tellement les yeux en face des trous aujourd'hui ! Edit: FIXED |
|
Invité
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:54 | |
| Hop, 2 points de participation pour ce script qui peut être bien utile pour les longues séances de debug. Merci du partage ! |
|
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
| Sujet: Re: [VXace] Console RGSS3 avancée Sam 21 Jan 2012 - 18:58 | |
| - berka a écrit:
- Merci Zang'
Un problème de balise ? C'est où ? J'ai pas tellement les yeux en face des trous aujourd'hui !
Edit: FIXED Ouais, le temps que je poste le message le problème était réglé ^^ |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: [VXace] Console RGSS3 avancée Mar 24 Jan 2012 - 22:57 | |
| Hop nouvelle version: - Coloration des regexp - Coloration des symboles
Merci à Azuma-01 pour les regexp correspondantes.
Dilemme que je me pose: pensez-vous qu'il faille activer la coloration pour Kernel.p ? Ou vaut-il mieux la laisser telle quelle ?
Bonne nuit,
Berka |
|
Citadin Lv.7
Inscrit le : 15/03/2011 Messages : 167
| Sujet: Re: [VXace] Console RGSS3 avancée Mar 24 Jan 2012 - 23:07 | |
| Je pense qu'il vaut mieux laisser ou alors ajouter un flag Merci pour ton travail. Il faudrait qu'on pense, si ça te branche, a plancher ensemble sur un petit script rigolo |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: [VXace] Console RGSS3 avancée Mar 24 Jan 2012 - 23:12 | |
| Un flag dans des paramètres indéfinis ? Sinon y'a toujours le bool en config, mais c'est pas très utile en fait.
Avec plaisir pour le script.
Berka |
|
| Sujet: Re: [VXace] Console RGSS3 avancée | |
| |
|