aitjcize / cppman

C++ 98/11/14 manual pages for Linux/MacOS
GNU General Public License v3.0
1.27k stars 79 forks source link

Properly escape regex string literals #170

Closed meator closed 4 months ago

meator commented 4 months ago

Python3.11 and newer versions like to complain about unknown escape sequences like \., \s etc.

When you install cppman through a package manager on Linux, you'll see something similar to this:

...
cppman-0.5.6_2: configuring ...
Byte-compiling python3.12 code for module cppman...
usr/lib/python3.12/site-packages/cppman/formatter/cppreference.py:47: SyntaxWarning: invalid escape sequence '\['
  '^(.*?)(\[(?:(?:since|until) )?C\+\+\d+\]\s*(,\s*)?)+$', head)
usr/lib/python3.12/site-packages/cppman/formatter/cppreference.py:115: SyntaxWarning: invalid escape sequence '\s'
  lambda x: re.sub('\s*</span><span>\s*', r', ', x.group(0)), re.S),
usr/lib/python3.12/site-packages/cppman/formatter/tableparser.py:147: SyntaxWarning: invalid escape sequence '\^'
  fd.write('\^%s' % ('|' if i < total - 1 else ''))
usr/lib/python3.12/site-packages/cppman/main.py:126: SyntaxWarning: invalid escape sequence '\.'
  self.add_url_filter('\.(jpg|jpeg|gif|png|js|css|swf|svg)$')
usr/lib/python3.12/site-packages/cppman/main.py:396: SyntaxWarning: invalid escape sequence '\s'
  if re.match("\s*Type\s*", tds[0].get_text()):
usr/lib/python3.12/site-packages/cppman/main.py:399: SyntaxWarning: invalid escape sequence '\s'
  res = re.search('^\s*(\S*)\s+.*$', tds[0].get_text())
usr/lib/python3.12/site-packages/cppman/main.py:417: SyntaxWarning: invalid escape sequence '\S'
  res = re.search('^.* (\S+)\s*=.*$', text)
usr/lib/python3.12/site-packages/cppman/main.py:430: SyntaxWarning: invalid escape sequence '\S'
  res = re.search('^.* (\S+)\s*=.*$', text)
usr/lib/python3.12/site-packages/cppman/main.py:580: SyntaxWarning: invalid escape sequence '\('
  pat = re.compile('(.*?)(%s)(.*?)( \(.*\))?$' %
usr/lib/python3.12/site-packages/cppman/formatter/cppreference.py:47: SyntaxWarning: invalid escape sequence '\['
  '^(.*?)(\[(?:(?:since|until) )?C\+\+\d+\]\s*(,\s*)?)+$', head)
usr/lib/python3.12/site-packages/cppman/formatter/cppreference.py:115: SyntaxWarning: invalid escape sequence '\s'
  lambda x: re.sub('\s*</span><span>\s*', r', ', x.group(0)), re.S),
usr/lib/python3.12/site-packages/cppman/formatter/tableparser.py:147: SyntaxWarning: invalid escape sequence '\^'
  fd.write('\^%s' % ('|' if i < total - 1 else ''))
usr/lib/python3.12/site-packages/cppman/main.py:126: SyntaxWarning: invalid escape sequence '\.'
  self.add_url_filter('\.(jpg|jpeg|gif|png|js|css|swf|svg)$')
usr/lib/python3.12/site-packages/cppman/main.py:396: SyntaxWarning: invalid escape sequence '\s'
  if re.match("\s*Type\s*", tds[0].get_text()):
usr/lib/python3.12/site-packages/cppman/main.py:399: SyntaxWarning: invalid escape sequence '\s'
  res = re.search('^\s*(\S*)\s+.*$', tds[0].get_text())
usr/lib/python3.12/site-packages/cppman/main.py:417: SyntaxWarning: invalid escape sequence '\S'
  res = re.search('^.* (\S+)\s*=.*$', text)
usr/lib/python3.12/site-packages/cppman/main.py:430: SyntaxWarning: invalid escape sequence '\S'
  res = re.search('^.* (\S+)\s*=.*$', text)
usr/lib/python3.12/site-packages/cppman/main.py:580: SyntaxWarning: invalid escape sequence '\('
  pat = re.compile('(.*?)(%s)(.*?)( \(.*\))?$' %
...

This PR fixes these warnings.