#========================================================================# ** Word Wrapping Message Boxes, by: KilloZapit#------------------------------------------------------------------------# Changes message boxes so it will automatically wrap long lines.## Note: I consider this script to be public domain, and put no# restrictions on it's use whatsoever. My only request is that# a link back to the script is provided so more people can# access it if they want to.## Version the Second:# Now strips color codes and icon codes so they don't break words.# Also calculates icon width along with text width for words.# Version the Third:# Now also strips delays and other timing related codes.# Splits for non-icon control codes before counting icons.# Control codes can now break lines in case of font changes.# Added some comments to clarify some code.# Version the Forth:# Fixed a small bug that might cause a error when counting icons.# Added a small notice for copyright questions.# Version the Fifth:# Added "collapse" mode, which elimanates extra spaces.# Can now use "whitespace" mode outside of wordwrap mode if needed.# Version the Sixth:# Fixed problems with collapsed whitespace not wraping words right.# Version the Seventh:# Added option to add a margin to the right hand side of the window.#------------------------------------------------------------------------# Also adds the following new escape sequences:## \ww - Word Wrap: turns word wrap on if it's off# \nw - No Wrap: Turns word wrap off# \ws - WhiteSpace mode: Converts newlines to spaces (like HTML)# \nl - New Line: Preserves hard returns# \cs - Collapse whiteSpace: Eliminates extra spaces (also like HTML)# \pre - PRE-formatted: Preserves spaces# \br - line BRake: manual newline for whitespace mode# \rm - Right Margin: extra space on the right side of the window#========================================================================# Standard config module.module KZIsAwesome module WordWrap # change this if you don't want wordwrap on by default. DEFAULT_WORDWRAP = true # change this if you want white space mode on by default. DEFAULT_WHITESPACE = false # change this if you want white space mode on by default. DEFAULT_COLLAPSE = true # change this to add a right margin to the window. DEFAULT_RIGHT_MARGIN = 0 endendclass Window_Base < Window include KZIsAwesome::WordWrap alias_method :initialize_kz_window_base, :initialize def initialize(x, y, width, height) initialize_kz_window_base(x, y, width, height) @wordwrap = DEFAULT_WORDWRAP @convert_newlines = DEFAULT_WHITESPACE @collapse_whitespace = DEFAULT_COLLAPSE @right_margin = DEFAULT_RIGHT_MARGIN @lastc = "\n" end alias_method

rocess_character_kz_window_base,

rocess_character def process_character(c, text, pos) c = ' ' if @convert_newlines && c == "\n" if @wordwrap && c =~ /[ \t]/ c = '' if @collapse_whitespace && @lastc =~ /[\s\n\f]/ if pos[:x] + get_next_word_size(c, text) > contents.width - @right_margin process_new_line(text, pos) else process_normal_character(c, pos) end @lastc = c else @lastc = c process_character_kz_window_base(c, text, pos) end end def get_next_word_size(c, text) # Split text by the next space/line/page and grab the first split nextword = text.split(/[\s\n\f]/, 2)[0] if nextword icons = 0 if nextword =~ /\e/i # Get rid of color codes and YEA Message system outline colors nextword = nextword.split(/\e[oOcC]+\[\d*\]/).join # Get rid of message timing control codes nextword = nextword.split(/\e[\.\|\^<>!]/).join # Split text by the first non-icon escape code # (the hH is for compatibility with the Icon Hues script) nextword = nextword.split(/\e[^iIhH]+/, 2)[0] # Erase and count icons in remaining text nextword.gsub!(/\e[iIhH]+\[[\d,]*\]/) do icons += 1 '' end if nextword end wordsize = (nextword ? text_size(c + nextword).width : text_size( c ).width) wordsize += icons * 24 else wordsize = text_size( c ).width end return wordsize end alias_method

rocess_escape_character_kz_window_base,

rocess_escape_character def process_escape_character(code, text, pos) case code.upcase when 'WW' @wordwrap = true when 'NW' @wordwrap = false when 'WS' @convert_newlines = true when 'NL' @convert_newlines = false when 'CS' @collapse_whitespace = true when 'PRE' @collapse_whitespace = false when 'BR' process_new_line(text, pos) @lastc = "\n" when 'RM' @right_margin = obtain_escape_param(text) else process_escape_character_kz_window_base(code, text, pos) end # Recalculate the next word size and insert line breaks # (Needed primarily for font changes) if pos[:x] + get_next_word_size('', text) > contents.width process_new_line(text, pos) end endend