From e1c9e0028dee09b0a1d1594501dd1976e3fcd292 Mon Sep 17 00:00:00 2001 From: "Schoenberger, Philipp" Date: Wed, 17 Jul 2019 10:27:01 +0200 Subject: [PATCH] add math rendering add favicon --- Makefile | 14 +- content/blog/03_quadrocopter_en.md | 31 +- content/blog/04_keyboad_en.md | 5 + content/extra/favicon.ico | Bin 0 -> 24983 bytes content/images_org/favicon.xcf | Bin 33253 -> 28067 bytes content/images_org/quad/prop.jpg | Bin 0 -> 25034 bytes content/images_org/quad/prop_d.jpg | Bin 0 -> 17577 bytes content/images_org/quad/prop_pitch.jpg | Bin 0 -> 14372 bytes pelicanconf.py | 16 +- plugins/extended-sitemap/__init__.py | 2 + plugins/render_math/Readme.md | 164 ++++++++ plugins/render_math/__init__.py | 1 + plugins/render_math/math.py | 367 ++++++++++++++++++ plugins/render_math/mathjax_script_template | 61 +++ .../pelican_mathjax_markdown_extension.py | 158 ++++++++ .../templates/base.html | 1 + 16 files changed, 803 insertions(+), 17 deletions(-) create mode 100644 content/images_org/quad/prop.jpg create mode 100644 content/images_org/quad/prop_d.jpg create mode 100644 content/images_org/quad/prop_pitch.jpg create mode 100644 plugins/render_math/Readme.md create mode 100644 plugins/render_math/__init__.py create mode 100644 plugins/render_math/math.py create mode 100644 plugins/render_math/mathjax_script_template create mode 100644 plugins/render_math/pelican_mathjax_markdown_extension.py diff --git a/Makefile b/Makefile index fee4599..bb54d3f 100644 --- a/Makefile +++ b/Makefile @@ -17,18 +17,18 @@ OUTPUTDIR=$(BASEDIR)/output CONFFILE=$(BASEDIR)/pelicanconf.py PUBLISHCONF=$(BASEDIR)/publishconf.py -FTP_HOST=localhost -FTP_USER=anonymous -FTP_TARGET_DIR=/ +# FTP_HOST=localhost +# FTP_USER=anonymous +# FTP_TARGET_DIR=/ SSH_HOST=173.249.40.201 SSH_PORT=21 SSH_USER=pschoen SSH_TARGET_DIR=/data/nginx/phschoen.de/ -S3_BUCKET=my_s3_bucket +# S3_BUCKET=my_s3_bucket -DROPBOX_DIR=~/Dropbox/Public/ +# DROPBOX_DIR=~/Dropbox/Public/ help: @echo 'Makefile for a pelican Web site ' @@ -81,7 +81,7 @@ $(foreach size, $(IMG_SIZES), \ define convert-rule $(1):$(2) mkdir -p $(dir $(1)) - convert $(2) -resize $(3)x$(3) $(1) + convert $(2) -resize $(3)x$(3)^ $(1) endef @@ -127,7 +127,7 @@ stopserver: publish: killall $(PY) pelican || true - $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS) + $(PELICAN) --debug $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS) ssh_upload: publish scp -vP $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) diff --git a/content/blog/03_quadrocopter_en.md b/content/blog/03_quadrocopter_en.md index 9cba46f..23d7714 100644 --- a/content/blog/03_quadrocopter_en.md +++ b/content/blog/03_quadrocopter_en.md @@ -35,7 +35,8 @@ A taller motor most likely result in more power at the upper Throttle/RPM and a would result in a higher torque at low throttle. Since I wanted to use motors with a actual data sheet or at least a test measurement how much thrust and -amps would be drawn with certain types of propeller I did take a look at the [T-Motor F20II F20 II 1408 3750KV](https://www.banggood.com/T-Motor-F20II-F20-II-1406-3750KV-Brushless-Motor-2-4S-For-130-140-150-FPV-Racing-Frame-p-1154351.html) +amps would be drawn with certain types of propeller I did take a look at the +[T-Motor F20II F20 II 1408 3750KV](https://www.banggood.com/T-Motor-F20II-F20-II-1406-3750KV-Brushless-Motor-2-4S-For-130-140-150-FPV-Racing-Frame-p-1154351.html) The where the ones which had a lot of thrust with 532g when they are mounted with 3040 propeller types. The goal of the quad would be to be below 250g so the thrust to weight ratio would be 1:8 for a quad copter. @@ -52,12 +53,32 @@ For this I selected the three bladed one with close to the 3040 size. The only o The Number of the Propellers are also representing the size nearly as the motor identification number. The first two digits are the diameter in inch and the second two ones are representing the pitch of the propeller. -The Pitch is sometimes misunderstood to degrees of the propeller blade. -The actual meaning of it is the forward movement of he propeller if it's rotating 360 degrees -So in this case of a 3042 the diameter is 3 inch and the propeller is moving 4.2 inches forward in case it does one rotation. +The Pitch is sometimes misunderstood. There are 2 value types of the propeller blade. +The actual meaning of it is the forward movement of he propeller if it's rotating 360 degrees. This value is calculated in inch. +So if the upper propeller would be measured this schema the 3042 would represent the diameter as 3 inch and the propeller is moving 4.2 inches forward. + +However there exists also the measurement of the angular pitch. This value is common for props which have a non constant angle in order to compare them more easily. +The conversion from one to the other is pretty simple and can be found the in formula below. + + +$$ p_{inches} = tan\left( p_{angle} * d * \frac{m_{point}}{100} * \pi\right) $$ +$$ p_{angle} = atan\left( \frac{p_{inches}}{d * \frac{m_{point}}{100} } * \pi\right) $$ You can imagine the higher the pitch is the more air is moved and the more thrust it should generate with the same rpm. Side effect of the higher pitch is a higher amp drawn thought. +So you have to be carefully which props you putting on the motor otherwise you could overload the motor and they could burn down +or the ESC can not handle that much amps. + +In my case they are measured in degree so the forward pitch angle of $42°$ would result in a pitch blade of 5.09 inches. + +[lightgallery + /images/quad/prop.jpg, Geprc 3042 Source: www.banggood.com; + /images/quad/prop_d.jpg, Geprc 3042 diameter in inch visualised Source: www.banggood.com; + /images/quad/prop_pitch.jpg, Geprc 3042 pitch in degree visualised Source: www.banggood.com; +lightgalleryend] + +TOBE continued... + part list: @@ -67,6 +88,6 @@ part list: - [esc](https://www.banggood.com/20x20mm-28A-BLheli_S-BB2-2-4S-4-In-1-ESC-Support-Dshot600-for-XJB-F428-F328-Series-Flytower-p-1203121.html) - [props](https://www.banggood.com/10-Pairs-Geprc-3042-3x42-Inch-3-Blade-Propeller-M5-Mounting-Hole-CW-CCW-for-Racing-Drone-p-1190428.html) - [cam](https://www.banggood.com/RunCam-Micro-Sparrow-WDR-700TVL-13-CMOS-2_1mm-FOV-145-Degree-169-FPV-Camera-NTSCPAL-Switchable-p-1198579.html) -- [VTX]() +- [TBS Unify Pro HV Race FPV Video Sender SMA - Team Blacksheep](https://www.team-blacksheep.com/products/prod:unify_pro_hv_race) - [frsky receiver](https://www.banggood.com/FrSky-R-XSR-Ultra-SBUSCPPM-D16-16CH-Mini-Redundancy-Receiver-1_5g-for-RC-Multirotor-FPV-Racing-Drone-p-1186057.html) - [beeper](https://www.banggood.com/Super-Mini-1_38g-WS2812-Colorful-LED-with-5V-Active-Alarm-Buzzer-Support-Cleanflight-Betaflight-p-1131891.html?rmmds=myorder&cur_warehouse=CN) diff --git a/content/blog/04_keyboad_en.md b/content/blog/04_keyboad_en.md index 8c164f8..b97f1c6 100644 --- a/content/blog/04_keyboad_en.md +++ b/content/blog/04_keyboad_en.md @@ -74,7 +74,12 @@ two USB plugs and a textile sleeve to get a awesome optic. [lightgallery /images/keyboard/keyboard_v1.jpg, Final assembly of my keyboard with trackpoint; + /images/keyboard/keyboard_v1_1.jpg, Internal cableing of the teensy board and trackpoint + /images/keyboard/keyboard_v1_2.jpg, PCB cutout for he trackpoint stem + /images/keyboard/keyboard_v1_3.jpg, 3d printed trackpoint nibble + /images/keyboard/keyboard_v1_3.jpg, swiches with SIP sockets and cutouts to remove the top cover in oder to lube them without soldering lightgalleryend] + diff --git a/content/extra/favicon.ico b/content/extra/favicon.ico index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f6b33d13b71e830c4a52436f0ab89bac6f1b9e51 100644 GIT binary patch literal 24983 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 literal 0 HcmV?d00001 diff --git a/content/images_org/favicon.xcf b/content/images_org/favicon.xcf index a68bfba771d1c96644013838f47d828fd0b8ca1f..5483f863c3a14243c9f0be313acddea16edbb376 100644 GIT binary patch literal 28067 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 h+JF8X+qn25wNOZhc)ajh6+Pn7NRqB^D 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 X2>cI|)jv(vcq~%mkye|I`KJAU-Sz?w diff --git a/content/images_org/quad/prop.jpg b/content/images_org/quad/prop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..962ae19675b507d2413ec40535ba01df243367e7 GIT binary patch literal 25034 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 u4w7@s4+UKl_8lmFTH3ZMc2 literal 0 HcmV?d00001 diff --git a/content/images_org/quad/prop_d.jpg b/content/images_org/quad/prop_d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d4f2919831e609b028283fa78ff22c8c601d1c5 GIT binary patch literal 17577 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 XlebJt1p?sHt2o-iJ7B2yeeM4PcG~Tl literal 0 HcmV?d00001 diff --git a/content/images_org/quad/prop_pitch.jpg b/content/images_org/quad/prop_pitch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..001654f6f31b20daa5b3d51e57eb4de522466e14 GIT binary patch literal 14372 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 K3|Bi|7yb`^6#h5> literal 0 HcmV?d00001 diff --git a/pelicanconf.py b/pelicanconf.py index 35481a8..401e027 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -37,12 +37,12 @@ EXTRA_PATH_METADATA = { 'extra/fonts/lg.svg': {'path': 'fonts/lg.svg'}, 'extra/fonts/lg.ttf': {'path': 'fonts/lg.ttf'}, 'extra/fonts/lg.woff': {'path': 'fonts/lg.woff'}, + 'extra/googlec921759af9dae688.html': {'path': 'googlec921759af9dae688.html'}, } # Base URL this page is hosted at: SITENAME = 'phschoen.de' -# SITEURL = 'http://skylx125.ndsatcom.com:8000' -SITEURL = 'http://phschoen.de' +SITEURL = 'https://phschoen.de' # Timezone is GMT+1: TIMEZONE = 'Europe/Paris' @@ -161,7 +161,13 @@ DEFAULT_CATEGORY = 'uncategorized' # DEFAULT_PAGINATION = 10 PLUGIN_PATHS = ['plugins', ] -PLUGINS = ['lightgallery', 'i18n_subsites', 'extended-sitemap', 'pelican-bootstrapify'] +PLUGINS = [ + 'lightgallery', + 'i18n_subsites', + 'extended-sitemap', + 'pelican-bootstrapify', + 'render_math' +] SITEMAP = { 'format': 'xml', @@ -186,8 +192,8 @@ EXTENDED_SITEMAP_PLUGIN = { 'changefrequencies': { 'index': 'daily', 'articles': 'weekly', - 'pages': 'monthly', - 'others': 'monthly', + 'pages': 'weekly', + 'others': 'weekly', } } diff --git a/plugins/extended-sitemap/__init__.py b/plugins/extended-sitemap/__init__.py index 083935e..40864d1 100644 --- a/plugins/extended-sitemap/__init__.py +++ b/plugins/extended-sitemap/__init__.py @@ -79,6 +79,8 @@ class SitemapGenerator(object): raise ConfigurationError('Please specify the TIMEZONE setting!') self.timezone = timezone(settings.get('TIMEZONE')) self.url_site = settings.get('SITEURL') + if len(self.url_site) == 0: + self.url_site = "https://phschoen.de" # Pelican strips off trailing slashes during settings initialization. # The later used urljoin function strips of path elements not ending with a trailing slash, # a slash is added here if it is not already present diff --git a/plugins/render_math/Readme.md b/plugins/render_math/Readme.md new file mode 100644 index 0000000..4e7ba27 --- /dev/null +++ b/plugins/render_math/Readme.md @@ -0,0 +1,164 @@ +Math Render Plugin For Pelican +============================== +This plugin gives pelican the ability to render mathematics. It accomplishes +this by using the [MathJax](http://www.mathjax.org/) javascript engine. + +The plugin also ensures that Typogrify and recognized math "play" nicely together, by +ensuring [Typogrify](https://github.com/mintchaos/typogrify) does not alter math content. + +Both Markdown and reStructuredText is supported. + +Requirements +------------ + + * Pelican version *3.6* or above is required. + * Typogrify version *2.0.7* or higher is needed for Typogrify to play + "nicely" with this plugin. If this version is not available, Typogrify + will be disabled for the entire site. + * BeautifulSoup4 is required to correct summaries. If BeautifulSoup4 is + not installed, summary processing will be ignored, even if specified + in user settings. + +Installation +------------ +To enable, ensure that `render_math` plugin is accessible. +Then add the following to settings.py: + + PLUGINS = ["render_math"] + +Your site is now capable of rendering math math using the mathjax JavaScript +engine. No alterations to the template is needed, just use and enjoy! + +However, if you wish, you can set the `auto_insert` setting to `False` which +will disable the mathjax script from being automatically inserted into the +content. You would only want to do this if you had control over the template +and wanted to insert the script manually. + +### Typogrify +In the past, using [Typgogrify](https://github.com/mintchaos/typogrify) would +alter the math contents resulting in math that could not be rendered by MathJax. +The only option was to ensure that Typogrify was disabled in the settings. + +The problem has been rectified in this plugin, but it requires at a minimum +[Typogrify version 2.0.7](https://pypi.python.org/pypi/typogrify) (or higher). +If this version is not present, the plugin will disable Typogrify for the entire +site. + +### BeautifulSoup4 +Pelican creates summaries by truncating the contents to a specified user length. +The truncation process is oblivious to any math and can therefore destroy +the math output in the summary. + +To restore math, [BeautifulSoup4](https://pypi.python.org/pypi/beautifulsoup4/4.4.0) +is used. If it is not installed, no summary processing will happen. + +Usage +----- +### Templates +No alteration is needed to a template for this plugin to work. Just install +the plugin and start writing your Math. + +### Settings +Certain MathJax rendering options can be set. These options +are in a dictionary variable called `MATH_JAX` in the pelican +settings file. + +The dictionary can be set with the following keys: + + * `align`: [string] controls how displayed math will be aligned. Can be set to either +`'left'`, `'right'` or `'center'`. **Default Value**: `'center'`. + * `auto_insert`: [boolean] will insert the mathjax script into content that it is +detected to have math in it. Setting it to false is not recommended. +**Default Value**: `True` + * `indent`: [string] if `align` not set to `'center'`, then this controls the indent +level. **Default Value**: `'0em'`. + * `show_menu`: [boolean] controls whether the mathjax contextual menu is shown. +**Default Value**: `True` + * `process_escapes`: [boolean] controls whether mathjax processes escape sequences. +**Default Value**: `True` + * `mathjax_font`: [string] will force mathjax to use the chosen font. Current choices +for the font is `sanserif`, `typewriter` or `fraktur`. If this is not set, it will +use the default font settings. **Default Value**: `default` + * `latex_preview`: [string] controls the preview message users are shown while mathjax is +rendering LaTex. If set to `'Tex'`, then the TeX code is used as the preview +(which will be visible until it is processed by MathJax). **Default Value**: `'Tex'` + * `color`: [string] controls the color of the mathjax rendered font. **Default Value**: `'inherit'` + * `linebreak_automatic`: [boolean] If set, Mathjax will try to *intelligently* break up displayed math +(Note: It will not work for inline math). This is very useful for a responsive site. It +is turned off by default due to it potentially being CPU expensive. **Default Value**: `False` + * `tex_extensions`: [list] a list of [latex extensions](http://docs.mathjax.org/en/latest/tex.html#tex-and-latex-extensions) +accepted by mathjax. **Default Value**: `[]` (empty list) + * `responsive`: [boolean] tries to make displayed math render responsively. It does by determining if the width +is less than `responsive_break` (see below) and if so, sets `align` to `left`, `indent` to `0em` and `linebreak_automatic` to `True`. +**Default Value**: `False` (defaults to `False` for backward compatibility) + * `responsive_break`: [integer] a number (in pixels) representing the width breakpoint that is used +when setting `responsive_align` to `True`. **Default Value**: 768 + * `process_summary`: [boolean] ensures math will render in summaries and fixes math in that were cut off. +Requires [BeautifulSoup4](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) be installed. **Default Value**: `True` + * `message_style`: [string] This value controls the verbosity of the messages in the lower left-hand corner. Set it to `None` to eliminate all messages. +**Default Value**: normal + +#### Settings Examples +Make math render in blue and displaymath align to the left: + + MATH_JAX = {'color':'blue','align':left} + +Use the [color](http://docs.mathjax.org/en/latest/tex.html#color) and +[mhchem](http://docs.mathjax.org/en/latest/tex.html#mhchem) extensions: + + MATH_JAX = {'tex_extensions': ['color.js','mhchem.js']} + +#### Resulting HTML +Inlined math is wrapped in `span` tags, while displayed math is wrapped in `div` tags. +These tags will have a class attribute that is set to `math` which +can be used by template designers to alter the display of the math. + +Markdown +-------- +This plugin implements a custom extension for markdown resulting in math +being a "first class citizen" for Pelican. + +### Inlined Math +Math between `$`..`$`, for example, `$`x^2`$`, will be rendered inline +with respect to the current html block. Note: To use inline math, there +must *not* be any whitespace before the ending `$`. So for example: + + * **Relevant inline math**: `$e=mc^2$` + * **Will not render as inline math**: `$40 vs $50` + +### Displayed Math +Math between `$$`..`$$` will be rendered "block style", for example, `$$`x^2`$$`, will be rendered centered in a +new paragraph. + +#### Other Latex Display Math commands +The other LaTeX commands which usually invoke display math mode from text mode +are supported, +and are automatically treated like `$$`-style displayed math +in that they are rendered "block" style on their own lines. +For example, `\begin{equation}` x^2 `\end{equation}`, +will be rendered in its own block with a right justified equation number +at the top of the block. This equation number can be referenced in the document. +To do this, use a `label` inside of the equation format and then refer to that label +using `ref`. For example: `\begin{equation}` `\label{eq}` X^2 `\end{equation}`. +Now refer to that equation number by `$`\ref{eq}`$`. + +reStructuredText +---------------- +If there is math detected in reStructuredText document, the plugin will automatically +set the [math_output](http://docutils.sourceforge.net/docs/user/config.html#math-output) configuration setting to `MathJax`. + +### Inlined Math +Inlined math needs to use the [math role](http://docutils.sourceforge.net/docs/ref/rst/roles.html#math): + +``` +The area of a circle is :math:`A_\text{c} = (\pi/4) d^2`. +``` + +### Displayed Math +Displayed math uses the [math block](http://docutils.sourceforge.net/docs/ref/rst/directives.html#math): + +``` +.. math:: + + α_t(i) = P(O_1, O_2, … O_t, q_t = S_i λ) +``` diff --git a/plugins/render_math/__init__.py b/plugins/render_math/__init__.py new file mode 100644 index 0000000..2ac15dd --- /dev/null +++ b/plugins/render_math/__init__.py @@ -0,0 +1 @@ +from .math import * diff --git a/plugins/render_math/math.py b/plugins/render_math/math.py new file mode 100644 index 0000000..165d59e --- /dev/null +++ b/plugins/render_math/math.py @@ -0,0 +1,367 @@ +# -*- coding: utf-8 -*- +""" +Math Render Plugin for Pelican +============================== +This plugin allows your site to render Math. It uses +the MathJax JavaScript engine. + +For markdown, the plugin works by creating a Markdown +extension which is used during the markdown compilation +stage. Math therefore gets treated like a "first class +citizen" in Pelican + +For reStructuredText, the plugin instructs the rst engine +to output Mathjax for all math. + +The mathjax script is by default automatically inserted +into the HTML. + +Typogrify Compatibility +----------------------- +This plugin now plays nicely with Typogrify, but it +requires Typogrify version 2.07 or above. + +User Settings +------------- +Users are also able to pass a dictionary of settings +in the settings file which will control how the MathJax +library renders things. This could be very useful for +template builders that want to adjust the look and feel of +the math. See README for more details. +""" + +import os +import sys + +from pelican import signals, generators + +try: + from bs4 import BeautifulSoup +except ImportError as e: + BeautifulSoup = None + +try: + from . pelican_mathjax_markdown_extension import PelicanMathJaxExtension +except ImportError as e: + PelicanMathJaxExtension = None + +try: + string_type = basestring +except NameError: + string_type = str + + +def process_settings(pelicanobj): + """Sets user specified MathJax settings (see README for more details)""" + + mathjax_settings = {} + + # NOTE TO FUTURE DEVELOPERS: Look at the README and what is happening in + # this function if any additional changes to the mathjax settings need to + # be incorporated. Also, please inline comment what the variables + # will be used for + + # Default settings + mathjax_settings['auto_insert'] = True # if set to true, it will insert mathjax script automatically into content without needing to alter the template. + mathjax_settings['align'] = 'center' # controls alignment of of displayed equations (values can be: left, right, center) + mathjax_settings['indent'] = '0em' # if above is not set to 'center', then this setting acts as an indent + mathjax_settings['show_menu'] = 'true' # controls whether to attach mathjax contextual menu + mathjax_settings['process_escapes'] = 'true' # controls whether escapes are processed + mathjax_settings['latex_preview'] = 'TeX' # controls what user sees while waiting for LaTex to render + mathjax_settings['color'] = 'inherit' # controls color math is rendered in + mathjax_settings['linebreak_automatic'] = 'false' # Set to false by default for performance reasons (see http://docs.mathjax.org/en/latest/output.html#automatic-line-breaking) + mathjax_settings['tex_extensions'] = '' # latex extensions that can be embedded inside mathjax (see http://docs.mathjax.org/en/latest/tex.html#tex-and-latex-extensions) + mathjax_settings['responsive'] = 'false' # Tries to make displayed math responsive + mathjax_settings['responsive_break'] = '768' # The break point at which it math is responsively aligned (in pixels) + mathjax_settings['mathjax_font'] = 'default' # forces mathjax to use the specified font. + mathjax_settings['process_summary'] = BeautifulSoup is not None # will fix up summaries if math is cut off. Requires beautiful soup + mathjax_settings['message_style'] = 'normal' # This value controls the verbosity of the messages in the lower left-hand corner. Set it to "none" to eliminate all messages + mathjax_settings['font_list'] = ['STIX', 'TeX'] # Include in order of preference among TeX, STIX-Web, Asana-Math, Neo-Euler, Gyre-Pagella, Gyre-Termes and Latin-Modern + mathjax_settings['equation_numbering'] = 'none' # AMS, auto, none + + # Source for MathJax + mathjax_settings['source'] = "'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML'" + + # Get the user specified settings + try: + settings = pelicanobj.settings['MATH_JAX'] + except: + settings = None + + # If no settings have been specified, then return the defaults + if not isinstance(settings, dict): + return mathjax_settings + + # The following mathjax settings can be set via the settings dictionary + for key, value in ((key, settings[key]) for key in settings): + # Iterate over dictionary in a way that is compatible with both version 2 + # and 3 of python + + if key == 'align': + typeVal = isinstance(value, string_type) + + if not typeVal: + continue + + if value == 'left' or value == 'right' or value == 'center': + mathjax_settings[key] = value + else: + mathjax_settings[key] = 'center' + + if key == 'indent': + mathjax_settings[key] = value + + if key == 'source': + mathjax_settings[key] = value + + if key == 'show_menu' and isinstance(value, bool): + mathjax_settings[key] = 'true' if value else 'false' + + if key == 'message_style': + mathjax_settings[key] = value if value is not None else 'none' + + if key == 'auto_insert' and isinstance(value, bool): + mathjax_settings[key] = value + + if key == 'process_escapes' and isinstance(value, bool): + mathjax_settings[key] = 'true' if value else 'false' + + if key == 'latex_preview': + typeVal = isinstance(value, string_type) + + if not typeVal: + continue + + mathjax_settings[key] = value + + if key == 'color': + typeVal = isinstance(value, string_type) + + if not typeVal: + continue + + mathjax_settings[key] = value + + if key == 'linebreak_automatic' and isinstance(value, bool): + mathjax_settings[key] = 'true' if value else 'false' + + if key == 'process_summary' and isinstance(value, bool): + if value and BeautifulSoup is None: + print("BeautifulSoup4 is needed for summaries to be processed by render_math\nPlease install it") + value = False + + mathjax_settings[key] = value + + if key == 'responsive' and isinstance(value, bool): + mathjax_settings[key] = 'true' if value else 'false' + + if key == 'responsive_break' and isinstance(value, int): + mathjax_settings[key] = str(value) + + if key == 'tex_extensions' and isinstance(value, list): + # filter string values, then add '' to them + value = filter(lambda string: isinstance(string, string_type), value) + value = map(lambda string: "'%s'" % string, value) + mathjax_settings[key] = ',' + ','.join(value) + + if key == 'mathjax_font': + typeVal = isinstance(value, string_type) + + if not typeVal: + continue + + value = value.lower() + + if value == 'sanserif': + value = 'SansSerif' + elif value == 'fraktur': + value = 'Fraktur' + elif value == 'typewriter': + value = 'Typewriter' + else: + value = 'default' + + mathjax_settings[key] = value + + if key == 'font_list' and isinstance(value, list): + # make an array string from the list + value = filter(lambda string: isinstance(string, string_type), value) + value = map(lambda string: ",'%s'" % string, value) + mathjax_settings[key] = ''.join(value)[1:] + + if key == 'equation_numbering': + mathjax_settings[key] = value if value is not None else 'none' + + return mathjax_settings + +def process_summary(article): + """Ensures summaries are not cut off. Also inserts + mathjax script so that math will be rendered""" + + summary = article.summary + summary_parsed = BeautifulSoup(summary, 'html.parser') + math = summary_parsed.find_all(class_='math') + + if len(math) > 0: + last_math_text = math[-1].get_text() + if len(last_math_text) > 3 and last_math_text[-3:] == '...': + content_parsed = BeautifulSoup(article._content, 'html.parser') + full_text = content_parsed.find_all(class_='math')[len(math)-1].get_text() + math[-1].string = "%s ..." % full_text + summary = summary_parsed.decode() + + # clear memoization cache + import functools + if isinstance(article.get_summary, functools.partial): + memoize_instance = article.get_summary.func.__self__ + memoize_instance.cache.clear() + + article._summary = "%s" % (summary, process_summary.mathjax_script) + +def configure_typogrify(pelicanobj, mathjax_settings): + """Instructs Typogrify to ignore math tags - which allows Typogrify + to play nicely with math related content""" + + # If Typogrify is not being used, then just exit + if not pelicanobj.settings.get('TYPOGRIFY', False): + return + + try: + import typogrify + from distutils.version import LooseVersion + + if LooseVersion(typogrify.__version__) < LooseVersion('2.0.7'): + raise TypeError('Incorrect version of Typogrify') + + from typogrify.filters import typogrify + + # At this point, we are happy to use Typogrify, meaning + # it is installed and it is a recent enough version + # that can be used to ignore all math + # Instantiate markdown extension and append it to the current extensions + pelicanobj.settings['TYPOGRIFY_IGNORE_TAGS'].extend(['.math', 'script']) # ignore math class and script + + except (ImportError, TypeError) as e: + pelicanobj.settings['TYPOGRIFY'] = False # disable Typogrify + + if isinstance(e, ImportError): + print("\nTypogrify is not installed, so it is being ignored.\nIf you want to use it, please install via: pip install typogrify\n") + + if isinstance(e, TypeError): + print("\nA more recent version of Typogrify is needed for the render_math module.\nPlease upgrade Typogrify to the latest version (anything equal or above version 2.0.7 is okay).\nTypogrify will be turned off due to this reason.\n") + +def process_mathjax_script(mathjax_settings): + """Load the mathjax script template from file, and render with the settings""" + + # Read the mathjax javascript template from file + with open (os.path.dirname(os.path.realpath(__file__)) + + '/mathjax_script_template', 'r') as mathjax_script_template: + mathjax_template = mathjax_script_template.read() + + return mathjax_template.format(**mathjax_settings) + +def mathjax_for_markdown(pelicanobj, mathjax_script, mathjax_settings): + """Instantiates a customized markdown extension for handling mathjax + related content""" + + # Create the configuration for the markdown template + config = {} + config['mathjax_script'] = mathjax_script + config['math_tag_class'] = 'math' + config['auto_insert'] = mathjax_settings['auto_insert'] + + # Instantiate markdown extension and append it to the current extensions + try: + if isinstance(pelicanobj.settings.get('MD_EXTENSIONS'), list): # pelican 3.6.3 and earlier + pelicanobj.settings['MD_EXTENSIONS'].append(PelicanMathJaxExtension(config)) + else: + pelicanobj.settings['MARKDOWN'].setdefault('extensions', []).append(PelicanMathJaxExtension(config)) + except: + sys.excepthook(*sys.exc_info()) + sys.stderr.write("\nError - the pelican mathjax markdown extension failed to configure. MathJax is non-functional.\n") + sys.stderr.flush() + +def mathjax_for_rst(pelicanobj, mathjax_script, mathjax_settings): + """Setup math for RST""" + docutils_settings = pelicanobj.settings.get('DOCUTILS_SETTINGS', {}) + docutils_settings.setdefault('math_output', 'MathJax %s' % mathjax_settings['source']) + pelicanobj.settings['DOCUTILS_SETTINGS'] = docutils_settings + rst_add_mathjax.mathjax_script = mathjax_script + +def pelican_init(pelicanobj): + """ + Loads the mathjax script according to the settings. + Instantiate the Python markdown extension, passing in the mathjax + script as config parameter. + """ + + # Process settings, and set global var + mathjax_settings = process_settings(pelicanobj) + + # Generate mathjax script + mathjax_script = process_mathjax_script(mathjax_settings) + + # Configure Typogrify + configure_typogrify(pelicanobj, mathjax_settings) + + # Configure Mathjax For Markdown + if PelicanMathJaxExtension: + mathjax_for_markdown(pelicanobj, mathjax_script, mathjax_settings) + + # Configure Mathjax For RST + mathjax_for_rst(pelicanobj, mathjax_script, mathjax_settings) + + # Set process_summary's mathjax_script variable + process_summary.mathjax_script = None + if mathjax_settings['process_summary']: + process_summary.mathjax_script = mathjax_script + +def rst_add_mathjax(content): + """Adds mathjax script for reStructuredText""" + + # .rst is the only valid extension for reStructuredText files + _, ext = os.path.splitext(os.path.basename(content.source_path)) + if ext != '.rst': + return + + # If math class is present in text, add the javascript + # note that RST hardwires mathjax to be class "math" + if 'class="math"' in content._content: + content._content += "" % rst_add_mathjax.mathjax_script + +def process_rst_and_summaries(content_generators): + """ + Ensure mathjax script is applied to RST and summaries are + corrected if specified in user settings. + + Handles content attached to ArticleGenerator and PageGenerator objects, + since the plugin doesn't know how to handle other Generator types. + + For reStructuredText content, examine both articles and pages. + If article or page is reStructuredText and there is math present, + append the mathjax script. + + Also process summaries if present (only applies to articles) + and user wants summaries processed (via user settings) + """ + + for generator in content_generators: + if isinstance(generator, generators.ArticlesGenerator): + for article in ( + generator.articles + + generator.translations + + generator.drafts): + rst_add_mathjax(article) + #optionally fix truncated formulae in summaries. + if process_summary.mathjax_script is not None: + process_summary(article) + elif isinstance(generator, generators.PagesGenerator): + for page in generator.pages: + rst_add_mathjax(page) + for page in generator.hidden_pages: + rst_add_mathjax(page) + +def register(): + """Plugin registration""" + signals.initialized.connect(pelican_init) + signals.all_generators_finalized.connect(process_rst_and_summaries) diff --git a/plugins/render_math/mathjax_script_template b/plugins/render_math/mathjax_script_template new file mode 100644 index 0000000..db8aeba --- /dev/null +++ b/plugins/render_math/mathjax_script_template @@ -0,0 +1,61 @@ +if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {{ + var align = "{align}", + indent = "{indent}", + linebreak = "{linebreak_automatic}"; + + if ({responsive}) {{ + align = (screen.width < {responsive_break}) ? "left" : align; + indent = (screen.width < {responsive_break}) ? "0em" : indent; + linebreak = (screen.width < {responsive_break}) ? 'true' : linebreak; + }} + + var mathjaxscript = document.createElement('script'); + mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#'; + mathjaxscript.type = 'text/javascript'; + mathjaxscript.src = {source}; + + var configscript = document.createElement('script'); + configscript.type = 'text/x-mathjax-config'; + configscript[(window.opera ? "innerHTML" : "text")] = + "MathJax.Hub.Config({{" + + " config: ['MMLorHTML.js']," + + " TeX: {{ extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'{tex_extensions}], equationNumbers: {{ autoNumber: '{equation_numbering}' }} }}," + + " jax: ['input/TeX','input/MathML','output/HTML-CSS']," + + " extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," + + " displayAlign: '"+ align +"'," + + " displayIndent: '"+ indent +"'," + + " showMathMenu: {show_menu}," + + " messageStyle: '{message_style}'," + + " tex2jax: {{ " + + " inlineMath: [ ['\\\\(','\\\\)'] ], " + + " displayMath: [ ['$$','$$'] ]," + + " processEscapes: {process_escapes}," + + " preview: '{latex_preview}'," + + " }}, " + + " 'HTML-CSS': {{ " + + " availableFonts: {font_list}," + + " preferredFont: 'STIX'," + + " styles: {{ '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {{color: '{color} ! important'}} }}," + + " linebreaks: {{ automatic: "+ linebreak +", width: '90% container' }}," + + " }}, " + + "}}); " + + "if ('{mathjax_font}' !== 'default') {{" + + "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {{" + + "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" + + "VARIANT['normal'].fonts.unshift('MathJax_{mathjax_font}');" + + "VARIANT['bold'].fonts.unshift('MathJax_{mathjax_font}-bold');" + + "VARIANT['italic'].fonts.unshift('MathJax_{mathjax_font}-italic');" + + "VARIANT['-tex-mathit'].fonts.unshift('MathJax_{mathjax_font}-italic');" + + "}});" + + "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {{" + + "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" + + "VARIANT['normal'].fonts.unshift('MathJax_{mathjax_font}');" + + "VARIANT['bold'].fonts.unshift('MathJax_{mathjax_font}-bold');" + + "VARIANT['italic'].fonts.unshift('MathJax_{mathjax_font}-italic');" + + "VARIANT['-tex-mathit'].fonts.unshift('MathJax_{mathjax_font}-italic');" + + "}});" + + "}}"; + + (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript); + (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript); +}} diff --git a/plugins/render_math/pelican_mathjax_markdown_extension.py b/plugins/render_math/pelican_mathjax_markdown_extension.py new file mode 100644 index 0000000..f404b72 --- /dev/null +++ b/plugins/render_math/pelican_mathjax_markdown_extension.py @@ -0,0 +1,158 @@ +# -*- coding: utf-8 -*- +""" +Pelican Mathjax Markdown Extension +================================== +An extension for the Python Markdown module that enables +the Pelican python blog to process mathjax. This extension +gives Pelican the ability to use Mathjax as a "first class +citizen" of the blog +""" + +import markdown + +from markdown.util import etree +from markdown.util import AtomicString + +class PelicanMathJaxPattern(markdown.inlinepatterns.Pattern): + """Inline markdown processing that matches mathjax""" + + def __init__(self, pelican_mathjax_extension, tag, pattern): + super(PelicanMathJaxPattern,self).__init__(pattern) + self.math_tag_class = pelican_mathjax_extension.getConfig('math_tag_class') + self.pelican_mathjax_extension = pelican_mathjax_extension + self.tag = tag + + def handleMatch(self, m): + node = markdown.util.etree.Element(self.tag) + node.set('class', self.math_tag_class) + + prefix = '\\(' if m.group('prefix') == '$' else m.group('prefix') + suffix = '\\)' if m.group('suffix') == '$' else m.group('suffix') + node.text = markdown.util.AtomicString(prefix + m.group('math') + suffix) + + # If mathjax was successfully matched, then JavaScript needs to be added + # for rendering. The boolean below indicates this + self.pelican_mathjax_extension.mathjax_needed = True + return node + +class PelicanMathJaxCorrectDisplayMath(markdown.treeprocessors.Treeprocessor): + """Corrects invalid html that results from a
being put inside + a

for displayed math""" + + def __init__(self, pelican_mathjax_extension): + self.pelican_mathjax_extension = pelican_mathjax_extension + + def correct_html(self, root, children, div_math, insert_idx, text): + """Separates out

from the parent tag

. Anything + in between is put into its own parent tag of

""" + + current_idx = 0 + + for idx in div_math: + el = markdown.util.etree.Element('p') + el.text = text + el.extend(children[current_idx:idx]) + + # Test to ensure that empty

is not inserted + if len(el) != 0 or (el.text and not el.text.isspace()): + root.insert(insert_idx, el) + insert_idx += 1 + + text = children[idx].tail + children[idx].tail = None + root.insert(insert_idx, children[idx]) + insert_idx += 1 + current_idx = idx+1 + + el = markdown.util.etree.Element('p') + el.text = text + el.extend(children[current_idx:]) + + if len(el) != 0 or (el.text and not el.text.isspace()): + root.insert(insert_idx, el) + + def run(self, root): + """Searches for

that are children in

tags and corrects + the invalid HTML that results""" + + math_tag_class = self.pelican_mathjax_extension.getConfig('math_tag_class') + + for parent in root: + div_math = [] + children = list(parent) + + for div in parent.findall('div'): + if div.get('class') == math_tag_class: + div_math.append(children.index(div)) + + # Do not process further if no displayed math has been found + if not div_math: + continue + + insert_idx = list(root).index(parent) + self.correct_html(root, children, div_math, insert_idx, parent.text) + root.remove(parent) # Parent must be removed last for correct insertion index + + return root + +class PelicanMathJaxAddJavaScript(markdown.treeprocessors.Treeprocessor): + """Tree Processor for adding Mathjax JavaScript to the blog""" + + def __init__(self, pelican_mathjax_extension): + self.pelican_mathjax_extension = pelican_mathjax_extension + + def run(self, root): + # If no mathjax was present, then exit + if (not self.pelican_mathjax_extension.mathjax_needed): + return root + + # Add the mathjax script to the html document + mathjax_script = etree.Element('script') + mathjax_script.set('type','text/javascript') + mathjax_script.text = AtomicString(self.pelican_mathjax_extension.getConfig('mathjax_script')) + root.append(mathjax_script) + + # Reset the boolean switch to false so that script is only added + # to other pages if needed + self.pelican_mathjax_extension.mathjax_needed = False + return root + +class PelicanMathJaxExtension(markdown.Extension): + """A markdown extension enabling mathjax processing in Markdown for Pelican""" + def __init__(self, config): + + try: + # Needed for markdown versions >= 2.5 + self.config['mathjax_script'] = ['', 'Mathjax JavaScript script'] + self.config['math_tag_class'] = ['math', 'The class of the tag in which mathematics is wrapped'] + self.config['auto_insert'] = [True, 'Determines if mathjax script is automatically inserted into content'] + super(PelicanMathJaxExtension,self).__init__(**config) + except AttributeError: + # Markdown versions < 2.5 + config['mathjax_script'] = [config['mathjax_script'], 'Mathjax JavaScript script'] + config['math_tag_class'] = [config['math_tag_class'], 'The class of the tag in which mathematic is wrapped'] + config['auto_insert'] = [config['auto_insert'], 'Determines if mathjax script is automatically inserted into content'] + super(PelicanMathJaxExtension,self).__init__(config) + + # Used as a flag to determine if javascript + # needs to be injected into a document + self.mathjax_needed = False + + def extendMarkdown(self, md, md_globals): + # Regex to detect mathjax + mathjax_inline_regex = r'(?P\$)(?P.+?)(?P(?\$\$|\\begin\{(.+?)\})(?P.+?)(?P\2|\\end\{\3\})' + + # Process mathjax before escapes are processed since escape processing will + # intefer with mathjax. The order in which the displayed and inlined math + # is registered below matters + md.inlinePatterns.add('mathjax_displayed', PelicanMathJaxPattern(self, 'div', mathjax_display_regex), ' tag within a

tag) + md.treeprocessors.add('mathjax_correctdisplayedmath', PelicanMathJaxCorrectDisplayMath(self), '>inline') + + # If necessary, add the JavaScript Mathjax library to the document. This must + # be last in the ordered dict (hence it is given the position '_end') + if self.getConfig('auto_insert'): + md.treeprocessors.add('mathjax_addjavascript', PelicanMathJaxAddJavaScript(self), '_end') diff --git a/themes/bootstrap-4-blog-theme/templates/base.html b/themes/bootstrap-4-blog-theme/templates/base.html index 36f4890..4ce4815 100644 --- a/themes/bootstrap-4-blog-theme/templates/base.html +++ b/themes/bootstrap-4-blog-theme/templates/base.html @@ -35,6 +35,7 @@ {% endfor %} {% endif %} {% endblock head %} +