code: def rl_wordglue(x):
      
      patterns = (
          # частицы склеиваем с предыдущим словом
          (re.compile(u'(\\s+)(же|ли|ль|бы|б|ж|ка)([\\.,!\\?:;]?\\s+)', re.UNICODE), u'\u202f\\2\\3'),
          # склеиваем короткие слова со следующим словом
          (re.compile(u'\\b([a-zA-ZА-Яа-я]{1,3})(\\s+)', re.UNICODE), u'\\1\u202f'),
          # склеиваем тире с предыдущим словом
          (re.compile(u'(\\s+)([\u2014\\-]+)(\\s+)', re.UNICODE), u'\u202f\\2\\3'),
          # склеиваем два последних слова в абзаце между собой
          # полагается, что абзацы будут передаваться отдельной строкой
          (re.compile(u'([^\\s]+)\\s+([^\\s]+)$', re.UNICODE), u'\\1\u202f\\2'),
      )
      return _sub_patterns(patterns, x)
docs: Glue (set nonbreakable space) short words with word before/after