annotate .cms/lib/codemirror/mode/ruby/index.html @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 <!doctype html>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 <title>CodeMirror: Ruby mode</title>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 <meta charset="utf-8"/>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 <link rel=stylesheet href="../../doc/docs.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 <link rel="stylesheet" href="../../lib/codemirror.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 <script src="../../lib/codemirror.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 <script src="../../addon/edit/matchbrackets.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 <script src="ruby.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 <style>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 .cm-s-default span.cm-arrow { color: red; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 </style>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 <div id=nav>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 <a href="https://codemirror.net/5"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 <li><a href="../../index.html">Home</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 <li><a href="../../doc/manual.html">Manual</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 <li><a href="https://github.com/codemirror/codemirror5">Code</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 <li><a href="../index.html">Language modes</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 <li><a class=active href="#">Ruby</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 <article>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 <h2>Ruby mode</h2>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 <form><textarea id="code" name="code">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 # Code from http://sandbox.mc.edu/~bennet/ruby/code/poly_rb.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 # This program evaluates polynomials. It first asks for the coefficients
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 # of a polynomial, which must be entered on one line, highest-order first.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 # It then requests values of x and will compute the value of the poly for
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 # each x. It will repeatedly ask for x values, unless you the user enters
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 # a blank line. It that case, it will ask for another polynomial. If the
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 # user types quit for either input, the program immediately exits.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 # Function to evaluate a polynomial at x. The polynomial is given
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 # as a list of coefficients, from the greatest to the least.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 def polyval(x, coef)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 sum = 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 coef = coef.clone # Don't want to destroy the original
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 while true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 sum += coef.shift # Add and remove the next coef
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 break if coef.empty? # If no more, done entirely.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 sum *= x # This happens the right number of times.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 return sum
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 # Function to read a line containing a list of integers and return
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 # them as an array of integers. If the string conversion fails, it
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 # throws TypeError. If the input line is the word 'quit', then it
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 # converts it to an end-of-file exception
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 def readints(prompt)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 # Read a line
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 print prompt
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 line = readline.chomp
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 raise EOFError.new if line == 'quit' # You can also use a real EOF.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 # Go through each item on the line, converting each one and adding it
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 # to retval.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 retval = [ ]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 for str in line.split(/\s+/)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 if str =~ /^\-?\d+$/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 retval.push(str.to_i)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 raise TypeError.new
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 return retval
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 # Take a coeff and an exponent and return the string representation, ignoring
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 # the sign of the coefficient.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 def term_to_str(coef, exp)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 ret = ""
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 # Show coeff, unless it's 1 or at the right
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 coef = coef.abs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 ret = coef.to_s unless coef == 1 && exp > 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 ret += "x" if exp > 0 # x if exponent not 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 ret += "^" + exp.to_s if exp > 1 # ^exponent, if > 1.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 return ret
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 # Create a string of the polynomial in sort-of-readable form.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 def polystr(p)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 # Get the exponent of first coefficient, plus 1.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 exp = p.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 # Assign exponents to each term, making pairs of coeff and exponent,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 # Then get rid of the zero terms.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 p = (p.map { |c| exp -= 1; [ c, exp ] }).select { |p| p[0] != 0 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 # If there's nothing left, it's a zero
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 return "0" if p.empty?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 # *** Now p is a non-empty list of [ coef, exponent ] pairs. ***
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 # Convert the first term, preceded by a "-" if it's negative.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 result = (if p[0][0] < 0 then "-" else "" end) + term_to_str(*p[0])
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 # Convert the rest of the terms, in each case adding the appropriate
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 # + or - separating them.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 for term in p[1...p.length]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 # Add the separator then the rep. of the term.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 result += (if term[0] < 0 then " - " else " + " end) +
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 term_to_str(*term)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 return result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 #
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 # Run until some kind of endfile.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 begin
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 # Repeat until an exception or quit gets us out.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 while true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 # Read a poly until it works. An EOF will except out of the
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 # program.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 print "\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 begin
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 poly = readints("Enter a polynomial coefficients: ")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 rescue TypeError
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 print "Try again.\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 retry
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 break if poly.empty?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 # Read and evaluate x values until the user types a blank line.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 # Again, an EOF will except out of the pgm.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 while true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 # Request an integer.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 print "Enter x value or blank line: "
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 x = readline.chomp
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 break if x == ''
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 raise EOFError.new if x == 'quit'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 # If it looks bad, let's try again.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 if x !~ /^\-?\d+$/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 print "That doesn't look like an integer. Please try again.\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 next
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 # Convert to an integer and print the result.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 x = x.to_i
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 print "p(x) = ", polystr(poly), "\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 print "p(", x, ") = ", polyval(x, poly), "\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 rescue EOFError
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 print "\n=== EOF ===\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 rescue Interrupt, SignalException
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 print "\n=== Interrupted ===\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 print "--- Bye ---\n"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 </textarea></form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 <script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 mode: "text/x-ruby",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 matchBrackets: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 indentUnit: 4
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 </script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 <p><strong>MIME types defined:</strong> <code>text/x-ruby</code>.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180 <p>Development of the CodeMirror Ruby mode was kindly sponsored
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 by <a href="http://ubalo.com/">Ubalo</a>.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 </article>