prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Incorrect tokenization of dash punctuation in Spanish
  In Spanish text, the conventions for using dashes and em-dashes as punctuation seems to be considerably different than in English. Spacy often does not tokenize the dash or em-dash as a separate token, instead keeping it attached to the closest word.
  
  For example, the Spanish sentence:
  —Yo me llamo... –murmuró el niño– Emilio Sánchez Pérez.
  English Translation:
  "My name is...", murmured the boy, "Emilio Sanchez Perez."
  
  Here, the Spanish dash is used like a comma. The em-dash at the beginning of the sentence is used like a double quote. I believe that the fact that there is no space between the dash and word is throwing off the tokenizer.
  
  The Spanish sentence above is tokenized as:
  —Yo
  me
  llamo
  ...
  –murmuró
  el
  niño–
  Emilio
  Sánchez
  Pérez
  .
  
  I would expect the tokenization to be
  —
  Yo
  me
  llamo
  ...
  –
  murmuró
  el
  niño
  –
  Emilio
  Sánchez
  Pérez
  .
  
  ## Your Environment
  * **spaCy version:** 2.0.12
  * **Platform:** Darwin-18.0.0-x86_64-i386-64bit
  * **Python version:** 3.7.0
  * **Models:** de, es, en
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `spacy/lang/punctuation.py`
  Content:
  ```
  1 # coding: utf8
  2 from __future__ import unicode_literals
  3 
  4 from .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY, LIST_ICONS
  5 from .char_classes import HYPHENS
  6 from .char_classes import CURRENCY, UNITS
  7 from .char_classes import CONCAT_QUOTES, ALPHA_LOWER, ALPHA_UPPER, ALPHA
  8 
  9 
  10 _prefixes = (
  11     ["§", "%", "=", r"\+(?![0-9])"]
  12     + LIST_PUNCT
  13     + LIST_ELLIPSES
  14     + LIST_QUOTES
  15     + LIST_CURRENCY
  16     + LIST_ICONS
  17 )
  18 
  19 
  20 _suffixes = (
  21     LIST_PUNCT
  22     + LIST_ELLIPSES
  23     + LIST_QUOTES
  24     + LIST_ICONS
  25     + ["'s", "'S", "’s", "’S"]
  26     + [
  27         r"(?<=[0-9])\+",
  28         r"(?<=°[FfCcKk])\.",
  29         r"(?<=[0-9])(?:{c})".format(c=CURRENCY),
  30         r"(?<=[0-9])(?:{u})".format(u=UNITS),
  31         r"(?<=[0-9{al}{e}(?:{q})])\.".format(al=ALPHA_LOWER, e=r"%²\-\+", q=CONCAT_QUOTES),
  32         r"(?<=[{au}][{au}])\.".format(au=ALPHA_UPPER),
  33     ]
  34 )
  35 
  36 _infixes = (
  37     LIST_ELLIPSES
  38     + LIST_ICONS
  39     + [
  40         r"(?<=[0-9])[+\-\*^](?=[0-9-])",
  41         r"(?<=[{al}])\.(?=[{au}])".format(al=ALPHA_LOWER, au=ALPHA_UPPER),
  42         r"(?<=[{a}]),(?=[{a}])".format(a=ALPHA),
  43         r'(?<=[{a}])(?:{h})(?=[{a}])'.format(a=ALPHA, h=HYPHENS),
  44         r'(?<=[{a}])[:<>=/](?=[{a}])'.format(a=ALPHA),
  45     ]
  46 )
  47 
  48 TOKENIZER_PREFIXES = _prefixes
  49 TOKENIZER_SUFFIXES = _suffixes
  50 TOKENIZER_INFIXES = _infixes
  51
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/spacy/lang/punctuation.py b/spacy/lang/punctuation.py
  --- a/spacy/lang/punctuation.py
  +++ b/spacy/lang/punctuation.py
  @@ -1,14 +1,13 @@
   # coding: utf8
   from __future__ import unicode_literals
   
  -from .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY, LIST_ICONS
  -from .char_classes import HYPHENS
  -from .char_classes import CURRENCY, UNITS
  +from .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY
  +from .char_classes import LIST_ICONS, HYPHENS, CURRENCY, UNITS
   from .char_classes import CONCAT_QUOTES, ALPHA_LOWER, ALPHA_UPPER, ALPHA
   
   
   _prefixes = (
  -    ["§", "%", "=", r"\+(?![0-9])"]
  +    ["§", "%", "=", "—", "–", r"\+(?![0-9])"]
       + LIST_PUNCT
       + LIST_ELLIPSES
       + LIST_QUOTES
  @@ -22,13 +21,15 @@
       + LIST_ELLIPSES
       + LIST_QUOTES
       + LIST_ICONS
  -    + ["'s", "'S", "’s", "’S"]
  +    + ["'s", "'S", "’s", "’S", "—", "–"]
       + [
           r"(?<=[0-9])\+",
           r"(?<=°[FfCcKk])\.",
           r"(?<=[0-9])(?:{c})".format(c=CURRENCY),
           r"(?<=[0-9])(?:{u})".format(u=UNITS),
  -        r"(?<=[0-9{al}{e}(?:{q})])\.".format(al=ALPHA_LOWER, e=r"%²\-\+", q=CONCAT_QUOTES),
  +        r"(?<=[0-9{al}{e}(?:{q})])\.".format(
  +            al=ALPHA_LOWER, e=r"%²\-\+", q=CONCAT_QUOTES
  +        ),
           r"(?<=[{au}][{au}])\.".format(au=ALPHA_UPPER),
       ]
   )
  @@ -40,8 +41,8 @@
           r"(?<=[0-9])[+\-\*^](?=[0-9-])",
           r"(?<=[{al}])\.(?=[{au}])".format(al=ALPHA_LOWER, au=ALPHA_UPPER),
           r"(?<=[{a}]),(?=[{a}])".format(a=ALPHA),
  -        r'(?<=[{a}])(?:{h})(?=[{a}])'.format(a=ALPHA, h=HYPHENS),
  -        r'(?<=[{a}])[:<>=/](?=[{a}])'.format(a=ALPHA),
  +        r"(?<=[{a}])(?:{h})(?=[{a}])".format(a=ALPHA, h=HYPHENS),
  +        r"(?<=[{a}])[:<>=/](?=[{a}])".format(a=ALPHA),
       ]
   )
  
verification_info: {"golden_diff": "diff --git a/spacy/lang/punctuation.py b/spacy/lang/punctuation.py\n--- a/spacy/lang/punctuation.py\n+++ b/spacy/lang/punctuation.py\n@@ -1,14 +1,13 @@\n # coding: utf8\n from __future__ import unicode_literals\n \n-from .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY, LIST_ICONS\n-from .char_classes import HYPHENS\n-from .char_classes import CURRENCY, UNITS\n+from .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY\n+from .char_classes import LIST_ICONS, HYPHENS, CURRENCY, UNITS\n from .char_classes import CONCAT_QUOTES, ALPHA_LOWER, ALPHA_UPPER, ALPHA\n \n \n _prefixes = (\n-    [\"\u00a7\", \"%\", \"=\", r\"\\+(?![0-9])\"]\n+    [\"\u00a7\", \"%\", \"=\", \"\u2014\", \"\u2013\", r\"\\+(?![0-9])\"]\n     + LIST_PUNCT\n     + LIST_ELLIPSES\n     + LIST_QUOTES\n@@ -22,13 +21,15 @@\n     + LIST_ELLIPSES\n     + LIST_QUOTES\n     + LIST_ICONS\n-    + [\"'s\", \"'S\", \"\u2019s\", \"\u2019S\"]\n+    + [\"'s\", \"'S\", \"\u2019s\", \"\u2019S\", \"\u2014\", \"\u2013\"]\n     + [\n         r\"(?<=[0-9])\\+\",\n         r\"(?<=\u00b0[FfCcKk])\\.\",\n         r\"(?<=[0-9])(?:{c})\".format(c=CURRENCY),\n         r\"(?<=[0-9])(?:{u})\".format(u=UNITS),\n-        r\"(?<=[0-9{al}{e}(?:{q})])\\.\".format(al=ALPHA_LOWER, e=r\"%\u00b2\\-\\+\", q=CONCAT_QUOTES),\n+        r\"(?<=[0-9{al}{e}(?:{q})])\\.\".format(\n+            al=ALPHA_LOWER, e=r\"%\u00b2\\-\\+\", q=CONCAT_QUOTES\n+        ),\n         r\"(?<=[{au}][{au}])\\.\".format(au=ALPHA_UPPER),\n     ]\n )\n@@ -40,8 +41,8 @@\n         r\"(?<=[0-9])[+\\-\\*^](?=[0-9-])\",\n         r\"(?<=[{al}])\\.(?=[{au}])\".format(al=ALPHA_LOWER, au=ALPHA_UPPER),\n         r\"(?<=[{a}]),(?=[{a}])\".format(a=ALPHA),\n-        r'(?<=[{a}])(?:{h})(?=[{a}])'.format(a=ALPHA, h=HYPHENS),\n-        r'(?<=[{a}])[:<>=/](?=[{a}])'.format(a=ALPHA),\n+        r\"(?<=[{a}])(?:{h})(?=[{a}])\".format(a=ALPHA, h=HYPHENS),\n+        r\"(?<=[{a}])[:<>=/](?=[{a}])\".format(a=ALPHA),\n     ]\n )\n", "issue": "Incorrect tokenization of dash punctuation in Spanish\nIn Spanish text, the conventions for using dashes and em-dashes as punctuation seems to be considerably different than in English. Spacy often does not tokenize the dash or em-dash as a separate token, instead keeping it attached to the closest word.\r\n\r\nFor example, the Spanish sentence:\r\n\u2014Yo me llamo... \u2013murmur\u00f3 el ni\u00f1o\u2013 Emilio S\u00e1nchez P\u00e9rez.\r\nEnglish Translation:\r\n\"My name is...\", murmured the boy, \"Emilio Sanchez Perez.\"\r\n\r\nHere, the Spanish dash is used like a comma. The em-dash at the beginning of the sentence is used like a double quote. I believe that the fact that there is no space between the dash and word is throwing off the tokenizer.\r\n\r\nThe Spanish sentence above is tokenized as:\r\n\u2014Yo\r\nme\r\nllamo\r\n...\r\n\u2013murmur\u00f3\r\nel\r\nni\u00f1o\u2013\r\nEmilio\r\nS\u00e1nchez\r\nP\u00e9rez\r\n.\r\n\r\nI would expect the tokenization to be\r\n\u2014\r\nYo\r\nme\r\nllamo\r\n...\r\n\u2013\r\nmurmur\u00f3\r\nel\r\nni\u00f1o\r\n\u2013\r\nEmilio\r\nS\u00e1nchez\r\nP\u00e9rez\r\n.\r\n\r\n## Your Environment\r\n* **spaCy version:** 2.0.12\r\n* **Platform:** Darwin-18.0.0-x86_64-i386-64bit\r\n* **Python version:** 3.7.0\r\n* **Models:** de, es, en\r\n\n", "before_files": [{"content": "# coding: utf8\nfrom __future__ import unicode_literals\n\nfrom .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY, LIST_ICONS\nfrom .char_classes import HYPHENS\nfrom .char_classes import CURRENCY, UNITS\nfrom .char_classes import CONCAT_QUOTES, ALPHA_LOWER, ALPHA_UPPER, ALPHA\n\n\n_prefixes = (\n    [\"\u00a7\", \"%\", \"=\", r\"\\+(?![0-9])\"]\n    + LIST_PUNCT\n    + LIST_ELLIPSES\n    + LIST_QUOTES\n    + LIST_CURRENCY\n    + LIST_ICONS\n)\n\n\n_suffixes = (\n    LIST_PUNCT\n    + LIST_ELLIPSES\n    + LIST_QUOTES\n    + LIST_ICONS\n    + [\"'s\", \"'S\", \"\u2019s\", \"\u2019S\"]\n    + [\n        r\"(?<=[0-9])\\+\",\n        r\"(?<=\u00b0[FfCcKk])\\.\",\n        r\"(?<=[0-9])(?:{c})\".format(c=CURRENCY),\n        r\"(?<=[0-9])(?:{u})\".format(u=UNITS),\n        r\"(?<=[0-9{al}{e}(?:{q})])\\.\".format(al=ALPHA_LOWER, e=r\"%\u00b2\\-\\+\", q=CONCAT_QUOTES),\n        r\"(?<=[{au}][{au}])\\.\".format(au=ALPHA_UPPER),\n    ]\n)\n\n_infixes = (\n    LIST_ELLIPSES\n    + LIST_ICONS\n    + [\n        r\"(?<=[0-9])[+\\-\\*^](?=[0-9-])\",\n        r\"(?<=[{al}])\\.(?=[{au}])\".format(al=ALPHA_LOWER, au=ALPHA_UPPER),\n        r\"(?<=[{a}]),(?=[{a}])\".format(a=ALPHA),\n        r'(?<=[{a}])(?:{h})(?=[{a}])'.format(a=ALPHA, h=HYPHENS),\n        r'(?<=[{a}])[:<>=/](?=[{a}])'.format(a=ALPHA),\n    ]\n)\n\nTOKENIZER_PREFIXES = _prefixes\nTOKENIZER_SUFFIXES = _suffixes\nTOKENIZER_INFIXES = _infixes\n", "path": "spacy/lang/punctuation.py"}], "after_files": [{"content": "# coding: utf8\nfrom __future__ import unicode_literals\n\nfrom .char_classes import LIST_PUNCT, LIST_ELLIPSES, LIST_QUOTES, LIST_CURRENCY\nfrom .char_classes import LIST_ICONS, HYPHENS, CURRENCY, UNITS\nfrom .char_classes import CONCAT_QUOTES, ALPHA_LOWER, ALPHA_UPPER, ALPHA\n\n\n_prefixes = (\n    [\"\u00a7\", \"%\", \"=\", \"\u2014\", \"\u2013\", r\"\\+(?![0-9])\"]\n    + LIST_PUNCT\n    + LIST_ELLIPSES\n    + LIST_QUOTES\n    + LIST_CURRENCY\n    + LIST_ICONS\n)\n\n\n_suffixes = (\n    LIST_PUNCT\n    + LIST_ELLIPSES\n    + LIST_QUOTES\n    + LIST_ICONS\n    + [\"'s\", \"'S\", \"\u2019s\", \"\u2019S\", \"\u2014\", \"\u2013\"]\n    + [\n        r\"(?<=[0-9])\\+\",\n        r\"(?<=\u00b0[FfCcKk])\\.\",\n        r\"(?<=[0-9])(?:{c})\".format(c=CURRENCY),\n        r\"(?<=[0-9])(?:{u})\".format(u=UNITS),\n        r\"(?<=[0-9{al}{e}(?:{q})])\\.\".format(\n            al=ALPHA_LOWER, e=r\"%\u00b2\\-\\+\", q=CONCAT_QUOTES\n        ),\n        r\"(?<=[{au}][{au}])\\.\".format(au=ALPHA_UPPER),\n    ]\n)\n\n_infixes = (\n    LIST_ELLIPSES\n    + LIST_ICONS\n    + [\n        r\"(?<=[0-9])[+\\-\\*^](?=[0-9-])\",\n        r\"(?<=[{al}])\\.(?=[{au}])\".format(al=ALPHA_LOWER, au=ALPHA_UPPER),\n        r\"(?<=[{a}]),(?=[{a}])\".format(a=ALPHA),\n        r\"(?<=[{a}])(?:{h})(?=[{a}])\".format(a=ALPHA, h=HYPHENS),\n        r\"(?<=[{a}])[:<>=/](?=[{a}])\".format(a=ALPHA),\n    ]\n)\n\nTOKENIZER_PREFIXES = _prefixes\nTOKENIZER_SUFFIXES = _suffixes\nTOKENIZER_INFIXES = _infixes\n", "path": "spacy/lang/punctuation.py"}]}