summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile5
-rw-r--r--README4
-rwxr-xr-xsrc/index.rb40
-rwxr-xr-xsrc/index.sh66
4 files changed, 71 insertions, 44 deletions
diff --git a/Makefile b/Makefile
index 6897fc4..344a120 100644
--- a/Makefile
+++ b/Makefile
@@ -47,9 +47,10 @@ $(DOCUMENTS_DIR): $(RESOURCES_DIR) $(MANUAL_FILE)
$(INFO_PLIST_FILE): src/Info.plist $(CONTENTS_DIR)
cp src/Info.plist $@
-$(INDEX_FILE): src/index.rb $(DOCUMENTS_DIR)
+$(INDEX_FILE): src/index.sh $(DOCUMENTS_DIR)
rm -f $@
- ruby src/index.rb $(DOCUMENTS_DIR)/*.html | sqlite3 $@
+ src/index.sh $@ $(DOCUMENTS_DIR)/*.html
+ #ruby src/index.rb $(DOCUMENTS_DIR)/*.html | sqlite3 $@
$(ICON_FILE): src/icon.png $(DOCSET_DIR)
cp src/icon.png $@
diff --git a/README b/README
index 46710fc..1e64579 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Here is a script and a Makefile for generating a GNU Autoconf docset for Dash. The script is based on benzado's script for GNU Make https://github.com/benzado/gnu-make-dash-docset.
+Here is a script and a Makefile for generating a GNU Autoconf docset for Dash. The script is loosely based on benzado's script for GNU Make https://github.com/benzado/gnu-make-dash-docset.
- GNU Autoconf: https://www.gnu.org/software/autoconf/
- Dash: https://kapeli.com/dash
@@ -9,7 +9,7 @@ will be downloaded from www.gnu.org and packaged appropriately.
Requirements:
+- any POSIX-compliant shell
- curl
- make
-- ruby
- sqlite3
diff --git a/src/index.rb b/src/index.rb
deleted file mode 100755
index 81b042a..0000000
--- a/src/index.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'pathname'
-
-puts %Q[
- CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
- CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);
-]
-
-INSERT_SQL = %Q[
- INSERT INTO searchIndex(name, type, path) VALUES ('%s','%s','%s');
-]
-
-PATTERN = %r[<title>(.*)\(Autoconf\)(.*)</title>]
-
-BUILTIN_PATTERN = /The node you are looking for is at.*Limitations-of-.*\.html/
-MACRO_PATTERN = /The node you are looking for is at/
-
-def quote(s)
- s.gsub(/&amp;/, '&').gsub(/'/, "\\'").gsub(/&lt;/, '<')
-end
-
-ARGV.each do |arg|
- Pathname.glob(arg) do |path|
- macro_match = path.each_line.lazy.map { |line| MACRO_PATTERN.match(line) }.find { |m| m }
- builtin_match = path.each_line.lazy.map { |line| BUILTIN_PATTERN.match(line) }.find { |m| m }
- if builtin_match
- type = "Builtin"
- elsif macro_match
- type = "Macro"
- else
- type = "Guide"
- end
-
- match = path.each_line.lazy.map { |line| PATTERN.match(line) }.find { |m| m }
- if match
- printf INSERT_SQL, quote(match[1]), type, path.basename
- else
- $stderr.puts "%{path.basename}: no title found"
- end
- end
-end
diff --git a/src/index.sh b/src/index.sh
new file mode 100755
index 0000000..e81a0f7
--- /dev/null
+++ b/src/index.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env sh
+
+DB_PATH="$1"
+shift
+
+get_title() {
+ FILE="$1"
+
+ PATTERN="<title>.*\(Autoconf\).*</title>"
+
+ #Find pattern in file
+ grep -Eo "$PATTERN" "$FILE" |
+ #Remove tag
+ sed 's/<[^>]*>//g' | \
+ #Remove '(automake)'
+ sed 's/(Autoconf)//g' | \
+ #Remove trailing space
+ sed 's/[ ]*$//g' | \
+ #Replace '&amp' with '&'
+ sed 's/&amp/&/g' | \
+ #Replace '&lt;' with '<'
+ sed 's/&lt;/</g'
+}
+
+get_type() {
+ FILE="$1"
+ PATTERN="The node you are looking for is at.*Limitations-of-.*\.html;Builtin
+ The node you are looking for is at;Macro"
+
+ echo "$PATTERN" | while read -r line; do
+ #echo "$line"
+ if grep -Eq "$(echo "$line" | cut -d ';' -f 1)" "$FILE"; then
+ echo "$line" | cut -d ';' -f 2
+ break
+ fi
+ done
+}
+
+insert() {
+ NAME="$1"
+ TYPE="$2"
+ PAGE_PATH="$3"
+
+ sqlite3 "$DB_PATH" "INSERT INTO searchIndex(name, type, path) VALUES (\"$NAME\",\"$TYPE\",\"$PAGE_PATH\");"
+}
+
+# Create table
+sqlite3 "$DB_PATH" "CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);"
+sqlite3 "$DB_PATH" "CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);"
+
+# Get title and insert into table for each html file
+while [ -n "$1" ]; do
+ unset PAGE_NAME
+ unset PAGE_TYPE
+ PAGE_NAME="$(get_title "$1")"
+ if [ -n "$PAGE_NAME" ]; then
+ PAGE_TYPE="$(get_type "$1")"
+ #get_type "$1"
+ if [ -z "$PAGE_TYPE" ]; then
+ PAGE_TYPE="Guide"
+ fi
+ #echo "$PAGE_TYPE"
+ insert "$PAGE_NAME" "$PAGE_TYPE" "$(basename "$1")"
+ fi
+ shift
+done