mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05:00 
			
		
		
		
	Fix various links in the manual
This commit is contained in:
		
							parent
							
								
									8396aa623b
								
							
						
					
					
						commit
						fabc938c02
					
				@ -80,6 +80,13 @@ def build_pot(base):
 | 
			
		||||
    return base
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def build_linkcheck(base):
 | 
			
		||||
    cmd = [SPHINX_BUILD, '-b', 'linkcheck', '-t', 'online', '-t', 'linkcheck', '.', base]
 | 
			
		||||
    print (' '.join(cmd))
 | 
			
		||||
    subprocess.check_call(cmd)
 | 
			
		||||
    return base
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def build_man_pages(language, base):
 | 
			
		||||
    os.environ[b'CALIBRE_BUILD_MAN_PAGES'] = b'1'
 | 
			
		||||
    sphinx_build(language, base, builder='man', bdir=language, very_quiet=True)
 | 
			
		||||
@ -108,6 +115,8 @@ if __name__ == '__main__':
 | 
			
		||||
        language, base = args.language, args.base
 | 
			
		||||
        if language == 'gettext':
 | 
			
		||||
            build_pot(base)
 | 
			
		||||
        elif language == 'linkcheck':
 | 
			
		||||
            build_linkcheck(base)
 | 
			
		||||
        elif args.man_pages:
 | 
			
		||||
            os.environ['CALIBRE_OVERRIDE_LANG'] = language
 | 
			
		||||
            build_man_pages(language, base)
 | 
			
		||||
 | 
			
		||||
@ -259,7 +259,7 @@ The next interesting feature is::
 | 
			
		||||
    def get_browser(self):
 | 
			
		||||
        ...
 | 
			
		||||
 | 
			
		||||
``needs_subscription = True`` tells calibre that this recipe needs a username and password in order to access the content. This causes, calibre to ask for a username and password whenever you try to use this recipe. The code in :meth:`calibre.web.feeds.news.BasicNewsRecipe.get_browser` actually does the login into the NYT website. Once logged in, calibre will use the same, logged in, browser instance to fetch all content. See `mechanize <https://github.com/jjlee/mechanize>`_ to understand the code in ``get_browser``.
 | 
			
		||||
``needs_subscription = True`` tells calibre that this recipe needs a username and password in order to access the content. This causes, calibre to ask for a username and password whenever you try to use this recipe. The code in :meth:`calibre.web.feeds.news.BasicNewsRecipe.get_browser` actually does the login into the NYT website. Once logged in, calibre will use the same, logged in, browser instance to fetch all content. See `mechanize <https://mechanize.readthedocs.io/en/latest/>`_ to understand the code in ``get_browser``.
 | 
			
		||||
 | 
			
		||||
The next new feature is the
 | 
			
		||||
:meth:`calibre.web.feeds.news.BasicNewsRecipe.parse_index` method. Its job is
 | 
			
		||||
@ -267,7 +267,7 @@ to go to https://www.nytimes.com/pages/todayspaper/index.html and fetch the list
 | 
			
		||||
of articles that appear in *todays* paper. While more complex than simply using
 | 
			
		||||
:term:`RSS`, the recipe creates an e-book that corresponds very closely to the
 | 
			
		||||
days paper. ``parse_index`` makes heavy use of `BeautifulSoup
 | 
			
		||||
<https://www.crummy.com/software/BeautifulSoup/documentation.html>`_ to parse
 | 
			
		||||
<https://www.crummy.com/software/BeautifulSoup/bs3/documentation.html>`_ to parse
 | 
			
		||||
the daily paper webpage. You can also use other, more modern parsers if you
 | 
			
		||||
dislike BeatifulSoup. calibre comes with `lxml <http://lxml.de/>`_ and
 | 
			
		||||
`html5lib <https://github.com/html5lib/html5lib-python>`_, which are the
 | 
			
		||||
 | 
			
		||||
@ -66,9 +66,9 @@ class TXTInput(InputFormatPlugin):
 | 
			
		||||
        OptionRecommendation(name="markdown_extensions", recommended_value='footnotes, tables, toc',
 | 
			
		||||
            help=_('Enable extensions to markdown syntax. Extensions are formatting that is not part '
 | 
			
		||||
                   'of the standard markdown format. The extensions enabled by default: %default.\n'
 | 
			
		||||
                   'To learn more about markdown extensions, see https://pythonhosted.org/Markdown/extensions/index.html\n'
 | 
			
		||||
                   'To learn more about markdown extensions, see {}\n'
 | 
			
		||||
                   'This should be a comma separated list of extensions to enable:\n'
 | 
			
		||||
                   ) + '\n'.join('* %s: %s' % (k, MD_EXTENSIONS[k]) for k in sorted(MD_EXTENSIONS))),
 | 
			
		||||
                   ).format('https://python-markdown.github.io/extensions/') + '\n'.join('* %s: %s' % (k, MD_EXTENSIONS[k]) for k in sorted(MD_EXTENSIONS))),
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
    def shift_file(self, base_dir, fname, data):
 | 
			
		||||
 | 
			
		||||
@ -130,7 +130,7 @@
 | 
			
		||||
      <item>
 | 
			
		||||
       <widget class="QLabel" name="label_5">
 | 
			
		||||
        <property name="text">
 | 
			
		||||
         <string>More information on <a href="https://pythonhosted.org/Markdown/extensions/index.html">Markdown extensions</a></string>
 | 
			
		||||
         <string>More information on <a href="https://python-markdown.github.io/extensions/">Markdown extensions</a></string>
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="openExternalLinks">
 | 
			
		||||
         <bool>true</bool>
 | 
			
		||||
 | 
			
		||||
@ -483,7 +483,7 @@ class BasicNewsRecipe(Recipe):
 | 
			
		||||
    def get_browser(self, *args, **kwargs):
 | 
			
		||||
        '''
 | 
			
		||||
        Return a browser instance used to fetch documents from the web. By default
 | 
			
		||||
        it returns a `mechanize <https://github.com/jjlee/mechanize>`_
 | 
			
		||||
        it returns a `mechanize <https://mechanize.readthedocs.io/en/latest/>`_
 | 
			
		||||
        browser instance that supports cookies, ignores robots.txt, handles
 | 
			
		||||
        refreshes and has a mozilla firefox user agent.
 | 
			
		||||
 | 
			
		||||
@ -890,8 +890,8 @@ class BasicNewsRecipe(Recipe):
 | 
			
		||||
        self.report_progress = progress_reporter
 | 
			
		||||
 | 
			
		||||
        if self.needs_subscription and (
 | 
			
		||||
                self.username is None or self.password is None or
 | 
			
		||||
                (not self.username and not self.password)):
 | 
			
		||||
                self.username is None or self.password is None or (
 | 
			
		||||
                    not self.username and not self.password)):
 | 
			
		||||
            if self.needs_subscription != 'optional':
 | 
			
		||||
                raise ValueError(_('The "%s" recipe needs a username and password.')%self.title)
 | 
			
		||||
 | 
			
		||||
@ -1432,8 +1432,8 @@ class BasicNewsRecipe(Recipe):
 | 
			
		||||
        desc = self.description
 | 
			
		||||
        if not isinstance(desc, unicode):
 | 
			
		||||
            desc = desc.decode('utf-8', 'replace')
 | 
			
		||||
        mi.comments = (_('Articles in this issue:') + '\n\n' +
 | 
			
		||||
                '\n\n'.join(article_titles)) + '\n\n' + desc
 | 
			
		||||
        mi.comments = (_('Articles in this issue:'
 | 
			
		||||
            ) + '\n\n' + '\n\n'.join(article_titles)) + '\n\n' + desc
 | 
			
		||||
 | 
			
		||||
        language = canonicalize_lang(self.language)
 | 
			
		||||
        if language is not None:
 | 
			
		||||
@ -1633,8 +1633,7 @@ class BasicNewsRecipe(Recipe):
 | 
			
		||||
                parsed_feeds.append(feed)
 | 
			
		||||
                self.log.exception(msg)
 | 
			
		||||
 | 
			
		||||
        remove = [fl for fl in parsed_feeds if len(fl) == 0 and
 | 
			
		||||
                self.remove_empty_feeds]
 | 
			
		||||
        remove = [fl for fl in parsed_feeds if len(fl) == 0 and self.remove_empty_feeds]
 | 
			
		||||
        for f in remove:
 | 
			
		||||
            parsed_feeds.remove(f)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user