@@ -78,20 +78,41 @@ class or function within a module or module in a package. If the
7878from reprlib import Repr
7979from traceback import format_exception_only
8080
81- from _pyrepl .pager import (get_pager , pipe_pager ,
82- plain_pager , tempfile_pager , tty_pager )
83-
84- # Expose plain() as pydoc.plain()
85- from _pyrepl .pager import plain # noqa: F401
86-
87-
88- # --------------------------------------------------------- old names
89-
90- getpager = get_pager
91- pipepager = pipe_pager
92- plainpager = plain_pager
93- tempfilepager = tempfile_pager
94- ttypager = tty_pager
81+ try :
82+ from _pyrepl .pager import (get_pager , pipe_pager ,
83+ plain_pager , tempfile_pager , tty_pager )
84+
85+ # Expose plain() as pydoc.plain()
86+ from _pyrepl .pager import plain # noqa: F401
87+
88+ # --------------------------------------------------------- old names
89+ getpager = get_pager
90+ pipepager = pipe_pager
91+ plainpager = plain_pager
92+ tempfilepager = tempfile_pager
93+ ttypager = tty_pager
94+
95+ except ModuleNotFoundError :
96+ # Minimal alternatives for cases where _pyrepl is absent.
97+
98+ def plain (text : str ) -> str :
99+ """Remove boldface formatting from text."""
100+ return re .sub ('.\b ' , '' , text )
101+
102+ def plain_pager (text : str , title : str = '' ) -> None :
103+ """Simply print unformatted text. This is the ultimate fallback."""
104+ encoding = getattr (sys .stdout , 'encoding' , None ) or 'utf-8'
105+ text = text .encode (encoding , 'backslashreplace' ).decode (encoding )
106+ text = plain (text )
107+ sys .stdout .write (text )
108+
109+ def get_pager ():
110+ """Unconditionally return the plain pager, since _pyrepl is absent."""
111+ return plain_pager
112+
113+ # --------------------------------------------------------- old names
114+ getpager = get_pager
115+ plainpager = plain_pager
95116
96117
97118# --------------------------------------------------------- common routines
0 commit comments