Console RGSS3 avancée
Sam 21 Jan 2012 - 18:14
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).
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
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
- GummyStaffeux retraité
- Nombre de messages : 2666
Age : 33
Localisation : Belgique
Distinction : Modérateur imprévisible
Papy Lolo' [Nabots Nimousse]
Date d'inscription : 27/01/2008
Re: Console RGSS3 avancée
Sam 21 Jan 2012 - 18:22
Sympa tout ça
Merci Berka!
Merci Berka!
- AsagiMembre
- Nombre de messages : 290
Age : 30
Localisation : France
Distinction : aucune
Date d'inscription : 30/01/2011
Re: Console RGSS3 avancée
Sam 21 Jan 2012 - 18:49
J'avoue merci du partage
- Master of DragonsMembre
- Nombre de messages : 200
Age : 32
Localisation : Toujours là (même absent)
Distinction : aucune
Date d'inscription : 28/07/2010
Re: Console RGSS3 avancée
Dim 22 Jan 2012 - 1:55
Berka toujours là !
Mais je me demande purquoi tu n'as pas de points de participation...
EDIT : ça a été modifié ^^
Mais je me demande purquoi tu n'as pas de points de participation...
EDIT : ça a été modifié ^^
- GummyStaffeux retraité
- Nombre de messages : 2666
Age : 33
Localisation : Belgique
Distinction : Modérateur imprévisible
Papy Lolo' [Nabots Nimousse]
Date d'inscription : 27/01/2008
Re: Console RGSS3 avancée
Dim 22 Jan 2012 - 1:59
C'est un admin, nous ne pouvons pas modifier les infos des admins
- Azuma-01Membre
- Nombre de messages : 94
Age : 32
Localisation : Amos
Distinction : aucune
Date d'inscription : 22/09/2009
Re: Console RGSS3 avancée
Mar 24 Jan 2012 - 19:28
Très beau travail, mais les regexp et les symbole ne sont pas colorier.
Il faudrait ajouter ces lignes dans Highlighter.prase
EDIT:
Il manque aussi le 'K' de H_BLACK dans la ligne
Il faudrait ajouter ces lignes dans Highlighter.prase
- Code:
when /\/.*\/(?:[imx]{,3})/ then Console.color=H_DPURPLE
when /^:.*$/ then Console.color=H_DYELLOW
- Code:
def p(*a)
a.each{|b|puts b.inspect}
end
EDIT:
Il manque aussi le 'K' de H_BLACK dans la ligne
- Code:
else;Console.color=H_OPERATORS.include?(f)? H_DCYAN : H_BLAC
Re: Console RGSS3 avancée
Mar 24 Jan 2012 - 23:51
Bien vu azuma ! Sous VX les symboles n'étaient pas colorés je crois. Du coup je n'y ai pas pensé.
J'ajoute cela dans le script !
Vous utiliserez la colo pour Kernel#p ? je me disais qu'il était mieux de le laisser tel quel au cas où moins système plante.
J'ajoute cela dans le script !
Vous utiliserez la colo pour Kernel#p ? je me disais qu'il était mieux de le laisser tel quel au cas où moins système plante.
- Azuma-01Membre
- Nombre de messages : 94
Age : 32
Localisation : Amos
Distinction : aucune
Date d'inscription : 22/09/2009
Re: Console RGSS3 avancée
Mer 25 Jan 2012 - 18:19
c'est pour cette raison que j'en ai fait un alias avant, mais le l'ai pas ajouter avec la redéfinition car, le nom que je lui ai donné n'est probablement pas approprié pour les autres.Berka a écrit:Vous utiliserez la colo pour Kernel#p ? je me disais qu'il était mieux de le laisser tel quel au cas où moins système plante.
De toute façons, je considère que les personnes qui vont utiliser la colo en on minimum de connaissance en Ruby, ils seront le faire eux mêmes.
Sinon, en révisant le système de colo des symbole et regexp, j'ai réalisé qu'il ne coloriait pas correctement c'est cas : /regexp avec espaces/i et :'symbole avec espaces'.
donc voici une contre-façon de Highlighter.prase les prenant en charge:
- Code:
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|
self.draw(e)
}
}
@c=!@c
print("\n")
end
def self.draw(e)
if @r # in a regexp
Console.color=H_DPURPLE
@r=!@r if e=~/^(?:[^\/]|.*)[^\\]\/[mix]{,3}$/
elsif @sy # in a sysmbol
Console.color=H_DYELLOW
@sy = nil if e=~(@sy=='"'?(/^.*[^\\]"$/):(/^.*'$/))
elsif @c # in a commant
@c=!@c if e=~/(.*)\n(.*)/
Console.color=H_DGREEN
if $1
print $1,"\n"
self.draw $2
return e
end
else
case e
when *H_KWORDS then Console.color=H_BLUE
when /^\d*[.]?\d+$/ then Console.color=H_DRED
when /^#.*$/ then @c=!@c; Console.color=H_DGREEN # commant
when /^\/.*(?:[^\/]|\\\/)$/ then @r=!@r; Console.color=H_DPURPLE # regexp with spaces
when /^\/.*\/(?:[imx]{,3})$/ then Console.color=H_DPURPLE # one word regexp
when (/^:["'].*[^#{e[1]}]$/ rescue nil) then @sy=e[1]; Console.color=H_DYELLOW # symbol with spaces
when /^:.*+$/ then Console.color=H_DYELLOW # one word symbol
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)
}
return
end
end
print("#{e} ")
end
end
Edit :
une ligne sans espaces (ou presque) comme celle ci aura des bugs
- Code:
puts %q{def met(a="QUOTE#{"bob"}",b=/regexp with spaces/,:"bug bug")#commant}
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum