Module: Inform::Rules
- Included in:
- InformLibrary
- Defined in:
- lib/inform/parserm.h.rb
Overview
TODO: Perhaps this should go in the mudlib
Defined Under Namespace
Classes: More
Constant Summary collapse
- SolicitedStates =
%i[asked yesorno? solicited].freeze
- DefaultMoreParameters =
{ page_index: 0, limit: 10, help: nil, done: :playing }.freeze
Instance Method Summary collapse
- #ask(s = nil) ⇒ Object
- #asked ⇒ Object
- #asked? ⇒ Boolean
- #complete ⇒ Object
- #completed ⇒ Object
- #completing ⇒ Object
- #completing? ⇒ Boolean
- #disambiguate ⇒ Object
- #disambiguated ⇒ Object
- #disambiguating ⇒ Object
- #disambiguating? ⇒ Boolean
-
#more(text = nil, params = {}) ⇒ Object
This method supports the MoreSub verb implementation.
- #responded ⇒ Object
- #responded?(_s) ⇒ Boolean
- #solicit(s = nil) ⇒ Object
- #solicited ⇒ Object
- #solicited? ⇒ Boolean
- #yesorno(s = nil) ⇒ Object
- #yesorno? ⇒ Boolean
Instance Method Details
#ask(s = nil) ⇒ Object
4992 4993 4994 4995 4996 4997 4998 4999 5000 |
# File 'lib/inform/parserm.h.rb', line 4992 def ask(s = nil) println s if s.is_a?(String) if session @previous ||= session.state session.state = :asked end # true session.state end |
#asked ⇒ Object
5011 5012 5013 |
# File 'lib/inform/parserm.h.rb', line 5011 def asked yesorno? end |
#asked? ⇒ Boolean
5079 5080 5081 |
# File 'lib/inform/parserm.h.rb', line 5079 def asked? session&.state == :asked end |
#complete ⇒ Object
5040 5041 5042 5043 |
# File 'lib/inform/parserm.h.rb', line 5040 def complete session.state = :completing unless session.nil? false end |
#completed ⇒ Object
5064 5065 5066 5067 |
# File 'lib/inform/parserm.h.rb', line 5064 def completed session.state = :playing unless session.nil? queue @input end |
#completing ⇒ Object
5045 5046 5047 5048 |
# File 'lib/inform/parserm.h.rb', line 5045 def completing Incomplete() if @ambiguity session.state = :playing unless session.nil? end |
#completing? ⇒ Boolean
5087 5088 5089 |
# File 'lib/inform/parserm.h.rb', line 5087 def completing? session&.state == :completing end |
#disambiguate ⇒ Object
5030 5031 5032 5033 |
# File 'lib/inform/parserm.h.rb', line 5030 def disambiguate session.state = :disambiguating unless session.nil? false end |
#disambiguated ⇒ Object
5059 5060 5061 5062 |
# File 'lib/inform/parserm.h.rb', line 5059 def disambiguated session.state = :playing unless session.nil? queue @input end |
#disambiguating ⇒ Object
5035 5036 5037 5038 |
# File 'lib/inform/parserm.h.rb', line 5035 def disambiguating WhichOne() if @ambiguity session.state = :playing unless session.nil? end |
#disambiguating? ⇒ Boolean
5083 5084 5085 |
# File 'lib/inform/parserm.h.rb', line 5083 def disambiguating? session&.state == :disambiguating end |
#more(text = nil, params = {}) ⇒ Object
This method supports the MoreSub verb implementation.
5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 |
# File 'lib/inform/parserm.h.rb', line 5119 def more(text = nil, params = {}) params = DefaultMoreParameters.merge(params) unless session println text return params[:done] end input = @buffer.dup @more ||= More.new([], params[:page_index]) if text @more.text = text else text = @more.text end case input when /\?/ println params[:help] || "<Help for More goes here>" when /^(q|quit)$/ @more = nil @prompt = nil prompt return session.state = params[:done] else text = @more.text.split('\n') if @more.text.is_a? String unless text.is_a?(Array) println "[Error: Format problem using the more command -- cannot handle given text.]" return session.state = params[:done] end println text[@more.page_index, params[:limit]].join("\n") @more.page_index += params[:limit] end percent_complete = [100, (100 * (@more.page_index.to_f / text.length)).floor].min @more = nil unless @more.page_index < @more.text.length new_line print "--More--(#{percent_complete}%)" if percent_complete < 100 prompt " [?]: " session.state = :more else new_line prompt nil session.state = params[:done] end end |
#responded ⇒ Object
5073 5074 5075 5076 5077 |
# File 'lib/inform/parserm.h.rb', line 5073 def responded session&.state = previous_state = @previous @previous = nil session&.state || previous_state end |
#responded?(_s) ⇒ Boolean
5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 |
# File 'lib/inform/parserm.h.rb', line 5095 def responded?(_s) reset_io # TODO: Remove this. Why is the buffer getting a newline character added to it? if @buffer.empty? prompt else responded @consult_words = @input = @buffer.dup result = resume println(result) if result == :playing reset_prompt prompt end end session&.state end |
#solicit(s = nil) ⇒ Object
5051 5052 5053 5054 5055 5056 5057 |
# File 'lib/inform/parserm.h.rb', line 5051 def solicit(s = nil) if !session.nil? && !SolicitedStates.include?(session.state) prompt s if s.is_a?(String) @previous ||= session.state end session.state = :solicited unless session.nil? end |
#solicited ⇒ Object
5069 5070 5071 |
# File 'lib/inform/parserm.h.rb', line 5069 def solicited responded? @input end |
#solicited? ⇒ Boolean
5091 5092 5093 |
# File 'lib/inform/parserm.h.rb', line 5091 def solicited? session&.state == :solicited end |
#yesorno(s = nil) ⇒ Object
5002 5003 5004 5005 5006 5007 5008 5009 |
# File 'lib/inform/parserm.h.rb', line 5002 def yesorno(s = nil) print s.to_s unless s.nil? unless session.nil? @previous ||= session.state session.state = :asked end session&.state || false end |
#yesorno? ⇒ Boolean
5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 |
# File 'lib/inform/parserm.h.rb', line 5015 def yesorno? reset_io # TODO: Remove this. Why is the buffer getting a newline character added to it? case @buffer.split.first when /^(y|yes)$/i println(resume) responded when /^(n|no)$/i prompt responded else L__M(:Quit, 1); print "> " session&.state end end |