From 776ec5a35d27125e4f2dce4838cabb5606e4d34b Mon Sep 17 00:00:00 2001 From: Cimbali Date: Sun, 17 Nov 2019 19:33:58 +0100 Subject: [PATCH 1/2] Add LaTeX documentation from https://latexref.xyz From https://ctan.org/pkg/latex2e-help-texinfo, the license is Public Domain. --- lib/docs/filters/latex/clean_html.rb | 20 ++++++++++++ lib/docs/filters/latex/entries.rb | 46 +++++++++++++++++++++++++++ lib/docs/scrapers/latex.rb | 22 +++++++++++++ public/icons/docs/latex/16.png | Bin 0 -> 305 bytes public/icons/docs/latex/16@2x.png | Bin 0 -> 568 bytes public/icons/docs/latex/SOURCE | 1 + 6 files changed, 89 insertions(+) create mode 100644 lib/docs/filters/latex/clean_html.rb create mode 100644 lib/docs/filters/latex/entries.rb create mode 100644 lib/docs/scrapers/latex.rb create mode 100644 public/icons/docs/latex/16.png create mode 100644 public/icons/docs/latex/16@2x.png create mode 100644 public/icons/docs/latex/SOURCE diff --git a/lib/docs/filters/latex/clean_html.rb b/lib/docs/filters/latex/clean_html.rb new file mode 100644 index 00000000..cc327b04 --- /dev/null +++ b/lib/docs/filters/latex/clean_html.rb @@ -0,0 +1,20 @@ +module Docs + class Latex + class CleanHtmlFilter < Filter + def call + css('hr, div.header, div.referenceinfo').remove + css('div.shortcontents, div.contents, h2.shortcontents-heading, h2.contents-heading, h1.settitle').remove if root_page? + + css('span[id] + h1, span[id] + h2, span[id] + h3, span[id] + h4, span[id] + h5, span[id] + h6').each do |node| + id = node.previous['id'] + node.previous.remove + node['id'] = id.sub(/-\d$/, '') if id + end + + css('h1, h2, h3, h4').each { |node| node.content = node.content.sub /^[0-9A-Z]+(\.[0-9]+)* /, '' } + + doc + end + end + end +end diff --git a/lib/docs/filters/latex/entries.rb b/lib/docs/filters/latex/entries.rb new file mode 100644 index 00000000..5270229b --- /dev/null +++ b/lib/docs/filters/latex/entries.rb @@ -0,0 +1,46 @@ +module Docs + class Latex + class EntriesFilter < Docs::EntriesFilter + + @@entries = Hash.new + + def initialize(*) + super + + return unless root_page? + + css('.contents > ul > li').each do |node| + lev1 = node.at_css('> a:first-child').text.sub /^[0-9A-Z]+(\.[0-9]+)* /, '' + node.css('a').each do |link| + href = link['href'].split('#')[0].parameterize.downcase + @@entries[href] = lev1 + end + end + + end + + def get_name + at_css('h1, h2, h3, h4, h5, h6').content.sub /^[0-9A-Z]+(\.[0-9]+)* /, '' + end + + def get_type + begin + return @@entries[slug.downcase] + rescue + return "Missing type with slug #{slug}" + end + end + + def include_default_entry? + true + end + + def additional_entries + return [] + end + + private + + end + end +end diff --git a/lib/docs/scrapers/latex.rb b/lib/docs/scrapers/latex.rb new file mode 100644 index 00000000..e603b72a --- /dev/null +++ b/lib/docs/scrapers/latex.rb @@ -0,0 +1,22 @@ +module Docs + class Latex < UrlScraper + self.name = 'LaTeX' + self.slug = 'latex' + self.type = 'simple' + self.links = { + home: 'https://ctan.org/pkg/latex2e-help-texinfo/' + } + + self.base_url = 'http://latexref.xyz' + + html_filters.push 'latex/entries', 'latex/clean_html' + + options[:skip_patterns] = [/^\/dev\//, /\.(dvi|pdf)$/] + + options[:attribution] = <<-HTML + © 2007–2018 Karl Berry
+ Public Domain Software + HTML + + end +end diff --git a/public/icons/docs/latex/16.png b/public/icons/docs/latex/16.png new file mode 100644 index 0000000000000000000000000000000000000000..19a8a6a66f2d44ade9183e8859cf53282bba09ff GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X#B!gc<#oKLK$hOI#yL zg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe2(=jq}YV$u8d!bY#AK#5}?=ihHn z?r>fpV9JrHU|PZIYuQ%5AUb&a#a5QMhVln0W~`Ue7yI%Ca!78;IITTLb5hv<(~Z-= z+x&kn^X<=U8PhwDB*P;XHS6uWaLD`3{A2H!*))vyJYraFao+Hl;k*D>X>q|Ha*Gth zA}=lLDUhfY>b*A!-@9*~;0DZ#X>FVdQ&MBb@09$i+D*ylh literal 0 HcmV?d00001 diff --git a/public/icons/docs/latex/16@2x.png b/public/icons/docs/latex/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..971833b2fd9af1b3778aabc4cc86b9f01097f55b GIT binary patch literal 568 zcmV-80>}M{P)8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10mVr~ zK~z|U?bJ_*O<@=Y@ZT7QT$xcL(cQ?O$P}hTlY|tqpfob>fFb#+}<(_;Vb6j23BHYcK#U8TfqzQ5TlrvkebNeN3yfk*oTi; zfpxf!#U;(H!YiE2_G-9|&6t}{XyQn+K8TxHkweEY~> zqyan;<2#0{_+1h^giWH;_t{<@-*HCBGl2_Y%2&#mrW0sj7>Dr)bCS6H1mG@?<{G=4 ztb6eRd-5NhRX}7BJ`2;_!g#JuZ;|0000 Date: Wed, 26 May 2021 21:13:38 +0200 Subject: [PATCH 2/2] LaTeX: syntax highlighting --- assets/javascripts/vendor/prism.js | 2941 ++++++++++++++------------ lib/docs/filters/latex/clean_html.rb | 5 + 2 files changed, 1647 insertions(+), 1299 deletions(-) diff --git a/assets/javascripts/vendor/prism.js b/assets/javascripts/vendor/prism.js index 2f830fe4..8fc99771 100644 --- a/assets/javascripts/vendor/prism.js +++ b/assets/javascripts/vendor/prism.js @@ -1,13 +1,13 @@ /* PrismJS 1.23.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+c+cpp+coffeescript+crystal+d+dart+diff+django+elixir+erlang+go+groovy+java+json+julia+kotlin+lua+markup-templating+matlab+nginx+nim+ocaml+perl+php+python+jsx+ruby+rust+scss+shell-session+sql+typescript+yaml */ +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+c+cpp+coffeescript+crystal+d+dart+diff+django+elixir+erlang+go+groovy+java+json+julia+kotlin+latex+lua+markup-templating+matlab+nginx+nim+ocaml+perl+php+python+jsx+ruby+rust+scss+shell-session+sql+typescript+yaml */ /// var _self = (typeof window !== 'undefined') ? window // if in browser : ( (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) - ? self // if in worker - : {} // if in node js + ? self // if in worker + : {} // if in node js ); /** @@ -18,1133 +18,1151 @@ var _self = (typeof window !== 'undefined') * @namespace * @public */ -var Prism = (function (_self){ +var Prism = (function (_self) { -// Private helper vars -var lang = /\blang(?:uage)?-([\w-]+)\b/i; -var uniqueId = 0; + // Private helper vars + var lang = /\blang(?:uage)?-([\w-]+)\b/i; + var uniqueId = 0; + // The grammar object for plaintext + var plainTextGrammar = {}; -var _ = { - /** - * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the - * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load - * additional languages or plugins yourself. - * - * By setting this value to `true`, Prism will not automatically highlight all code elements on the page. - * - * You obviously have to change this value before the automatic highlighting started. To do this, you can add an - * empty Prism object into the global scope before loading the Prism script like this: - * - * ```js - * window.Prism = window.Prism || {}; - * Prism.manual = true; - * // add a new