ve.ui.MWLinkAction: Improve ISBN and RFC/PMID autolinking

These changes allow us to be more aggressive in autolinking ISBNs (no
need anymore to wait for the user to type a space or move their
selection) and more correct in autolinking RFCs and PMIDs (stray
spaces and dashes no longer mess them up).

* ISBN numbers can only be 10 or 13 digits long. We don't need to
  handle arbitrary lengths.
  * If a number does not begin with 978 or 979, it's the ISBN-10 variant
    and we can autolink it as soon as the user types 10 digits.
  * If a number begins with 978 or 979, it can be either.
    * But if we already have 13 digits typed, autolink immediately.
    * Otherwise, use a delayed sequence to see if it ends at 10 digits.
* RFC and PMID numbers can consist only of digits, no optional spaces
  or dashes are allowed. Typing a space or dash will immediately
  autolink the number.

Bug: T117165
Change-Id: I6a085cd78d910661245a351f3ceb3fabe2f093cf
This commit is contained in:
Bartosz Dziewoński 2017-03-06 11:08:50 +01:00 committed by Jforrester
parent 5afd15b2cc
commit 3d5cedb0ff

View file

@ -166,8 +166,17 @@ ve.ui.commandRegistry.register(
)
);
// The regexps don't have to be precise; we'll validate the magic
// link in #autolinkMagicLink above.
ve.ui.sequenceRegistry.register(
// This regexp doesn't have to be precise; we'll validate the magic
// link in #autolinkMagicLink above.
new ve.ui.Sequence( 'autolinkMagicLink', 'autolinkMagicLink', /\b(RFC|PMID|ISBN)\s+[0-9]([- 0-9]*)[0-9Xx][- ]?$/, 0, true, true )
new ve.ui.Sequence( 'autolinkMagicLinkIsbn10', 'autolinkMagicLink', /\bISBN\s+(?!97[89])([0-9][ -]?){9}[0-9Xx]$/, 0, true )
);
ve.ui.sequenceRegistry.register(
new ve.ui.Sequence( 'autolinkMagicLinkIsbn13', 'autolinkMagicLink', /\bISBN\s+(97[89])[ -]?([0-9][ -]?){9}[0-9Xx]$/, 0, true )
);
ve.ui.sequenceRegistry.register(
new ve.ui.Sequence( 'autolinkMagicLinkIsbn', 'autolinkMagicLink', /\bISBN\s+(97[89][ -]?)?([0-9][ -]?){9}[0-9Xx]$/, 0, true, true )
);
ve.ui.sequenceRegistry.register(
new ve.ui.Sequence( 'autolinkMagicLinkRfcPmid', 'autolinkMagicLink', /\b(RFC|PMID)\s+[0-9]+$/, 0, true, true )
);