Начало
This commit is contained in:
		
							
								
								
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | /.asciidoctor | ||||||
|  |  | ||||||
|  | tmp/* | ||||||
|  | cache/* | ||||||
|  | cache-ascii/* | ||||||
|  | cache-full/* | ||||||
|  | cache-html/* | ||||||
|  | output/* | ||||||
|  | __pycache__ | ||||||
|  | wiki/trash | ||||||
|  | wiki/notes.sqlite | ||||||
|  | upload.sh | ||||||
|  | wiki/**/diag*.png | ||||||
|  | wiki/**/*.png.cache | ||||||
|  |  | ||||||
|  | *.pyc | ||||||
|  | *.txt | ||||||
|  | upload-*.sh | ||||||
|  |  | ||||||
							
								
								
									
										89
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | |||||||
|  | PY?= | ||||||
|  | PELICAN?=pelican | ||||||
|  | PELICANOPTS= | ||||||
|  |  | ||||||
|  | BASEDIR=$(CURDIR) | ||||||
|  | INPUTDIR=$(BASEDIR)/docs | ||||||
|  | OUTPUTDIR=$(BASEDIR)/output | ||||||
|  | CONFFILE=$(BASEDIR)/pelicanconf.py | ||||||
|  | PUBLISHCONF=$(BASEDIR)/publishconf.py | ||||||
|  |  | ||||||
|  | SSH_HOST=localhost | ||||||
|  | SSH_PORT=22 | ||||||
|  | SSH_USER=root | ||||||
|  | SSH_TARGET_DIR=/var/www | ||||||
|  |  | ||||||
|  |  | ||||||
|  | DEBUG ?= 0 | ||||||
|  | ifeq ($(DEBUG), 1) | ||||||
|  | 	PELICANOPTS += -D | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | RELATIVE ?= 0 | ||||||
|  | ifeq ($(RELATIVE), 1) | ||||||
|  | 	PELICANOPTS += --relative-urls | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | SERVER ?= "0.0.0.0" | ||||||
|  |  | ||||||
|  | PORT ?= 0 | ||||||
|  | ifneq ($(PORT), 0) | ||||||
|  | 	PELICANOPTS += -p $(PORT) | ||||||
|  | endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | help: | ||||||
|  | 	@echo 'Makefile for a pelican Web site                                           ' | ||||||
|  | 	@echo '                                                                          ' | ||||||
|  | 	@echo 'Usage:                                                                    ' | ||||||
|  | 	@echo '   make html                           (re)generate the web site          ' | ||||||
|  | 	@echo '   make clean                          remove the generated files         ' | ||||||
|  | 	@echo '   make regenerate                     regenerate files upon modification ' | ||||||
|  | 	@echo '   make publish                        generate using production settings ' | ||||||
|  | 	@echo '   make serve [PORT=8000]              serve site at http://localhost:8000' | ||||||
|  | 	@echo '   make serve-global [SERVER=0.0.0.0]  serve (as root) to $(SERVER):80    ' | ||||||
|  | 	@echo '   make devserver [PORT=8000]          serve and regenerate together      ' | ||||||
|  | 	@echo '   make devserver-global               regenerate and serve on 0.0.0.0    ' | ||||||
|  | 	@echo '   make ssh_upload                     upload the web site via SSH        ' | ||||||
|  | 	@echo '   make sftp_upload                    upload the web site via SFTP       ' | ||||||
|  | 	@echo '   make rsync_upload                   upload the web site via rsync+ssh  ' | ||||||
|  | 	@echo '                                                                          ' | ||||||
|  | 	@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html   ' | ||||||
|  | 	@echo 'Set the RELATIVE variable to 1 to enable relative urls                    ' | ||||||
|  | 	@echo '                                                                          ' | ||||||
|  |  | ||||||
|  | html: | ||||||
|  | 	"$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	[ ! -d "$(OUTPUTDIR)" ] || rm -rf "$(OUTPUTDIR)" | ||||||
|  |  | ||||||
|  | regenerate: | ||||||
|  | 	"$(PELICAN)" -r "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) | ||||||
|  |  | ||||||
|  | serve: | ||||||
|  | 	"$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) | ||||||
|  |  | ||||||
|  | serve-global: | ||||||
|  | 	"$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b $(SERVER) | ||||||
|  |  | ||||||
|  | devserver: | ||||||
|  | 	"$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) | ||||||
|  |  | ||||||
|  | devserver-global: | ||||||
|  | 	$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -b 0.0.0.0 | ||||||
|  |  | ||||||
|  | publish: | ||||||
|  | 	"$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(PUBLISHCONF)" $(PELICANOPTS) | ||||||
|  |  | ||||||
|  | ssh_upload: publish | ||||||
|  | 	scp -P $(SSH_PORT) -r "$(OUTPUTDIR)"/* "$(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)" | ||||||
|  |  | ||||||
|  | sftp_upload: publish | ||||||
|  | 	printf 'put -r $(OUTPUTDIR)/*' | sftp $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) | ||||||
|  |  | ||||||
|  | rsync_upload: publish | ||||||
|  | 	rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --include tags --cvs-exclude --delete "$(OUTPUTDIR)"/ "$(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .PHONY: html help clean regenerate serve serve-global devserver publish ssh_upload rsync_upload | ||||||
							
								
								
									
										14
									
								
								docs/Latex/Висячие строки.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/Latex/Висячие строки.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | --- | ||||||
|  | title: "LaTeX: висячие строки" | ||||||
|  | category: LaTeX | ||||||
|  | tags: LaTeX, текст, | ||||||
|  | summary: | ||||||
|  | ... | ||||||
|  |  | ||||||
|  | Пакет [`nowidow`](https://www.ctan.org/pkg/nowidow) используется для | ||||||
|  | изменения алгоритма размещения висячих строк. Пример: | ||||||
|  |  | ||||||
|  | ```latex | ||||||
|  | \usepackage[defaultlines=3,all]{nowidow} | ||||||
|  | ``` | ||||||
|  |  | ||||||
							
								
								
									
										46
									
								
								pelicanconf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								pelicanconf.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | AUTHOR = 'Андрей Астафьев' | ||||||
|  | SITENAME = 'ДСП' | ||||||
|  | SITEURL = 'https://dsp.246060.ru' | ||||||
|  |  | ||||||
|  | PATH = 'docs' | ||||||
|  | CACHE_PATH = 'cache' | ||||||
|  |  | ||||||
|  | TIMEZONE = 'Europe/Moscow' | ||||||
|  |  | ||||||
|  | DEFAULT_LANG = 'ru' | ||||||
|  |  | ||||||
|  | # Generation time | ||||||
|  | CACHE_CONTENT = True | ||||||
|  | LOAD_CONTENT_CACHE = True | ||||||
|  |  | ||||||
|  | # Feed generation is usually not desired when developing | ||||||
|  | FEED_ALL_ATOM = None | ||||||
|  | CATEGORY_FEED_ATOM = None | ||||||
|  | TRANSLATION_FEED_ATOM = None | ||||||
|  | AUTHOR_FEED_ATOM = None | ||||||
|  | AUTHOR_FEED_RSS = None | ||||||
|  |  | ||||||
|  | DEFAULT_DATE = 'fs' | ||||||
|  | STATIC_PATHS = ['images', 'files', 'extras'] | ||||||
|  | DIRECT_TEMPLATES = ('index', 'categories', 'authors', 'archives', 'search') | ||||||
|  |  | ||||||
|  | EXTRA_PATH_METADATA = { | ||||||
|  |       'extras/favicon.ico': {'path': 'favicon.ico'}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Blogroll | ||||||
|  | LINKS = () | ||||||
|  | # LINKS = (('Pelican', 'https://getpelican.com/'), | ||||||
|  | #          ('Python.org', 'https://www.python.org/'), | ||||||
|  | #          ('Jinja2', 'https://palletsprojects.com/p/jinja/'), | ||||||
|  | #          ('You can modify those links in your config file', '#'),) | ||||||
|  |  | ||||||
|  | # Social widget | ||||||
|  | SOCIAL = () | ||||||
|  | # SOCIAL = (('You can add links in your config file', '#'), | ||||||
|  | #           ('Another social link', '#'),) | ||||||
|  |  | ||||||
|  | DEFAULT_PAGINATION = 20 | ||||||
|  |  | ||||||
|  | # Uncomment following line if you want document-relative URLs when developing | ||||||
|  | RELATIVE_URLS = True | ||||||
							
								
								
									
										21
									
								
								publishconf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								publishconf.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | # This file is only used if you use `make publish` or | ||||||
|  | # explicitly specify it as your config file. | ||||||
|  |  | ||||||
|  | import os | ||||||
|  | import sys | ||||||
|  | sys.path.append(os.curdir) | ||||||
|  | from pelicanconf import * | ||||||
|  |  | ||||||
|  | # If your site is available via HTTPS, make sure SITEURL begins with https:// | ||||||
|  | SITEURL = 'https://dsp.246060.ru' | ||||||
|  | RELATIVE_URLS = True | ||||||
|  |  | ||||||
|  | FEED_ALL_ATOM = 'feeds/all.atom.xml' | ||||||
|  | CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml' | ||||||
|  |  | ||||||
|  | DELETE_OUTPUT_DIRECTORY = True | ||||||
|  |  | ||||||
|  | # Following items are often useful when publishing | ||||||
|  |  | ||||||
|  | #DISQUS_SITENAME = "" | ||||||
|  | #GOOGLE_ANALYTICS = "" | ||||||
							
								
								
									
										143
									
								
								tasks.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								tasks.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  |  | ||||||
|  | import os | ||||||
|  | import shlex | ||||||
|  | import shutil | ||||||
|  | import sys | ||||||
|  | import datetime | ||||||
|  |  | ||||||
|  | from invoke import task | ||||||
|  | from invoke.main import program | ||||||
|  | from invoke.util import cd | ||||||
|  | from pelican import main as pelican_main | ||||||
|  | from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer | ||||||
|  | from pelican.settings import DEFAULT_CONFIG, get_settings_from_file | ||||||
|  |  | ||||||
|  | OPEN_BROWSER_ON_SERVE = True | ||||||
|  | SETTINGS_FILE_BASE = 'pelicanconf.py' | ||||||
|  | SETTINGS = {} | ||||||
|  | SETTINGS.update(DEFAULT_CONFIG) | ||||||
|  | LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE) | ||||||
|  | SETTINGS.update(LOCAL_SETTINGS) | ||||||
|  |  | ||||||
|  | CONFIG = { | ||||||
|  |     'settings_base': SETTINGS_FILE_BASE, | ||||||
|  |     'settings_publish': 'publishconf.py', | ||||||
|  |     # Output path. Can be absolute or relative to tasks.py. Default: 'output' | ||||||
|  |     'deploy_path': SETTINGS['OUTPUT_PATH'], | ||||||
|  |     # Remote server configuration | ||||||
|  |     'ssh_user': 'root', | ||||||
|  |     'ssh_host': 'localhost', | ||||||
|  |     'ssh_port': '22', | ||||||
|  |     'ssh_path': '/var/www', | ||||||
|  |     # Host and port for `serve` | ||||||
|  |     'host': 'localhost', | ||||||
|  |     'port': 8000, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def clean(c): | ||||||
|  |     """Remove generated files""" | ||||||
|  |     if os.path.isdir(CONFIG['deploy_path']): | ||||||
|  |         shutil.rmtree(CONFIG['deploy_path']) | ||||||
|  |         os.makedirs(CONFIG['deploy_path']) | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def build(c): | ||||||
|  |     """Build local version of site""" | ||||||
|  |     pelican_run('-s {settings_base}'.format(**CONFIG)) | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def rebuild(c): | ||||||
|  |     """`build` with the delete switch""" | ||||||
|  |     pelican_run('-d -s {settings_base}'.format(**CONFIG)) | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def regenerate(c): | ||||||
|  |     """Automatically regenerate site upon file modification""" | ||||||
|  |     pelican_run('-r -s {settings_base}'.format(**CONFIG)) | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def serve(c): | ||||||
|  |     """Serve site at http://$HOST:$PORT/ (default is localhost:8000)""" | ||||||
|  |  | ||||||
|  |     class AddressReuseTCPServer(RootedHTTPServer): | ||||||
|  |         allow_reuse_address = True | ||||||
|  |  | ||||||
|  |     server = AddressReuseTCPServer( | ||||||
|  |         CONFIG['deploy_path'], | ||||||
|  |         (CONFIG['host'], CONFIG['port']), | ||||||
|  |         ComplexHTTPRequestHandler) | ||||||
|  |  | ||||||
|  |     if OPEN_BROWSER_ON_SERVE: | ||||||
|  |         # Open site in default browser | ||||||
|  |         import webbrowser | ||||||
|  |         webbrowser.open("http://{host}:{port}".format(**CONFIG)) | ||||||
|  |  | ||||||
|  |     sys.stderr.write('Serving at {host}:{port} ...\n'.format(**CONFIG)) | ||||||
|  |     server.serve_forever() | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def reserve(c): | ||||||
|  |     """`build`, then `serve`""" | ||||||
|  |     build(c) | ||||||
|  |     serve(c) | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def preview(c): | ||||||
|  |     """Build production version of site""" | ||||||
|  |     pelican_run('-s {settings_publish}'.format(**CONFIG)) | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def livereload(c): | ||||||
|  |     """Automatically reload browser tab upon file modification.""" | ||||||
|  |     from livereload import Server | ||||||
|  |  | ||||||
|  |     def cached_build(): | ||||||
|  |         cmd = '-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true' | ||||||
|  |         pelican_run(cmd.format(**CONFIG)) | ||||||
|  |  | ||||||
|  |     cached_build() | ||||||
|  |     server = Server() | ||||||
|  |     theme_path = SETTINGS['THEME'] | ||||||
|  |     watched_globs = [ | ||||||
|  |         CONFIG['settings_base'], | ||||||
|  |         '{}/templates/**/*.html'.format(theme_path), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     content_file_extensions = ['.md', '.rst'] | ||||||
|  |     for extension in content_file_extensions: | ||||||
|  |         content_glob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension) | ||||||
|  |         watched_globs.append(content_glob) | ||||||
|  |  | ||||||
|  |     static_file_extensions = ['.css', '.js'] | ||||||
|  |     for extension in static_file_extensions: | ||||||
|  |         static_file_glob = '{0}/static/**/*{1}'.format(theme_path, extension) | ||||||
|  |         watched_globs.append(static_file_glob) | ||||||
|  |  | ||||||
|  |     for glob in watched_globs: | ||||||
|  |         server.watch(glob, cached_build) | ||||||
|  |  | ||||||
|  |     if OPEN_BROWSER_ON_SERVE: | ||||||
|  |         # Open site in default browser | ||||||
|  |         import webbrowser | ||||||
|  |         webbrowser.open("http://{host}:{port}".format(**CONFIG)) | ||||||
|  |  | ||||||
|  |     server.serve(host=CONFIG['host'], port=CONFIG['port'], root=CONFIG['deploy_path']) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @task | ||||||
|  | def publish(c): | ||||||
|  |     """Publish to production via rsync""" | ||||||
|  |     pelican_run('-s {settings_publish}'.format(**CONFIG)) | ||||||
|  |     c.run( | ||||||
|  |         'rsync --delete --exclude ".DS_Store" -pthrvz -c ' | ||||||
|  |         '-e "ssh -p {ssh_port}" ' | ||||||
|  |         '{} {ssh_user}@{ssh_host}:{ssh_path}'.format( | ||||||
|  |             CONFIG['deploy_path'].rstrip('/') + '/', | ||||||
|  |             **CONFIG)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def pelican_run(cmd): | ||||||
|  |     cmd += ' ' + program.core.remainder  # allows to pass-through args to pelican | ||||||
|  |     pelican_main(shlex.split(cmd)) | ||||||
		Reference in New Issue
	
	Block a user