* lisp/progmodes/ruby-mode.el: Handle general delimited literals.
(ruby-syntax-general-delimiters-goto-beg)
(ruby-syntax-propertize-general-delimiters): New functions.
(ruby-syntax-propertize-function): Use them to handle GDL.
(ruby-font-lock-keywords): Move old handling of GDL...
(ruby-font-lock-syntactic-keywords): .. to here.
(ruby-calculate-indent): Adjust indentation for GDL.
* lisp/progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286).
(ruby-syntax-propertize-regexp): New function.
(ruby-syntax-propertize-function): Use it to handle regexp not preceded
by a special keyword.
* lisp/progmodes/ruby-mode.el: Simplify last change, and cleanup code.
(ruby-syntax-propertize-regexp): Remove.
(ruby-syntax-propertize-function): Split regexp into chunks.
Match following code directly.
* test/indent/ruby.rb: New file, to test new syntax-propertize code.
* lisp/progmodes/ruby-mode.el (ruby-parse-partial): No error when end
up inside string symbol literal.
* test/automated/ruby-mode-tests.el: New file with one test.
Merge stuff from upsteam ruby-mode, part 1.
* lisp/progmodes/ruby-mode.el (ruby-mode-map): Remove deprecated
binding (use `M-;' instead).
(ruby-expr-beg, ruby-parse-partial): ?, _, and : are symbol
constituents, ! is not (but kinda should be).
(ruby-singleton-class-p): New function.
(ruby-expr-beg, ruby-in-here-doc-p)
(ruby-syntax-propertize-heredoc): Use it.
(ruby-syntax-propertize-function): Adjust for changes in
`ruby-syntax-propertize-heredoc'.

* test/automated/ruby-mode-tests.el (ruby-should-indent)
(ruby-assert-state): New functions.
Add new tests.
Merge from upstream ruby-mode.el
* lisp/progmodes/ruby-mode.el (ruby-mode-map): Remove unnecessary
binding for `newline'.
(ruby-move-to-block): When moving backward, stop at block opening,
not indentation.
* progmodes/ruby-mode.el (ruby-brace-to-do-end)
(ruby-do-end-to-brace, ruby-toggle-block): New functions.
* progmodes/ruby-mode.el (ruby-mode-map): Add binding for
`ruby-toggle-block'.
* test/automated/ruby-mode-tests.el (ruby-move-to-block-stops-at-opening)
(ruby-toggle-block-to-do-end, ruby-toggle-block-to-brace): New test.
* lisp/progmodes/ruby-mode.el: Improve percent literals.
(ruby-percent-literal-beg-re): New constant.
(ruby-syntax-general-delimiters-goto-beg): Rename to
`ruby-syntax-enclosing-percent-literal', improve literal type check.
(ruby-syntax-propertize-general-delimiters): Rename to
`ruby-syntax-propertize-percent-literal', it's a shorter and more
popular term.  Adjust comments everywhere.
(ruby-syntax-propertize-percent-literal): Only propertize when not
inside a simple string or comment.  When the literal is unclosed,
leave the text after it unpropertized.
* lisp/progmodes/ruby-mode.el (ruby-syntax-methods-before-regexp): New const.
(ruby-syntax-propertize-function): Use it to recognize regexps.
Don't look at the text after regexp, just use the whitelist.
* test/indent/ruby.rb: Rearrange examples, add new ones.
* ruby-mode.el: Clean up keybindings.
(ruby-mode-map): Don't bind ruby-electric-brace,
ruby-beginning-of-defun, ruby-end-of-defun, ruby-mark-defun,
backward-kill-word, reindent-then-newline-and-indent.
(ruby-mark-defun): Remove.
(ruby-electric-brace): Remove.  Obsoleted by electric-indent-chars.
(ruby-mode): Set local beginning-of-defun-function and
end-of-defun-function values.
* lisp/progmodes/ruby-mode.el (ruby-indent-beg-re): Add pieces from
ruby-beginning-of-indent, simplify, allow all keywords to have
indentation before them.
(ruby-beginning-of-indent): Adjust for above.  Search until the
found point is not inside a string or comment.
(ruby-font-lock-keywords): Allow symbols to start with "@"
character, give them higher priority than variables.
(ruby-syntax-propertize-function)
(ruby-font-lock-syntactic-keywords): Remove the "not comments"
matchers.  Expression expansions are not comments when inside a
string, and there comment syntax status is irrelevant.
(ruby-match-expression-expansion): New function.  Check that
expression expansion is inside a string, and it's not escaped.
(ruby-font-lock-keywords): Use it.

* test/automated/ruby-mode-tests.el: New tests (Bug#11613).
* lisp/progmodes/ruby-mode.el (ruby-end-of-defun)
(ruby-beginning-of-defun): Simplify, allow indentation before
block beginning and end keywords.  Also, fix accidental change in the former.
* lisp/progmodes/ruby-mode.el
(ruby-beginning-of-defun): Only consider 3 keywords defun beginners.
(ruby-end-of-defun): Expect that the point is at the beginning of
the defun.
* lisp/progmodes/ruby-mode.el (ruby-match-expression-expansion): Only
fail when reached LIMIT.
* progmodes/ruby-mode.el (ruby-match-expression-expansion): Shorten
  previous change.
* lisp/progmodes/ruby-mode.el (ruby-toggle-block): Guess the current block,
not just expect to be at its beginning.  Adjust callees.
Succeed when do-end block has no space before the pipe character.
(ruby-brace-to-do-end): When the original block is one-liner,
convert to multiline.  Reindent the result.

* test/automated/ruby-mode-tests.el:
(ruby-toggle-block-to-multiline): New test.
(ruby-should-indent-buffer, ruby-toggle-block-to-do-end)
(ruby-toggle-block-to-brace): Use buffer-string.
* lisp/progmodes/ruby-mode.el (ruby-brace-to-do-end): Don't add extra
whitespace after "end".
(ruby-do-end-to-brace): Collapse block to one line if it fits
within fill-column.
Fix uses of long-obsolete font-lock-reference face.

* generic-x.el (rul-generic-mode): Use font-lock-constant-face.
* calendar/calendar.el (calendar-font-lock-keywords):
* calendar/diary-lib.el (diary-font-lock-keywords)
(diary-fancy-font-lock-keywords):
* textmodes/reftex-sel.el (reftex-insert-docstruct):
* textmodes/reftex-index.el (reftex-insert-index):
* textmodes/reftex-cite.el (reftex-format-bib-entry):
* progmodes/ruby-mode.el (ruby-font-lock-keywords):
* progmodes/ps-mode.el (ps-mode-font-lock-keywords-1):
* progmodes/prolog.el (prolog-font-lock-keywords):
* progmodes/idlwave.el (idlwave-idl-keywords):
* progmodes/ada-mode.el (ada-font-lock-keywords):
* net/snmp-mode.el (snmp-font-lock-keywords-3): Likewise.

* font-lock.el (font-lock-reference-face): Use
define-obsolete-variable-alias.
* lisp/progmodes/ruby-mode.el (ruby-move-to-block): When moving
backward, always stop at indentation.  Reverts the change from
109576.
* lisp/progmodes/ruby-mode.el: Bump the version to 1.2.
* lisp/progmodes/ruby-mode.el (ruby-indent-beg-re): Only allow "class",
  "module" and "def" to have indentation before them.  Regression
  from 109911 (see the new test).

* test/automated/ruby-mode-tests.el
  (ruby-indent-after-block-in-continued-expression): New test.