1. 08 Apr, 2019 3 commits
    • Jackson Ray Hamilton's avatar
      Permit non-ASCII identifiers in JS · f046d6e9
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--name-start-re): Generally allow
      identifiers to begin with non-ASCII letters.  This is of particular
      importance to JSX parsing.
      * test/manual/indent/jsx-unclosed-2.jsx: Add test to ensure non-ASCII
      characters are parsed properly.
    • Jackson Ray Hamilton's avatar
      Identify JSX strings (for js2-mode) · 58b2cdc6
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--syntax-propertize-tag): Derived modes
      like js2-mode may use font-lock-syntactic-face-function to apply faces
      to JSX strings (and only JSX strings).  Apply the js-jsx-string text
      property to such strings so they can be distinctly identified.
      (js-jsx--text-properties): Ensure the js-jsx-string text property gets
      cleaned up, too.
    • Jackson Ray Hamilton's avatar
      Properly set a dynamic, syntactic mode name · bd659cd8
      Jackson Ray Hamilton authored
      Use mode-line-format constructs to properly set mode-name, rather than
      use the very hacky solution that was filling-in for my lack of
      knowledge of this feature.
      * lisp/progmodes/js.el (js--update-mode-name)
      (js--idly-update-mode-name): Remove.
      (js--syntactic-mode-name-part): New helper function for mode-name.
      (js-use-syntactic-mode-name): Helper to set up the dynamic mode-name.
      (js-jsx-enable): Don’t need to call any extra functions now.
      (js-mode): Use the new setup function rather than the old ones.
      (js-jsx-mode): Use the same initial mode name as js-mode so the final
      one is identical for both modes.
  2. 07 Apr, 2019 3 commits
    • Jackson Ray Hamilton's avatar
      Improve whitespace and unary keyword parsing · 9e65e4b0
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--name-start-chars): Remove, adding these
      chars back to js--name-start-re.
      (js--name-start-re): Add chars back from js--name-start-chars.
      (js-jsx--tag-start-re): Improve regexp to capture the tag name (so it
      can be disambiguated from a unary keyword), to match newlines (which
      are common in this spot), and to require at least one whitespace
      character before the attribute name.
      (js-jsx--matched-tag-type): Ensure the “tag name” isn’t possibly a
      unary keyword.
      (js-jsx--self-closing-re, js-jsx--matching-close-tag-pos): Allow
      whitespace around “<” and “>”.
      * test/manual/indent/jsx-unclosed-2.jsx: Add tests for unary keyword
      and whitespace parsing.
    • Jackson Ray Hamilton's avatar
      Optimize js-jsx--enclosing-tag-pos · 341a42ed
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--enclosing-tag-pos): Update docstring
      to be more precise.  Also, remember close tag positions after they’ve
      been calculated once to avoid many redundant calls to
      (js-jsx--text-properties): Ensure js-jsx-close-tag-pos text properties
      get cleaned up, too.
    • Jackson Ray Hamilton's avatar
      Optimize js-jsx--matching-close-tag-pos · 9e4519fb
      Jackson Ray Hamilton authored
      This function’s performance was having a noticeable impact when
      editing large JSX structures.  Improve its performance
      slightly (elapsed time will be cut in half according to ELP).
      * lisp/progmodes/js.el (js-jsx--tag-re): Remove.
      (js-jsx--matched-tag-type): Simplify implementation with respect to
      the new implementation of js-jsx--matching-close-tag-pos.
      (js-jsx--self-closing-re): Simplify regexp slightly in sync with a
      generally simpler matching algorithm.
      (js-jsx--matching-close-tag-pos): Optimize matching algorithm by using
      multiple simple regexp searches, rather than one big complex search.
      * test/manual/indent/jsx-unclosed-2.jsx: Use the term “inequality” and
      add a test for a possible parsing foible.
  3. 27 Mar, 2019 23 commits
    • Jackson Ray Hamilton's avatar
      Add tests for miscellaneous JSX parsing feats · acab35cc
      Jackson Ray Hamilton authored
      * test/manual/indent/jsx.jsx: Add tests for JSXMemberExpression names
      and JSXOpeningFragment/JSXClosingFragment support (already supported).
    • Jackson Ray Hamilton's avatar
      Split JSX indentation calculation into several functions · ae0ee9bc
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--contextual-indentation)
      (js-jsx--expr-attribute-pos, js-jsx--expr-indentation): Extract logic
      from js-jsx--indentation, and improve the logic’s documentation.
      (js-jsx--indentation): Simplify by splitting into several
      functions (see above) and improve the logic’s documentation.
    • Jackson Ray Hamilton's avatar
      Indent expressions in JSXAttributes relative to the attribute’s name · 2b4cc702
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--syntax-propertize-tag): Refer to the
      beginning of a JSXExpressionContainer’s associated JSXAttribute (so
      line numbers can be calculated later).
      (js-jsx--text-properties): Also clear the new text property
      (js-jsx--indenting): Remove.
      (js-jsx--indent-col, js-jsx--indent-attribute-line): New variables.
      (js-jsx--indentation): Instead of alternating between two separate
      column calculations, neither necessarily correct, bind the JSX column
      such that the second call to js--proper-indentation can use it as a
      base column.
      (js--proper-indentation): Use JSX as the base column for some indents
      while indenting JSX.
      * test/manual/indent/jsx.jsx: Add more tests for expression indents.
    • Jackson Ray Hamilton's avatar
      Fix counting of nested self-closing JSXOpeningElements · 79118f8c
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--matching-close-tag-pos): Fix bug where
      self-closing JSXOpeningElements might be missed if one was nested
      within another.
      * test/manual/indent/jsx-self-closing.jsx: Add test for bug concerning
      self-closing JSXOpeningElement counting.
    • Jackson Ray Hamilton's avatar
      Indent broken arrow function bodies as an N+1th arg · e1962071
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--line-terminating-arrow-re): Revise regexp
      for use with re-search-backward.
      (js--looking-at-broken-arrow-function-p): Remove.
      (js--broken-arrow-terminates-line-p): Replacement for
      js--looking-at-broken-arrow-function-p.  Don’t consider whether an
      arrow appears at point (in an arglist); instead, just look for an
      arrow that terminates the line.
      (js--proper-indentation): Use js--broken-arrow-terminates-line-p.
      * test/manual/indent/js.js: Add test for a broken arrow as an N+1th
    • Jackson Ray Hamilton's avatar
      Rename tests to use the “.jsx” file extension · 4337acde
      Jackson Ray Hamilton authored
      * test/manual/indent/js-jsx-quote.js: Renamed to “jsx-quote.jsx”.
      * test/manual/indent/js-jsx-unclosed-1.js: Renamed to
      * test/manual/indent/js-jsx-unclosed-2.js: Renamed to
      * test/manual/indent/js-jsx.js: Renamed to “jsx.jsx”.
      * test/manual/indent/jsx-quote.jsx: Renamed from “js-jsx-quote.js”.
      * test/manual/indent/jsx-unclosed-1.jsx: Renamed from
      * test/manual/indent/jsx-unclosed-2.jsx: Renamed from
      * test/manual/indent/jsx.jsx: Renamed from “js-jsx.js”.
    • Jackson Ray Hamilton's avatar
      Improve JSX syntax propertization · 66433fd7
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--attribute-name-re): New variable.
      (js-jsx--syntax-propertize-tag): Allow “-” in JSXAttribute names.  Fix
      “out of range” error when typing at the end of a buffer.  Fix/improve
      future propertization of unfinished JSXBoundaryElements.
      * test/manual/indent/js-jsx-unclosed-2.js: Add tests for allowed
      characters in JSX.
    • Jackson Ray Hamilton's avatar
      Automatically detect JSX in JavaScript files · ec144e9a
      Jackson Ray Hamilton authored
      * lisp/files.el (auto-mode-alist): Simply enable
      javascript-mode (js-mode) when opening “.jsx” files, since the “.jsx”
      file extension will be used as an indicator of JSX syntax by js-mode,
      and more code is likely to work in js-mode than js-jsx-mode, and we
      probably want to guide users to use js-mode (with js-jsx-syntax)
      instead.  Code that used to work exclusively in js-jsx-mode (if anyone
      ever wrote any) ought to be updated to work in js-mode too when
      js-jsx-syntax is set to t.
      * lisp/progmodes/js.el (js-jsx-detect-syntax, js-jsx-regexps)
      (js-jsx--detect-and-enable, js-jsx--detect-after-change): New
      variables and functions for detecting and enabling JSX.
      (js-jsx-syntax): Update docstring with respect to the widened scope of
      the effects and use of this variable.
      (js-syntactic-mode-name, js--update-mode-name)
      (js--idly-update-mode-name, js-jsx-enable): New variable and functions
      for indicating when JSX is enabled.
      (js-mode): Detect and enable JSX.  Print all enabled syntaxes after
      the mode name whenever Emacs goes idle; this ensures lately-enabled
      syntaxes are evident.
      (js-jsx-mode): Update mode name for consistency with the state in
      which JSX is enabled in js-mode.  Update docstring to suggest
      alternative means of using JSX without this mode.  Going forward, it
      may be best to gently guide users away from js-jsx-mode, since a “one
      mode per syntax extension” model would not scale well if more syntax
      extensions were to be simultaneously supported (e.g. Facebook’s
    • Jackson Ray Hamilton's avatar
      Finish replacing SGML-based JSX detection with js-mode’s parsing · f7ac5e43
      Jackson Ray Hamilton authored
      This removes the last dependency on sgml-mode for JSX-related logic.
      * lisp/progmodes/js.el (js-jsx--start-tag-re)
      (js-jsx--end-tag-re): Remove.
      (js-jsx--looking-back-at-end-tag-p): Reimplement using text
      properties, using syntax information which ought to be slightly more
      accurate than regexps since it was found by complete parsing.
    • Jackson Ray Hamilton's avatar
      Indent JSX as parsed in a JS context · c66bfa68
      Jackson Ray Hamilton authored
      Fixes the following issues (and re-fixes indentation issues initially
      fixed but later re-broken by previous commits in the process of adding
      comprehensive JSX support):
      - https://github.com/mooz/js2-mode/issues/389#issuecomment-390766873
      - https://github.com/mooz/js2-mode/issues/482
      - Bug#32158
      - https://github.com/mooz/js2-mode/issues/462
      Previously, we delegated to sgml-mode functions for JSX indentation.
      However, there were some problems with this approach:
      - sgml-mode does not anticipate tags inside attributes when indenting,
        which compromises JSX indentation inside JSXExpressionContainers
        inside JSXAttributes.
      - In previous iterations to provide comprehensive JSX support, it
        proved tedious to disambiguate “<” and “>” as JS inequality
        operators and arrow functions from opening and closing angle
        brackets as part of SGML tags.  That code evolved into a more
        complete JSX parsing implementation for syntax-propertize rules for
        font-locking, discarding the superfluous “<”/“>” disambiguation in
        anticipation of using the improved JSX analysis for indentation.
      - Using sgml-mode functions, we controlled JSX indentation using SGML
        variables.  However, JSX is a different thing than SGML; referencing
        SGML in JS was a leaky abstraction.
      To resolve these issues, use the text properties added by the JSX
      syntax-propertize code to determine the boundaries of various aspects
      of JSX syntax, and reimplement the sgml-mode indentation code in
      js-mode with better respect to JSX indentation conventions.
      * lisp/progmodes/js.el (js-jsx-attribute-offset): New variable to
      provide a way for users to still control JSX attribute offsets as they
      could with sgml-attribute-offset before.  The value of this feature is
      dubious IMO, but it’s trivial to keep it, so let’s do it just in case.
      (js-jsx--goto-outermost-enclosing-curly): New function.
      (js-jsx--enclosing-tag-pos): Refactor to be unbounded by curlies, so
      this function can be used to find JSXExpressionContainers within JSX.
      Fix bug where an enclosing JSXElement couldn’t be found when point was
      at the start of its JSXClosingElement.  Return the JSXClosingElement’s
      position as well, so the JSXClosingElement can be indentified when
      indenting and be indented like the matching JSXOpeningElement.
      (js-jsx--at-enclosing-tag-child-p): js-jsx--enclosing-tag-pos now
      returns a list rather than a cons, so retrieve the JSXOpeningElement’s
      end position from a list.
      (js-jsx--context, js-jsx--indenting): New function and variable.
      (js-jsx--indentation): New function replacing the prior
      js-jsx--indent* functions and js-jsx-indent-line’s implementation.
      Use the JSX parsing performed in a JS context to more accurately
      calculate JSX indentation than by delegating to sgml-mode functions.
      (js--proper-indentation): Use js-jsx--indentation as yet another type
      of indentation.
      (js-jsx--as-sgml, js-jsx--outermost-enclosing-tag-pos)
      (js-jsx--indentation-type, js-jsx--indent-line-in-expression)
      (js-jsx--indent-n+1th-line): Remove obsolete functions.
      (js-jsx-indent-line): Refactor nearly-obsolete function to behave the
      same as it usually would before these changes, without respect to the
      binding of js-jsx-syntax.
      (js-jsx-mode): Remove obsolete documentation about the use of SGML
      variables to control indentation, and don’t bind indent-line-function
      any more, because it is no longer necessary given the new
      implementation of js-jsx-indent-line.
    • Jackson Ray Hamilton's avatar
      Update expectations for JSX indentation in JSXAttribute space · 91c29fbc
      Jackson Ray Hamilton authored
      * test/manual/indent/js-jsx.js: Align expectations for dangling
      closing constructs with other places in the tests.
    • Jackson Ray Hamilton's avatar
      Propertize and font-lock JSXText and JSXExpressionContainers · 7166bd2f
      Jackson Ray Hamilton authored
      This completes highlighting support for JSX, as requested in:
      - https://github.com/mooz/js2-mode/issues/140
      - https://github.com/mooz/js2-mode/issues/330
      - https://github.com/mooz/js2-mode/issues/409
      * lisp/progmodes/js.el (js--name-start-chars): Extract part of
      js--name-start-re so it can be reused in another regexp.
      (js--name-start-re): Use js--name-start-chars.
      (js-jsx--font-lock-keywords): Use new matchers.
      (js-jsx--match-text, js-jsx--match-expr): New matchers to remove
      typical JS font-locking and extend the font-locked region,
      (js-jsx--tag-re, js-jsx--self-closing-re): New regexps matching JSX.
      (js-jsx--matched-tag-type, js-jsx--matching-close-tag-pos)
      (js-jsx--enclosing-curly-pos, js-jsx--enclosing-tag-pos)
      (js-jsx--at-enclosing-tag-child-p): New functions for parsing and
      analyzing JSX.
      (js-jsx--text-range, js-jsx--syntax-propertize-tag-text): New
      functions for propertizing JSXText.
      (js-jsx--syntax-propertize-tag): Propertize JSXText children of tags.
      (js-jsx--text-properties): Remove JSXText-related text properties when
      (js-mode): Extend the syntax-propertize region with
      syntax-propertize-multiline; we are now adding the syntax-multiline
      text property to buffer ranges that are JSXText to ensure the whole
      multiline JSX construct is reidentified.
    • Jackson Ray Hamilton's avatar
      Font-lock JSX while editing it by extending regions · 539191cc
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--font-lock-keywords):
      Call tag beginning and end matchers.
      (js-jsx--match-tag-beg, js-jsx--match-tag-end): New functions.
      (js-jsx--syntax-propertize-tag): Record buffer positions of JSXElement
      beginning and end for font-locking.
      (js-jsx--syntax-propertize-extend-region): New functions for extending
      the syntax-propertize region backwards to the start of a JSXElement so
      its JSXAttribute children on its n+1th lines can be parsed as such
      while editing those lines.
      (js-mode): Add js--syntax-propertize-extend-region to
    • Jackson Ray Hamilton's avatar
      Add basic JSX font-locking · 071c1349
      Jackson Ray Hamilton authored
      Font-lock JSX from the beginning of the buffer to the end.  Tends to
      break temporarily when editing lines, because the parser doesn’t yet
      look backwards to determine if the end of a tag in the current range
      starts before the range.
      This also re-breaks some tests fixed by previous commits, as we begin
      to take a different direction in our parsing code, looking for JSX,
      rather than for non-JSX.  The parsing code will eventually provide
      information for indentation again.
      * lisp/progmodes/js.el (js--dotted-captured-name-re)
      (js-jsx--disambiguate-end-of-tag, js-jsx--disambiguate-syntax):
      (js-jsx--font-lock-keywords): New variable.
      (js--font-lock-keywords-3): Add JSX matchers.
      (js-jsx--match-tag-name, js-jsx--match-attribute-name): New functions.
      (js-jsx--syntax-propertize-tag): New function to aid in JSX
      font-locking and eventually indentation.
      (js-jsx--text-properties): New variable.
      (js-syntax-propertize): Propertize JSX properly using
    • Jackson Ray Hamilton's avatar
      Use js-jsx- prefix for functions and variables · 79954c6c
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--disambiguate-beginning-of-jsx-tag): Rename
      to js-jsx--disambiguate-beginning-of-tag.
      (js--disambiguate-end-of-jsx-tag): Rename to
      (js--disambiguate-js-from-jsx): Rename to js-jsx--disambiguate-syntax.
      (js--jsx-start-tag-re): Rename to js-jsx--start-tag-re.
      (js--looking-at-jsx-start-tag-p): Rename to
      (js--jsx-end-tag-re): Rename to js-jsx--end-tag-re.
      (js--looking-back-at-jsx-end-tag-p): Rename to
      (js--as-sgml): Rename to js-jsx--as-sgml.
      (js--outermost-enclosing-jsx-tag-pos): Rename to
      (js--jsx-indentation): Rename to js-jsx--indentation-type.
      (js--indent-line-in-jsx-expression): Rename to
      (js--indent-n+1th-jsx-line): Rename to js-jsx--indent-n+1th-line.
    • Jackson Ray Hamilton's avatar
      js-syntax-propertize: Disambiguate JS from JSX, fixing some indents · 85fccaf3
      Jackson Ray Hamilton authored
      Fix some JSX indentation bugs:
      - Bug#24896 / https://github.com/mooz/js2-mode/issues/389
      - Bug#30225
      - https://github.com/mooz/js2-mode/issues/459
      * lisp/progmodes/js.el (js--dotted-captured-name-re)
      (js--unary-keyword-re, js--unary-keyword-p)
      (js--disambiguate-js-from-jsx): New variables and functions.
      (js-syntax-propertize): Additionally clarify when syntax is JS so that
      ‘(with-syntax-table sgml-mode-syntax-table …)’ does not mistake some
      JS punctuation syntax for SGML parenthesis syntax, namely ‘<’ and ‘>’.
      * test/manual/indent/js-jsx-unclosed-2.js: Add additional test for
      unary operator parsing.
    • Jackson Ray Hamilton's avatar
      Add new (failing) unclosed JSX test and separate such tests · 24fcdad9
      Jackson Ray Hamilton authored
      * test/manual/indent/js-jsx.js: Move test with intentional scan error to
      its own file, js-jsx-unclosed-1.js.
      * test/manual/indent/js-jsx-unclosed-1.js: New file.
      * test/manual/indent/js-jsx-unclosed-2.js: New file with test for
      regression caused by new ambiguous parsing of JS/JSX.
    • Jackson Ray Hamilton's avatar
      Refactor JSX indentation code to improve enclosing JSX discovery · d5dae48a
      Jackson Ray Hamilton authored
      Fix a number of bugs reported for JSX indentation (caused by poor JSX
      - https://github.com/mooz/js2-mode/issues/140#issuecomment-166250016
      - https://github.com/mooz/js2-mode/issues/490
      - Bug#24896 / https://github.com/mooz/js2-mode/issues/389 (with
      respect to comments)
      - Bug#26001 /
      - https://github.com/mooz/js2-mode/issues/411 / Bug#27000 /
      Potentially manifest some new bugs (due to false positives with ‘<’
      and ‘>’ and SGML detection).  Slow down indentation a fair bit.
      * list/progmodes/js.el (js-jsx-syntax, js--jsx-start-tag-re)
      (js--looking-at-jsx-start-tag-p, js--looking-back-at-jsx-end-tag-p):
      New variables and functions.
      (js--jsx-find-before-tag, js--jsx-after-tag-re): Deleted.
      (js--looking-at-operator-p): Don’t mistake a JSXOpeningElement for the
      ‘<’ operator.
      (js--continued-expression-p): Don’t mistake a JSXClosingElement as a
      fragment of a continued expression including the ‘>’ operator.
      (js--as-sgml): Simplify.  Probably needn’t bind forward-sexp-function
      to nil (sgml-mode already does) and probably shouldn’t bind
      parse-sexp-lookup-properties to nil either (see Bug#24896).
      (js--outermost-enclosing-jsx-tag-pos): Find enclosing JSX more
      accurately than js--jsx-find-before-tag.  Use sgml-mode’s parsing
      logic, rather than unreliable heuristics like paren-wrapping.  This
      implementation is much slower; the previous implementation was fast,
      but at the expense of accuracy.  To make up for all the grief we’ve
      caused users, we will prefer accuracy over speed from now on.  That
      said, this can still probably be optimized a lot.
      (js--jsx-indented-element-p): Rename to js--jsx-indentation, since it
      doesn’t just return a boolean.
      (js--jsx-indentation): Refactor js--jsx-indented-element-p to simplify
      the implementation as the improved accuracy of other code allows (and
      to repent for some awful stylistic choices I made earlier).
      (js--expression-in-sgml-indent-line): Rename to
      js--indent-line-in-jsx-expression, since it’s a private function and
      we can give it a name that reads more like English.
      (js--indent-line-in-jsx-expression): Restructure point adjustment
      logic more like js-indent-line.
      (js--indent-n+1th-jsx-line): New function to complement
      (js-jsx-indent-line): Refactor.  Don’t bind js--continued-expression-p
      to ignore any more; instead, rely on the improved accuracy of
      (js-jsx-mode): Set js-jsx-syntax to t.  For now, this will be the flag
      we use to determine whether ‘JSX is enabled.’  (Maybe later, we will
      refactor the code to use this variable instead of requiring
      js-jsx-mode to be enabled, thus rendering the mode obsolete.)
    • Jackson Ray Hamilton's avatar
      Add failing tests for JSX indentation bugs · 754f826d
      Jackson Ray Hamilton authored
      * test/manual/indent/js-jsx.js: Add failing tests for all the js-mode
      and js2-mode JSX indentation bugs reported over the years that I could
      find.  Some may be duplicates, so I have grouped similar reports
      together, for now; we’ll see for certain which distinct cases we need
      once we start actually implementing fixes.
      * test/manual/indent/js-jsx-quote.js: New file with a nasty test.
    • NicolasPetton's avatar
    • YAMAMOTO Mitsuharu's avatar
      Support native image resizing on cairo · 2755cf18
      YAMAMOTO Mitsuharu authored
      * src/xterm.c (x_cr_draw_image): Add arguments image_width and
      image_height and support scaling.  All callers changed.
      * src/image.c (Fimage_scaling_p): Return t when USE_CAIRO.
      (x_set_image_size) [USE_CAIRO]: Record the scaled dimensions
      in the image struct.
      * src/dispextern.h (HAVE_NATIVE_SCALING): Define when
      USE_CAIRO as well.
      * etc/NEWS: Update the announcement of native image scaling.
    • YAMAMOTO Mitsuharu's avatar
      Fix cairo image drawing with box · d7e44265
      YAMAMOTO Mitsuharu authored
      * src/xterm.c (x_cr_draw_image): Don't call cr_clip for non-mask case.
      (x_draw_image_foreground) [USE_CAIRO]: Draw image here ...
      (x_draw_image_glyph_string) [USE_CAIRO]: ... instead of here.
      (x_draw_image_foreground, x_draw_image_foreground_1)
      (x_draw_image_glyph_string) [USE_CAIRO]: Ifdef away unused code path.
    • Paul Eggert's avatar
      2019-03-26 regex cleanup · 5d6a3144
      Paul Eggert authored
      Problems reported by Mattias Engdegård in:
      * lisp/align.el (align-rules-list):
      * lisp/speedbar.el (speedbar-check-read-only, speedbar-check-vc):
      * lisp/vc/diff-mode.el (diff-add-change-log-entries-other-window):
      * lisp/woman.el (woman-parse-numeric-arg):
      Put "-" at end of character alternatives, since a range was not intended.
      * lisp/erc/erc.el (font-lock):
      * lisp/mail/footnote.el (cl-seq):
      Avoid duplicate character alternatives by using cl-seq API.
      * lisp/mail/footnote.el (footnote--current-regexp):
      * lisp/textmodes/css-mode.el (css--font-lock-keywords):
      Avoid repetition of repetition.
      * lisp/net/webjump.el (webjump-url-encode):
      Add ~ to character alternatives, and rewrite confusing range.
      * lisp/progmodes/verilog-mode.el (verilog-compiler-directives)
      Remove duplicate.
      * lisp/progmodes/verilog-mode.el (verilog-preprocessor-re):
      * lisp/textmodes/css-mode.el (css--font-lock-keywords):
      Don’t escape a char that doesn’t need it.
      * lisp/textmodes/picture.el (picture-tab-chars): In docstring,
      do not say regexp characters will be quoted; merely say in
      another way that the syntax is that of character alternatives.
      (picture-set-tab-stops, picture-tab-search): Don’t attempt
      to regexp-quote picture-tab-chars.
      (picture-tab-search): Quote \ in picture-tab-chars for
      skip-chars-backwards, which treats \ differently than
      regexp character alternatives do.
  4. 26 Mar, 2019 6 commits
  5. 25 Mar, 2019 5 commits
    • Paul Eggert's avatar
      Port recent ngettext stub to non-glibc · 7f967b16
      Paul Eggert authored
      * src/editfns.c: Don’t try to call glibc ngettext;
      we’re not ready for that yet.
      (Fngettext): Do not restrict integer arguments to fixnums.
      Improve doc string a bit.
    • Paul Eggert's avatar
      Update from Gnulib. · a3c55309
      Paul Eggert authored
      This incorporates:
      2019-03-23 Support cross-compilation to musl libc
      2019-03-23 noreturn: In C++ mode with clang, use _Noreturn as fallback
      2019-03-22 _Noreturn: beware of C's _Noreturn in C++ pre C++11
      2019-03-19 Help making signal handlers more reliable
      2019-03-18 _Noreturn: clang and MSVC do support [[noreturn]] in C++11
      2019-03-17 _Noreturn: GCC 4.7 does not support [[noreturn]] in C++11
      2019-03-14 all: Update URLs to msdn.microsoft.com
      * doc/misc/texinfo.tex, lib/_Noreturn.h, lib/gettimeofday.c:
      * lib/mktime.c, lib/regcomp.c, lib/regexec.c, lib/stat-time.h:
      * lib/utimens.c, m4/fdopendir.m4, m4/getgroups.m4:
      * m4/gettimeofday.m4, m4/gnulib-common.m4, m4/putenv.m4, m4/utimes.m4:
      Update from gnulib.
    • Juri Linkov's avatar
      * lisp/vc/vc.el (vc-diff-mergebase, vc-log-mergebase): New commands. · d43af7b6
      Juri Linkov authored
      * lisp/vc/vc-git.el (vc-git-mergebase): New function.
      (vc-git-print-log): Interpret string value of arg LIMIT as an end-revision.
      * lisp/vc/vc-hooks.el (vc-prefix-map): Bind 'vc-log-mergebase' to
      'C-x v M L', and 'vc-diff-mergebase' to 'C-x v M D'.  (Bug#33950)
    • Paul Eggert's avatar
      Fix alignment bug with pure bignums · db53731c
      Paul Eggert authored
      Problem found on 32-bit sparc, which has stricter alignment
      checking than x86-64.
      * src/alloc.c (pure_alloc): When TYPE is negative it now specifies
      the negation of the required alignment of the result.
      (make_pure_bignum): Specify bignum limb alignment.
    • Juri Linkov's avatar
      * lisp/international/mule-cmds.el (ngettext): Move to editfns.c. · 389475db
      Juri Linkov authored
      * src/editfns.c (Fngettext): Move from mule-cmds.el and use
      gettext's ngettext when available.