Unified · Split
| @@ -0,0 +1,32 @@ | |||
| 1 | module Docs | ||
| 2 | class Hammerspoon | ||
| 3 | class CleanHtmlFilter < Filter | ||
| 4 | def call | ||
| 5 | |||
| 6 | # Remove script tags for functionality not needed in DevDocs | ||
| 7 | css("script").remove | ||
| 8 | |||
| 9 | # Remove styles that are not necessary | ||
| 10 | css("style").remove | ||
| 11 | |||
| 12 | # Modify the main title - remove leading "docs » " | ||
| 13 | at_css("h1").content = at_css("h1").content.sub("docs » ", "") | ||
| 14 | |||
| 15 | # add syntax highlighting | ||
| 16 | css("pre").each do |pre| | ||
| 17 | if pre.get_attribute("lang") == "lua" | ||
| 18 | pre.set_attribute("data-language", "lua") | ||
| 19 | pre.remove_attribute("lang") | ||
| 20 | else | ||
| 21 | if pre.get_attribute("lang") | ||
| 22 | # logger.warn("unrecognised pre.get_attribute('lang') = #{pre.get_attribute("lang")}") | ||
| 23 | end | ||
| 24 | end | ||
| 25 | end | ||
| 26 | |||
| 27 | doc | ||
| 28 | end | ||
| 29 | |||
| 30 | end | ||
| 31 | end | ||
| 32 | end | ||
| @@ -0,0 +1,71 @@ | |||
| 1 | module Docs | ||
| 2 | class Hammerspoon | ||
| 3 | class EntriesFilter < Docs::EntriesFilter | ||
| 4 | def get_name | ||
| 5 | at_css("h1").content | ||
| 6 | end | ||
| 7 | |||
| 8 | def get_type | ||
| 9 | subpath.split("/")[0] | ||
| 10 | end | ||
| 11 | |||
| 12 | def additional_entries | ||
| 13 | return [] if root_page? | ||
| 14 | entries = [] | ||
| 15 | |||
| 16 | base_name = at_css("h1").content | ||
| 17 | |||
| 18 | # add a base entry | ||
| 19 | entries << [base_name, nil, base_name] | ||
| 20 | |||
| 21 | css("section").each do |section| | ||
| 22 | title_node = section.at_css("h5") | ||
| 23 | if title_node.nil? | ||
| 24 | next | ||
| 25 | end | ||
| 26 | entry_name = title_node.content.strip | ||
| 27 | entry_id = section["id"] | ||
| 28 | |||
| 29 | fn_type = section.at_css("a.dashAnchor").get_attribute("name") | ||
| 30 | # this dashAnchor is the most consistent way to get the type of the entry | ||
| 31 | if fn_type.start_with?("//apple_ref/cpp/Function") | ||
| 32 | fn_type = "Function" | ||
| 33 | entry_name << "()" | ||
| 34 | elsif fn_type.start_with?("//apple_ref/cpp/Constructor/") | ||
| 35 | fn_type = "Constructor" | ||
| 36 | entry_name << "()" | ||
| 37 | elsif fn_type.start_with?("//apple_ref/cpp/Method") | ||
| 38 | fn_type = "Method" | ||
| 39 | entry_name << "()" | ||
| 40 | elsif fn_type.start_with?("//apple_ref/cpp/Class") | ||
| 41 | fn_type = "Class" | ||
| 42 | elsif fn_type.start_with?("//apple_ref/cpp/Constant") | ||
| 43 | fn_type = "Constant" | ||
| 44 | elsif fn_type.start_with?("//apple_ref/cpp/Variable") | ||
| 45 | fn_type = "Variable" | ||
| 46 | elsif fn_type.start_with?("//apple_ref/cpp/Deprecated") | ||
| 47 | fn_type = "Deprecated" | ||
| 48 | elsif fn_type.start_with?("//apple_ref/cpp/Field") | ||
| 49 | fn_type = "Field" | ||
| 50 | else | ||
| 51 | fn_type = "Unknown" | ||
| 52 | end | ||
| 53 | |||
| 54 | # Create a new entry for each method/function | ||
| 55 | if fn_type != "Unknown" | ||
| 56 | entries << ["#{base_name}.#{entry_name}", entry_id, base_name] | ||
| 57 | end | ||
| 58 | |||
| 59 | end | ||
| 60 | |||
| 61 | entries | ||
| 62 | end | ||
| 63 | |||
| 64 | def include_default_entry? | ||
| 65 | # Decide when to include the default entry | ||
| 66 | # Here we include it unless the page is a module overview or similar | ||
| 67 | !subpath.end_with?("index.lp") | ||
| 68 | end | ||
| 69 | end | ||
| 70 | end | ||
| 71 | end | ||
| @@ -0,0 +1,32 @@ | |||
| 1 | module Docs | ||
| 2 | class Hammerspoon < UrlScraper | ||
| 3 | self.type = 'hammerspoon' | ||
| 4 | self.root_path = '' | ||
| 5 | self.links = { | ||
| 6 | home: 'https://www.hammerspoon.org', | ||
| 7 | code: 'https://github.com/Hammerspoon/hammerspoon' | ||
| 8 | } | ||
| 9 | |||
| 10 | html_filters.push 'hammerspoon/clean_html', 'hammerspoon/entries' | ||
| 11 | |||
| 12 | # links with no content will still render a page, this is an error in the docs | ||
| 13 | # (see: https://github.com/Hammerspoon/hammerspoon/pull/3579) | ||
| 14 | options[:skip] = ['module.lp/matrix.md'] | ||
| 15 | # Replace '/module.lp/' with '' in URLs | ||
| 16 | options[:replace_paths] = { 'localhost:12345/module.lp/MATRIX.md' => 'localhost:12345/module.lp/hs.canvas.matrix' } | ||
| 17 | |||
| 18 | # Hammerspoon docs don't have a license (MIT specified in the hammerspoon repo) | ||
| 19 | # https://github.com/Hammerspoon/hammerspoon/blob/master/LICENSE | ||
| 20 | options[:attribution] = <<-HTML | ||
| 21 | Hammerspoon | ||
| 22 | HTML | ||
| 23 | |||
| 24 | |||
| 25 | version '0.9.100' do | ||
| 26 | self.release = '0.9.100' | ||
| 27 | # add `hs.doc.hsdocs.start()` to your init.lua to enable the docs server | ||
| 28 | self.base_url = 'http://localhost:12345/' | ||
| 29 | end | ||
| 30 | |||
| 31 | end | ||
| 32 | end | ||
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1 @@ | |||
| 1 | https://www.hammerspoon.org/images/hammerspoon.ico | ||