aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2014-02-08 23:55:33 -0500
committerRalph Amissah <ralph@amissah.com>2014-02-08 23:55:33 -0500
commite43961c041661406ffd0f376cbaab929fe38008f (patch)
treeebae95f42e8c221f4edbaea301ef0dbd67dfe985
parentdebian/changelog (5.3.2-1) (diff)
parentdocumentation, minor update (diff)
Merge tag 'sisu_5.3.3' into debian/sid
SiSU 5.3.3
-rw-r--r--README11
-rw-r--r--data/doc/sisu/CHANGELOG_v515
-rw-r--r--data/doc/sisu/CHANGELOG_v615
-rw-r--r--data/doc/sisu/markup-samples/manual/_sisu/rc/sisurc_by_lng.yml16
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_howto.sst2
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_install_run.sst6
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_installation.ssi6
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_markup.sst2
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_postgresql.sst16
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_remote.sst4
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_search_cgi.ssi46
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_search_intro.ssi4
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_sql.ssi2
-rw-r--r--data/doc/sisu/markup-samples/manual/en/sisu_sqlite.sst16
-rw-r--r--data/sisu/conf/cgi-bin/sisu_search_pgsql.cgi886
-rw-r--r--data/sisu/conf/cgi-bin/sisu_search_sqlite.cgi877
-rw-r--r--data/sisu/conf/nginx/sites-available/sisu_search83
-rw-r--r--data/sisu/conf/nginx/sites-available/sisu_search_srv84
-rw-r--r--data/sisu/v5/v/version.yml6
-rw-r--r--data/sisu/v6/v/version.yml6
-rw-r--r--lib/sisu/v5/cgi_pgsql.rb18
-rw-r--r--lib/sisu/v5/cgi_sql_common.rb10
-rw-r--r--lib/sisu/v5/cgi_sqlite.rb12
-rw-r--r--lib/sisu/v5/sysenv.rb2
-rw-r--r--lib/sisu/v6/cgi_pgsql.rb18
-rw-r--r--lib/sisu/v6/cgi_sql_common.rb10
-rw-r--r--lib/sisu/v6/cgi_sqlite.rb12
-rw-r--r--lib/sisu/v6/sysenv.rb4
-rw-r--r--man/man1/sisu.1167
-rw-r--r--rbuild4
30 files changed, 1453 insertions, 907 deletions
diff --git a/README b/README
index 82bf5466..16c4cadb 100644
--- a/README
+++ b/README
@@ -80,9 +80,11 @@ separate gems are made/installed for sisu v5 & sisu v6 contained in source:
for individual steps (create, build, install) see rake options, rake -T to
specify sisu version for sisu installed via gem
- sisu _5.3.0_ --version
+ gem search sisu
- sisu _6.0.0_ --version
+ sisu _5.3.3_ --version
+
+ sisu _6.0.3_ --version
to uninstall sisu installed via gem
@@ -111,7 +113,6 @@ ruby setup.rb setup
#[as root:]
ruby setup.rb install
-
further information:
<http://i.loveruby.net/en/projects/setup/>
<http://i.loveruby.net/en/projects/setup/doc/usage.html>
@@ -2229,7 +2230,7 @@ at:
-* Generated by: SiSU 6.0.1 of 2014w05/2 (2014-02-04)
+* Generated by: SiSU 6.0.3 of 2014w05/4 (2014-02-06)
* Ruby version: ruby 2.0.0p353 (2013-11-22) [i386-linux-gnu]
-* Last Generated on: 2014-02-04 23:45:43 -0500
+* Last Generated on: 2014-02-08 20:38:31 -0500
* SiSU http://www.sisudoc.org/
diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5
index d9dc1349..639d9d90 100644
--- a/data/doc/sisu/CHANGELOG_v5
+++ b/data/doc/sisu/CHANGELOG_v5
@@ -31,6 +31,21 @@ v2 branch is removed; it is available in sisu =< 3.3.2
%% Reverse Chronological:
+%% 5.3.3.orig.tar.xz (2014-02-08:05/6)
+http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_5.3.3
+http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_5.3.3-1
+http://www.jus.uio.no/sisu/pkg/src/sisu_5.3.3.orig.tar.xz
+ sisu_5.3.3.orig.tar.xz
+ sisu_5.3.3-1.dsc
+
+* cgi, search form (generator), using cgi ENV variables
+
+* examples
+ * nginx conf
+ * cgi search forms pgsql & sqlite
+
+* documentation, minor update
+
%% 5.3.2.orig.tar.xz (2014-02-05:05/3)
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_5.3.2
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_5.3.2-1
diff --git a/data/doc/sisu/CHANGELOG_v6 b/data/doc/sisu/CHANGELOG_v6
index 2057fadc..5cc8918e 100644
--- a/data/doc/sisu/CHANGELOG_v6
+++ b/data/doc/sisu/CHANGELOG_v6
@@ -21,6 +21,21 @@ v2 branch is removed; it is available in sisu =< 3.3.2
%% Reverse Chronological:
+%% 6.0.3.orig.tar.xz (2014-02-08:05/6)
+http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_6.0.3
+http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_6.0.3-1
+http://www.jus.uio.no/sisu/pkg/src/sisu_6.0.3.orig.tar.xz
+ sisu_6.0.3.orig.tar.xz
+ sisu_6.0.3-1.dsc
+
+* cgi, search form (generator), using cgi ENV variables
+
+* examples
+ * nginx conf
+ * cgi search forms pgsql & sqlite
+
+* documentation, minor update
+
%% 6.0.2.orig.tar.xz (2014-02-05:05/3)
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_6.0.2
http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_6.0.2-1
diff --git a/data/doc/sisu/markup-samples/manual/_sisu/rc/sisurc_by_lng.yml b/data/doc/sisu/markup-samples/manual/_sisu/rc/sisurc_by_lng.yml
index 4ab568ca..9b60f8c9 100644
--- a/data/doc/sisu/markup-samples/manual/_sisu/rc/sisurc_by_lng.yml
+++ b/data/doc/sisu/markup-samples/manual/_sisu/rc/sisurc_by_lng.yml
@@ -15,8 +15,9 @@
# #all: 'image'
#% presentation/web directory, main path and subdirectories (most subdirectories are created automatically based on markup directory name)
webserv:
- url_root: 'http://www.sisudoc.org' #url to document root, without dir stub
-# path: '/var/www' #either (i) / [full path from root] or (ii) ~/ [home] or (iii) ./ [pwd] or (iv) will be made from home
+# url_root: 'http://www.sisudoc.org' #url to document root, without dir stub
+ url_root: 'http://192.168.1.108' #url to document root, without dir stub
+ path: '/srv/www' #either (i) / [full path from root] or (ii) ~/ [home] or (iii) ./ [pwd] or (iv) will be made from home
# images: '_sisu/image'
# man: 'man'
# cgi: '/usr/local/lib/sisu-cgi'
@@ -130,6 +131,15 @@ program_set:
# flag: true
## action: http://localhost:8081/cgi-bin/sisu_pgsql.cgi
# action: http://search.sisudoc.org
-# db: sisu
+# db: manual
# title: sample search form
#promo: sisu_search_libre, sisu_icon, sisu, open_society, fsf, ruby
+
+search:
+ sisu:
+ flag: true
+ action: http://192.168.1.108/cgi/sisu_search.cgi
+# action: http://192.168.1.108/cgi-bin/sisu_pgsql.cgi
+# action: http://search.sisudoc.org
+ db: manual
+ title: sample search form
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_howto.sst b/data/doc/sisu/markup-samples/manual/en/sisu_howto.sst
index 4a23bdfe..afba3e48 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_howto.sst
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_howto.sst
@@ -41,7 +41,7 @@ If SiSU is installed on your system usual man commands should be available, try:
man sisu
-The SiSU man pages can be viewed online at:~{ generated from source using rman<br> http://polyglotman.sourceforge.net/rman.html <br>With regard to SiSU man pages the formatting generated for markup syntax is not quite right, for that you might prefer the links under:<br> http://www.jus.uio.no/sample }~
+The SiSU man pages can be viewed online at:~{ generated from source using rman \\ http://polyglotman.sourceforge.net/rman.html \\With regard to SiSU man pages the formatting generated for markup syntax is not quite right, for that you might prefer the links under: \\ http://www.jus.uio.no/sample }~
An online version of the sisu man page is available here:
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_install_run.sst b/data/doc/sisu/markup-samples/manual/en/sisu_install_run.sst
index dfd56ec8..cadcde61 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_install_run.sst
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_install_run.sst
@@ -50,9 +50,11 @@ _1 rake gem_create_build_install_unstable # (to build and install sisu v6, alias
for individual steps (create, build, install) see rake options, rake -T
to specify sisu version for sisu installed via gem
-_1 sisu _5.3.0_ --version
+gem search sisu
-_1 sisu _6.0.0_ --version
+_1 sisu _5.3.3_ --version
+
+_1 sisu _6.0.3_ --version
to uninstall sisu installed via gem
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_installation.ssi b/data/doc/sisu/markup-samples/manual/en/sisu_installation.ssi
index f908bb6e..0c48c229 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_installation.ssi
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_installation.ssi
@@ -98,9 +98,9 @@ Once installed see man 8 sisu for information on additional programs that sisu m
Further notes on install script.
-The install script is prepared using Rant, and a Rantfile *~rant is provided,~{ a Rantfile has been configured to do post installation setup }~ with more comprehensive install options, and post install and setup configuration and generation of first test file, if you have installed Stefan Lang's {~^ Rant }http://make.rubyforge.org/ ~{ http://make.rubyforge.org/ <br> http://rubyforge.org/frs/?group_id=615 }~ installed. While in the package directory, type: rant help, or rant -T, or to install SiSU _{as root}_, type:
+The install script is prepared using Rant, and a Rantfile *~rant is provided,~{ a Rantfile has been configured to do post installation setup }~ with more comprehensive install options, and post install and setup configuration and generation of first test file, if you have installed Stefan Lang's {~^ Rant }http://make.rubyforge.org/ ~{ http://make.rubyforge.org/ \\ http://rubyforge.org/frs/?group_id=615 }~ installed. While in the package directory, type: rant help, or rant -T, or to install SiSU _{as root}_, type:
-*install* is an install script prepared using Stefan Lang's {~^ Rant }http://make.rubyforge.org/ ~{ http://make.rubyforge.org/ <br> http://rubyforge.org/frs/?group_id=615 }~ It should work whether you have previously installed Rant or not. It has fairly comprehensive install options, and can do some post install and setup configuration and generation of first test file. For options type:
+*install* is an install script prepared using Stefan Lang's {~^ Rant }http://make.rubyforge.org/ ~{ http://make.rubyforge.org/ \\ http://rubyforge.org/frs/?group_id=615 }~ It should work whether you have previously installed Rant or not. It has fairly comprehensive install options, and can do some post install and setup configuration and generation of first test file. For options type:
_1 ruby install -T
@@ -114,7 +114,7 @@ _1 ruby install base
!_ installation with setup.rb
-{~^ setup.rb }http://i.loveruby.net/en/projects/setup/ is provided the package and will install SiSU~{ Minero Aoki<br> http://i.loveruby.net/en/projects/setup/doc/ }~ installation is a 3 step process~{ Installation instructions<br> http://i.loveruby.net/en/projects/setup/doc/usage.html }~ the following string assumes you are in the package directory and that you have root as sudo:
+{~^ setup.rb }http://i.loveruby.net/en/projects/setup/ is provided the package and will install SiSU~{ Minero Aoki \\ http://i.loveruby.net/en/projects/setup/doc/ }~ installation is a 3 step process~{ Installation instructions \\ http://i.loveruby.net/en/projects/setup/doc/usage.html }~ the following string assumes you are in the package directory and that you have root as sudo:
_1 ruby setup.rb config && ruby setup.rb setup && sudo ruby setup.rb install
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_markup.sst b/data/doc/sisu/markup-samples/manual/en/sisu_markup.sst
index 69293637..fbd6d1f4 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_markup.sst
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_markup.sst
@@ -744,7 +744,7 @@ column three of row two, and so on
a second form may be easier to work with in cases where there is not much information in each column
-*{markup example:}*~{ Table from the Wealth of Networks by Yochai Benkler<br> http://www.jus.uio.no/sisu/the_wealth_of_networks.yochai_benkler }~
+*{markup example:}*~{ Table from the Wealth of Networks by Yochai Benkler \\ http://www.jus.uio.no/sisu/the_wealth_of_networks.yochai_benkler }~
code{
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_postgresql.sst b/data/doc/sisu/markup-samples/manual/en/sisu_postgresql.sst
index 574e307c..e5b0c4cb 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_postgresql.sst
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_postgresql.sst
@@ -54,29 +54,29 @@ may be used interchangeably.
3~ create and destroy database
-!_ --pgsql --createall<br>
+!_ --pgsql --createall \\
initial step, creates required relations (tables, indexes) in existing (postgresql) database (a database should be created manually and given the same name as working directory, as requested) (rb.dbi)
-!_ sisu -D --createdb<br>
+!_ sisu -D --createdb \\
creates database where no database existed before
-!_ sisu -D --create<br>
+!_ sisu -D --create \\
creates database tables where no database tables existed before
-!_ sisu -D --Dropall<br>
+!_ sisu -D --Dropall \\
destroys database (including all its content)! kills data and drops tables, indexes and database associated with a given directory (and directories of the same name).
-!_ sisu -D --recreate<br>
+!_ sisu -D --recreate \\
destroys existing database and builds a new empty database structure
3~ import and remove documents
-!_ sisu -D --import -v [filename/wildcard]<br>
+!_ sisu -D --import -v [filename/wildcard] \\
populates database with the contents of the file. Imports documents(s) specified to a postgresql database (at an object level).
-!_ sisu -D --update -v [filename/wildcard]<br>
+!_ sisu -D --update -v [filename/wildcard] \\
updates file contents in database
-!_ sisu -D --remove -v [filename/wildcard]<br>
+!_ sisu -D --remove -v [filename/wildcard] \\
removes specified document from postgresql database.
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_remote.sst b/data/doc/sisu/markup-samples/manual/en/sisu_remote.sst
index 959fbcf6..54ea9a7b 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_remote.sst
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_remote.sst
@@ -73,10 +73,10 @@ sisu -3R sisu_remote.sst
2~ commands
-!_ -R [filename/wildcard] <br>
+!_ -R [filename/wildcard] \\
copies sisu output files to remote host using rsync. This requires that sisurc.yml has been provided with information on hostname and username, and that you have your "keys" and ssh agent in place. Note the behavior of rsync different if -R is used with other flags from if used alone. Alone the rsync --delete parameter is sent, useful for cleaning the remote directory (when -R is used together with other flags, it is not). Also see -r
-!_ -r [filename/wildcard] <br>
+!_ -r [filename/wildcard] \\
copies sisu output files to remote host using scp. This requires that sisurc.yml has been provided with information on hostname and username, and that you have your "keys" and ssh agent in place. Also see -R
2~ configuration
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_search_cgi.ssi b/data/doc/sisu/markup-samples/manual/en/sisu_search_cgi.ssi
index 03eef9ff..4e833b9b 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_search_cgi.ssi
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_search_cgi.ssi
@@ -25,6 +25,44 @@
1~search_cgi Introduction
+2~ Setup search form
+
+You will need a web server, httpd with cgi enabled, and a postgresql database to which you are able to create databases.
+
+Setup postgresql, make sure you are able to create and write to the database, e.g.:
+
+``` code
+sudo su postgres
+ createuser -d -a ralph
+```
+
+You then need to create the database that sisu will use, for sisu manual in the directory manual/en for example, (when you try to populate a database that does not exist sisu prompts as to whether it exists):
+
+``` code
+createdb SiSUv6a_manual
+```
+
+SiSU is then able to create the required tables that allow you to populate the database with documents in the directory for which it has been created:
+
+``` code
+sisu --pg --createall -v
+```
+
+You can then start to populate the database, in this example with a single document:
+
+``` code
+sisu --pg --update -v en/sisu_manual.ssm
+```
+
+To create a sample search form, from within the same directory run:
+
+``` code
+sisu --sample-search-form --db-pg
+```
+and copy the resulting cgi form to your cgi-bin directory
+
+A sample setup for nginx is provided that assumes data will be stored under /srv/www and cgi scripts under /srv/cgi
+
2~ Search - database frontend sample, utilising database and SiSU features, including object citation numbering (backend currently PostgreSQL) *~search
{~^ Sample search frontend }http://search.sisudoc.org
@@ -36,7 +74,7 @@ Note you may set results either for documents matched and object number location
% Several options for output - select database to search, show results in index view (links to locations within text), show results with text, echo search in form, show what was searched, create and show a "canned url" for search, show available search fields. Also shows counters number of documents in which found and number of locations within documents where found. [could consider sorting by document with most occurrences of the search result].
-!_ sisu -F --webserv-webrick<br>
+!_ sisu -F --webserv-webrick \\
builds a cgi web search frontend for the database created
The following is feedback on the setup on a machine provided by the help command:
@@ -63,13 +101,13 @@ By default, [unless otherwise specified] databases are built on a directory basi
2~ Search Form
-!_ sisu -F<br>
+!_ sisu -F \\
generates a sample search form, which must be copied to the web-server cgi directory
-!_ sisu -F --webserv-webrick<br>
+!_ sisu -F --webserv-webrick \\
generates a sample search form for use with the webrick server, which must be copied to the web-server cgi directory
-!_ sisu -W<br>
+!_ sisu -W \\
starts the webrick server which should be available wherever sisu is properly installed
The generated search form must be copied manually to the webserver directory as instructed
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_search_intro.ssi b/data/doc/sisu/markup-samples/manual/en/sisu_search_intro.ssi
index d5da379f..386b8175 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_search_intro.ssi
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_search_intro.ssi
@@ -25,7 +25,7 @@
SiSU output can easily and conveniently be indexed by a number of standalone indexing tools, such as Lucene, Hyperestraier.
-Because the document structure of sites created is clearly defined, and the text object citation system is available hypothetically at least, for all forms of output, it is possible to search the sql database, and either read results from that database, or just as simply map the results to the html output, which has richer text markup.
+Because the document structure of sites created is clearly defined, and the text object citation system is available hypothetically at least, for all forms of output, it is possible to search the sql database, and either read results from that database, or map the results to the html or other output, which has richer text markup.
-In addition to this SiSU has the ability to populate a relational sql type database with documents at an object level, with objects numbers that are shared across different output types, which make them searchable with that degree of granularity. Basically, your match criteria is met by these documents and at these locations within each document, which can be viewed within the database directly or in various output formats.
+SiSU can populate a relational sql type database with documents at an object level, including objects numbers that are shared across different output types. Making a document corpus searchable with that degree of granularity. Basically, your match criteria is met by these documents and at these locations within each document, which can be viewed within the database directly or in various output formats.
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_sql.ssi b/data/doc/sisu/markup-samples/manual/en/sisu_sql.ssi
index 6e54275b..f24fe2a9 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_sql.ssi
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_sql.ssi
@@ -30,7 +30,7 @@
2~ populating SQL type databases
-SiSU feeds sisu markupd documents into sql type databases PostgreSQL~{ http://www.postgresql.org/ <br> http://advocacy.postgresql.org/ <br> http://en.wikipedia.org/wiki/Postgresql }~ and/or SQLite~{ http://www.hwaci.com/sw/sqlite/ <br> http://en.wikipedia.org/wiki/Sqlite }~ database together with information related to document structure.
+SiSU feeds sisu markupd documents into sql type databases PostgreSQL~{ http://www.postgresql.org/ \\ http://advocacy.postgresql.org/ \\ http://en.wikipedia.org/wiki/Postgresql }~ and/or SQLite~{ http://www.hwaci.com/sw/sqlite/ \\ http://en.wikipedia.org/wiki/Sqlite }~ database together with information related to document structure.
This is one of the more interesting output forms, as all the structural data of the documents are retained (though can be ignored by the user of the database should they so choose). All site texts/documents are (currently) streamed to four tables:
diff --git a/data/doc/sisu/markup-samples/manual/en/sisu_sqlite.sst b/data/doc/sisu/markup-samples/manual/en/sisu_sqlite.sst
index a73ae16c..2c43aa92 100644
--- a/data/doc/sisu/markup-samples/manual/en/sisu_sqlite.sst
+++ b/data/doc/sisu/markup-samples/manual/en/sisu_sqlite.sst
@@ -55,28 +55,28 @@ may be used interchangeably.
3~ create and destroy database
-!_ --sqlite --createall<br>
+!_ --sqlite --createall \\
initial step, creates required relations (tables, indexes) in existing (sqlite) database (a database should be created manually and given the same name as working directory, as requested) (rb.dbi)
-!_ sisu -d --createdb<br>
+!_ sisu -d --createdb \\
creates database where no database existed before
-!_ sisu -d --create<br>
+!_ sisu -d --create \\
creates database tables where no database tables existed before
-!_ sisu -d --dropall<br>
+!_ sisu -d --dropall \\
destroys database (including all its content)! kills data and drops tables, indexes and database associated with a given directory (and directories of the same name).
-!_ sisu -d --recreate<br>
+!_ sisu -d --recreate \\
destroys existing database and builds a new empty database structure
3~ import and remove documents
-!_ sisu -d --import -v [filename/wildcard]<br>
+!_ sisu -d --import -v [filename/wildcard] \\
populates database with the contents of the file. Imports documents(s) specified to an sqlite database (at an object level).
-!_ sisu -d --update -v [filename/wildcard]<br>
+!_ sisu -d --update -v [filename/wildcard] \\
updates file contents in database
-!_ sisu -d --remove -v [filename/wildcard]<br>
+!_ sisu -d --remove -v [filename/wildcard] \\
removes specified document from sqlite database.
diff --git a/data/sisu/conf/cgi-bin/sisu_search_pgsql.cgi b/data/sisu/conf/cgi-bin/sisu_search_pgsql.cgi
index c196c756..2f6f93e4 100644
--- a/data/sisu/conf/cgi-bin/sisu_search_pgsql.cgi
+++ b/data/sisu/conf/cgi-bin/sisu_search_pgsql.cgi
@@ -13,15 +13,13 @@
* Author: Ralph Amissah
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007 Ralph Amissah All Rights Reserved.
+ * Copyright: (C) 1997 - 2014, Ralph Amissah, All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
- Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007 Ralph Amissah
+ Copyright (C) Ralph Amissah
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
@@ -39,7 +37,7 @@
If you have Internet connection, the latest version of the GPL should be
available at these locations:
<http://www.fsf.org/licenses/gpl.html>
- <http://www.gnu.org/copyleft/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
<http://www.jus.uio.no/sisu/gpl.fsf>
* SiSU uses:
@@ -59,28 +57,36 @@
<ralph.amissah@gmail.com>
=end
- require 'cgi'
- require 'fcgi'
- require 'dbi'
- @version='sisu_search_pgsql'
- @image_src="http://localhost/sisu/_sisu/image"
- @hosturl_db="http://localhost"
- @hosturl_files="http://www.jus.uio.no"
- @port="5432"
- user=''
- @@limit,@@offset=1000,0
- @base="#@hosturl_db/cgi-bin/#@version.cgi"
+ begin
+ require 'cgi'
+ require 'fcgi'
+ require 'dbi'
+ rescue LoadError
+ puts 'cgi, fcgi or dbi NOT FOUND (LoadError)'
+ end
+ @stub_default='manual'
+ @image_src="http://#{ENV['HTTP_HOST']}/_sisu/image_sys"
+ @hosturl_cgi="http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}"
+ @hosturl_files="http://#{ENV['HTTP_HOST']}"
+ @output_dir_structure_by='language'
+ @lingual='multi'
+ @port='5432'
+ @db_name_prefix='SiSUv6a_'
+ @user='ralph' # check user name for access to pg database: e.g. www-data or 'ralph'
+ @base="http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}#{ENV['SCRIPT_NAME']}"
+#Common TOP
+ @@offset=0
@@canned_search_url=@base
@color_heading='#DDFFAA'
@color_match='#ffff48'
class Form
- def initialize(base,search_field,selected_db,checked_index,checked_text,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can='')
+ def initialize(base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can='')
search_note='' if checked_searched !~/\S/
the_can='' if checked_url !~/\S/
search_field='' if checked_echo !~/\S/
- @base,@search_field,@selected_db,@checked_index,@checked_text,@checked_tip,@checked_stats,@checked_searched,@checked_url,@checked_case,@checked_echo,@checked_sql,@checked_all,@checked_none,@checked_selected,@checked_default,@search_note,@the_can=base,search_field,selected_db,checked_index,checked_text,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can
+ @base,@search_field,@selected_db,@result_type,@checked_sql_limit,@checked_tip,@checked_stats,@checked_searched,@checked_url,@checked_case,@checked_echo,@checked_sql,@checked_all,@checked_none,@checked_selected,@checked_default,@search_note,@the_can=base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can
@tip=if checked_tip =~/\S/
- '<font size="2" color="#666666">text:__; keywords:__; title:__; author:__; subject:__; description:__; publisher:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />'
+ '<font size="2" color="#666666">text:__; fulltxt:__; keywords:__; title:__; author:__; topic_register:__; subject:__; description:__; publisher:__; editor:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />'
else ''
end
end
@@ -96,54 +102,70 @@
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="sourcefile" content="SiSU._sst" />
<link rel="generator" href="http://www.jus.uio.no/sisu" />
- <link rel="shortcut icon" href="http://localhost/sisu/_sisu/image/rb7.ico" />
+ <link rel="shortcut icon" href="http://#{ENV['HTTP_HOST']}/_sisu/image_sys/rb7.ico" />
<link rel="stylesheet" href="../_sisu/css/html.css" type="text/css" />
</head>
<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">
<table summary="band" border="0" cellpadding="3" cellspacing="0">
- <tr><td align="left" bgcolor="#ffffff"><a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" src="http://localhost/sisu/_sisu/image/sisu.png" alt="SiSU --&gt;" /></a></td><td>
-<!-- <p class="tiny"><a href="http://www.jus.uio.no/sisu/SiSU/">&nbsp;http://www.jus.uio.no/sisu/SiSU/</a></p> -->
- <label for="find"><b>sample search form</b></label>
+ <tr><td width="20%">
+ <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">
+ <tr><td align="left" bgcolor="#ffffff">
+ <br /><a href="http://sisudoc.org/" target="_top">
+ <b>SiSU</b>
+ </a>
+ <br /><a href="http://git.sisudoc.org/" target="_top">
+ git
+ </a>
+ </td></tr>
+ </table>
+ </td>
+ <td>
+ <label for="find"><b>SiSU search form (sample) (content organised by language)</b></label>
</td></tr>
</table>
- <form action="#@base" id="Test Form" method="post">
+ <form action="#{@base}" id="Test Form" method="post">
<table cellpadding="2">
<tr><td valign=\"top\">
- <textarea id="find" name="find" type="text" rows="6" cols="40" maxlength="256">#@search_field</textarea>
+ <textarea id="find" name="find" type="text" rows="6" cols="40" maxlength="256">#{@search_field}</textarea>
</td>
<td valign=\"top\">
- #@tip
- #@search_note
- #@the_can
+ #{@tip}
+ #{@search_note}
+ #{@the_can}
</td></tr></table>
<td valign=\"top\"><tr><td>
- <!input type="text" id="find" name="find" value="#@search_field" />
+ <!input type="text" id="find" name="find" value="#{@search_field}" />
<!input type="text" id="find" name="find" value="" />
<font size="2" color="#222222">
<b>to search:</b> select which database to search (drop-down menu below); enter your search query (in the form above); and <b>click on the search button</b> (below)
<br />
<select name="db" size="1">
- #@selected_db
- <option value="SiSU_pace">pace</option>
- <option value="SiSU_sisu">sisu</option>
+ #{@selected_db}
+ <option value="SiSUv6a_manual">manual</option>
+ <option value="SiSUv6a_samples">samples</option>
+ <option value="SiSUv6a_sisu">sisu</option>
</select>
<input type="submit" value="SiSU search" />
- <input type="radio" name="view" value="index" #@checked_index> index
- <input type="radio" name="view" value="text" #@checked_text> text / grep
- <input type="checkbox" name="casesense" #@checked_case> case sensitive
+ <input type="radio" name="view" value="index" #{@result_type[:index]}> index
+ <input type="radio" name="view" value="text" #{@result_type[:text]}> text / grep
+ <input type="checkbox" name="casesense" #{@checked_case}> case sensitive
+ <br />
+ match limit:
+ <input type="radio" name="sql_match_limit" value="1000" #{@checked_sql_limit[:l1000]}> 1,000
+ <input type="radio" name="sql_match_limit" value="2500" #{@checked_sql_limit[:l2500]}> 2,500
<br />
- <input type="checkbox" name="echo" #@checked_echo> echo query
- <input type="checkbox" name="stats" #@checked_stats> result stats
- <input type="checkbox" name="url" #@checked_url> search url
- <input type="checkbox" name="searched" #@checked_searched> searched
- <input type="checkbox" name="tip" #@checked_tip> available fields
- <input type="checkbox" name="sql" #@checked_sql> sql statement
+ <input type="checkbox" name="echo" #{@checked_echo}> echo query
+ <input type="checkbox" name="stats" #{@checked_stats}> result stats
+ <input type="checkbox" name="url" #{@checked_url}> search url
+ <input type="checkbox" name="searched" #{@checked_searched}> searched
+ <input type="checkbox" name="tip" #{@checked_tip}> available fields
+ <input type="checkbox" name="sql" #{@checked_sql}> sql statement
<br />
checks:
- <input type="radio" name="checks" value="check_default" #@checked_default> default
- <input type="radio" name="checks" value="check_selected" #@checked_selected> selected
- <input type="radio" name="checks" value="check_all" #@checked_all> all
- <input type="radio" name="checks" value="check_none" #@checked_none> none
+ <input type="radio" name="checks" value="check_default" #{@checked_default}> default
+ <input type="radio" name="checks" value="check_selected" #{@checked_selected}> selected
+ <input type="radio" name="checks" value="check_all" #{@checked_all}> all
+ <input type="radio" name="checks" value="check_none" #{@checked_none}> none
</font>
</td></tr>
</table>
@@ -151,19 +173,21 @@
WOK
end
end
- class Search_request #% search_for
- attr_accessor :text1,:keywords,:title,:author,:subject,:description,:publisher,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid,:filename
+ class SearchRequest #% search_for
+ attr_accessor :text1,:fulltext,:keywords,:title,:author,:topic_register,:subject,:description,:publisher,:editor,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid,:filename
def initialize(search_field='',q='')
@search_field,@q=search_field,q
- @text1=@keywords=@title=@author=@subject=@description=@publisher=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=@filename=''
+ @text1=@fulltext=@keywords=@title=@author=@topic_register=@subject=@description=@publisher=@editor=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=@filename=''
if @search_field=~/\S/
@text1=text_to_match('text:')
- @keywords=text_to_match('key(?:words?)?:')
+ @fulltext=text_to_match('fulltxt:')
+ @topic_register=text_to_match('topic_register:')
@title=text_to_match('title:') # DublinCore 1 - title
@author=text_to_match('(?:author|creator)s?:') # DublinCore 2 - creator/author
@subject=text_to_match('subj(?:ect)?:') # DublinCore 3 - subject
@description=text_to_match('description:') # DublinCore 4 - description
@publisher=text_to_match('pub(?:lisher)?:') # DublinCore 5 - publisher
+ @editor=text_to_match('editor:')
@contributor=text_to_match('contributor:') # DublinCore 6 - contributor
@date=text_to_match('date:') # DublinCore 7 - date dd-mm-yy
@type=text_to_match('type:') # DublinCore 8 - type
@@ -174,6 +198,7 @@
@relation=text_to_match('relation:') # DublinCore 13 - relation
@coverage=text_to_match('coverage:') # DublinCore 14 - coverage
@rights=text_to_match('rights:') # DublinCore 15 - rights
+ @keywords=text_to_match('key(?:words?)?:')
@comment=text_to_match('comment:')
@abstract=text_to_match('abs(?:tract)?:')
@owner=text_to_match('owner:')
@@ -183,15 +208,18 @@
@date_available=text_to_match('date_available:')
@date_valid=text_to_match('date_valid:')
@filename=text_to_match('filename:')
- @text1=text_to_match unless @keywords or @author or @title or @text1 or @comment or @abstract or @rights or @subject or @publisher or @date or @filename
+ @text1=text_to_match unless @keywords or @author or @title or @text1 or @fulltext or @comment or @abstract or @rights or @subject or @publisher or @date or @filename or @topic_register
else
@text1=q['s1'] if q['s1']=~/\S/
+ @fulltext=q['ft'] if q['ft']=~/\S/
@keywords=q['key'] if q['key']=~/\S/
@title=q['ti'] if q['ti']=~/\S/
@author=q['au'] if q['au']=~/\S/
+ @topic_register=q['tr'] if q['tr']=~/\S/
@subject=q['sj'] if q['sj']=~/\S/
@description=q['dsc'] if q['dsc']=~/\S/
@publisher=q['pb'] if q['pb']=~/\S/
+ @editor=q['cntr'] if q['cntr']=~/\S/
@contributor=q['cntr'] if q['cntr']=~/\S/
@date=q['dt'] if q['dt']=~/\S/
@type=q['ty'] if q['ty']=~/\S/
@@ -208,50 +236,50 @@
@date_modified=q['dtm'] if q['dtm']=~/\S/
@date_available=q['dta'] if q['dta']=~/\S/
@date_valid=q['dtv'] if q['dtv']=~/\S/
- @filename=q['fns'] if q['fns']=~/\S/
+ @filename=if q['doc'] and q['search'] !~/search db/ then q['doc']
+ elsif q['fns']=~/\S/ then q['fns']
+ end
@@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000
@@offset=q['off'] if q['off']=~/\d+/ # 0
end
end
def text_to_match(identifier='')
m={
- :string => /#{identifier}\s*(.+?)/,
- :string => /#{identifier}\s*(.+?)(?:;|\n|\r|$)/,
- :word => /#{identifier}[\s(]*(\S+)/
+ string: /#{identifier}\s*(.+?)/,
+ string: /#{identifier}\s*(.+?)(?:;|\n|\r|$)/,
+ word: /#{identifier}[\s(]*(\S+)/
}
search_string=if @search_field =~m[:word]
- search_string=if @search_field =~m[:braces]; m[:braces].match(@search_field)[1]
- elsif @search_field =~m[:string]; m[:string].match(@search_field)[1]
+ search_string=if @search_field =~m[:braces] then m[:braces].match(@search_field)[1]
+ elsif @search_field =~m[:string] then m[:string].match(@search_field)[1]
else
str=m[:word].match(@search_field)[1]
- str.gsub!(/[()]/,'')
+ str=str.gsub(/[()]/,'')
str
end
- search_string.strip!
- search_string.gsub!(/\s+/,'+')
- search_string
+ search_string=search_string.strip.gsub(/\s+/,'+')
#else
# "__"
end
end
end
- class Dbi_search_string
+ class DBI_SearchString
def initialize(l,t,q,cse=false)
@l,@t,@q,@c=l,t,q,cse
end
def string
- search={ :search => [],:flag => false }
+ search={ search: [], flag: false }
if @t =~/\S+/ or @q =~/\S+/
- if @t =~/\S+/; unescaped_search=CGI.unescape(@t)
- elsif @q =~/\S+/; unescaped_search=CGI.unescape(@q)
+ if @t =~/\S+/ then unescaped_search=CGI.unescape(@t)
+ elsif @q =~/\S+/ then unescaped_search=CGI.unescape(@q)
end
search_construct=[]
- if @c
- unescaped_search.gsub!(/\s*(AND|OR)\s*/,"' \) \\1 #@l~\( '")
- unescaped_search.gsub!(/(.+)/,"#@l~\( '\\1' \)")
+ unescaped_search=if @c
+ unescaped_search.gsub(/\s*(AND|OR)\s*/,"' \) \\1 #{@l}~\( '").
+ gsub(/(.+)/,"#{@l}~\( '\\1' \)")
else
- unescaped_search.gsub!(/\s*(AND|OR)\s*/,"' \) \\1 #@l~*\( '")
- unescaped_search.gsub!(/(.+)/,"#@l~*\( '\\1' \)")
+ unescaped_search.gsub(/\s*(AND|OR)\s*/,"' \) \\1 #{@l}~*\( '").
+ gsub(/(.+)/,"#{@l}~*\( '\\1' \)")
end
search_construct << unescaped_search
search_construct=search_construct.join(' ')
@@ -262,180 +290,217 @@
search
end
end
- class Dbi_search_statement
+ class DBI_SearchStatement
attr_reader :text_search_flag,:sql_select_body_format,:sql_select_endnotes_format,:sql_offset,:sql_limit
def initialize(conn,search_for,q,c)
@conn=conn
@text_search_flag=false
- @sql_statement={ :body=>'',:endnotes=>'',:range=>'' }
+ @sql_statement={ body: '', endnotes: '', range: '' }
#@offset||=@@offset
#@offset+=@@limit
- search={ :text => [],:endnotes => [] }
- cse=if c =~/\S/; true
- else false
- end
- st=Dbi_search_string.new('documents.clean',search_for.text1,q['s1'],cse).string
- se=Dbi_search_string.new('endnotes.clean',search_for.text1,q['s1'],cse).string
+ search={ text: [], endnotes: [] }
+ cse=(c =~/\S/) ? true : false
+ st=DBI_SearchString.new('doc_objects.clean',search_for.text1,q['s1'],cse).string
+ se=DBI_SearchString.new('endnotes.clean',search_for.text1,q['s1'],cse).string
@text_search_flag=st[:flag]
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << se[:search]
end
- st=Dbi_search_string.new('metadata.keywords',search_for.keywords,q['key'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.fulltext',search_for.fulltext,q['ft'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.title',search_for.title,q['ti'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.title',search_for.title,q['ti'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.creator',search_for.author,q['au'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.creator_author',search_for.author,q['au'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.subject',search_for.subject,q['sj'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.classify_topic_register',search_for.topic_register,q['tr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.description',search_for.description,q['dsc'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.classify_subject',search_for.subject,q['sj'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.publisher',search_for.publisher,q['pb'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.classify_keywords',search_for.keywords,q['key'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.contributor',search_for.contributor,q['cntr'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_description',search_for.description,q['dsc'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.date',search_for.date,q['dt'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.publisher',search_for.publisher,q['pb'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.type',search_for.type,q['ty'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.creator_editor',search_for.editor,q['cntr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.identifier',search_for.identifier,q['id'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.creator_contributor',search_for.contributor,q['cntr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.source',search_for.source,q['src'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.date_published',search_for.date,q['dt'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.language',search_for.language,q['lang'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_type',search_for.type,q['ty'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.relation',search_for.relation,q['rel'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.original_source',search_for.source,q['src'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.coverage',search_for.coverage,q['cov'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.language_document_char',search_for.language,q['lang'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.rights',search_for.rights,q['cr'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_relation',search_for.relation,q['rel'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.comment',search_for.comment,q['co'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_coverage',search_for.coverage,q['cov'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.abstract',search_for.abstract,q['ab'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.rights_all',search_for.rights,q['cr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.filename',search_for.filename,q['fns'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_comment',search_for.comment,q['co'],cse).string
+ if st[:flag]
+ search[:text] << st[:search]
+ search[:endnotes] << st[:search]
+ end
+ st=DBI_SearchString.new('metadata_and_text.notes_abstract',search_for.abstract,q['ab'],cse).string
+ if st[:flag]
+ search[:text] << st[:search]
+ search[:endnotes] << st[:search]
+ end
+ st=DBI_SearchString.new('metadata_and_text.src_filename',search_for.filename,q['fns'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
@@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000
@@offset=q['off'] if q['off']=~/\d+/ # 0
- @search_text,@search_endnotes=[],[]
- #%
- search[:text].each{|x| @search_text << "#{x} AND " }
- @search_text=@search_text.to_s.gsub!(/AND\s+$/,'')
- @search_text.gsub!(/(documents\.clean~\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+documents\.clean~\(\s*'[^']+'\s*\))+)/,'(\1)')
- search[:endnotes].each{|x| @search_endnotes << "#{x} AND " }
- @search_endnotes=@search_endnotes.to_s.gsub!(/AND\s+$/,'')
- @search_endnotes.gsub!(/(endnotes\.clean~\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean~\(\s*'[^']+'\s*\))+)/,'(\1)')
+ @search_text,@search_endnotes='',''
+ @search_text=search[:text].flatten.join(' AND ')
+ @search_text=@search_text.gsub(/(doc_objects\.clean~[*]?\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean~[*]?\(\s*'[^']+'\s*\))+)/,'(\1)')
+ @search_endnotes=search[:endnotes].flatten.join(' AND ')
+ @search_endnotes=@search_endnotes.gsub(/(endnotes\.clean~\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean~\(\s*'[^']+'\s*\))+)/,'(\1)')
end
def sql_offset
@@offset
end
- def sql_limit
+ def sql_match_limit
@@limit
end
def sql_canned_search
- @offset_next=sql_offset.to_i + sql_limit.to_i
- @offset_previous=sql_offset.to_i - sql_limit.to_i
+ @offset_next=sql_offset.to_i + sql_match_limit.to_i
+ @offset_previous=sql_offset.to_i - sql_match_limit.to_i
def current
- @@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + sql_offset.to_s
+ @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + sql_offset.to_s
end
def next
- @@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + @offset_next.to_s
+ @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + @offset_next.to_s
end
def previous
- @offset_previous >= 0 ? (@@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + @offset_previous.to_s) : ''
+ @offset_previous >= 0 \
+ ? (@@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + @offset_previous.to_s)
+ : ''
end
def start
- @@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + 0.to_s
+ @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + 0.to_s
end
self
end
- def sql_canned_search_url(ok)
- if ok
- can=sql_canned_search
- page=(sql_offset.to_i + sql_limit.to_i)/sql_limit.to_i
- case page.to_s
- when /^1$/
- %{<hr /><br /><center>
+ def pre_next(beyond_limit,img)
+ can=sql_canned_search
+ page=(sql_offset.to_i + sql_match_limit.to_i)/sql_match_limit.to_i
+ if beyond_limit
+ if page.to_s =~ /^1$/
+ %{<br /><center>
pg. #{page.to_s}
- <a href="#{can.next}">&nbsp;&nbsp;&gt;</a>
+ <a href="#{can.next}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
+ </a>
</center>}
- when /^2$/
- %{<hr /><br /><center>
- <a href="#{can.previous}">&lt;&nbsp;&nbsp;</a>
+ elsif page.to_s =~ /^2$/
+ %{<br /><center>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
pg. #{page.to_s}
- <a href="#{can.next}">&nbsp;&nbsp;&gt;</a>
+ <a href="#{can.next}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
+ </a>
</center>}
else
- %{<hr /><br /><center>
- <a href="#{can.start}">|&lt;&nbsp;&nbsp;</a>
- <a href="#{can.previous}">&lt;&nbsp;&nbsp;</a>
+ %{<br /><center>
+ <a href="#{can.start}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|&lt;&nbsp;" />
+ </a>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
+ pg. #{page.to_s}
+ <a href="#{can.next}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
+ </a>
+ </center>}
+ end
+ else
+ if page.to_s =~ /^1$/ then ''
+ elsif page.to_s =~ /^2$/
+ %{<br /><center>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
+ pg. #{page.to_s}
+ </center>}
+ else
+ %{<br /><center>
+ <a href="#{can.start}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|&lt;&nbsp;" />
+ </a>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
pg. #{page.to_s}
- <a href="#{can.next}">&nbsp;&nbsp;&gt;</a>
</center>}
end
- else ''
end
end
def sql_select_body
limit ||=@@limit
offset ||=@@offset
- @sql_statement[:body]=%{SELECT metadata.title, metadata.subtitle, metadata.creator, metadata.filename, metadata.suffix, documents.body, documents.seg, documents.ocn, metadata.tid FROM documents, metadata WHERE (#@search_text) AND documents.metadata_tid = metadata.tid ORDER BY metadata.title, metadata.filename, documents.ocn}
+ @sql_statement[:body]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, metadata_and_text.notes_suffix, doc_objects.body, doc_objects.seg, doc_objects.ocn, metadata_and_text.tid FROM doc_objects, metadata_and_text WHERE (#{@search_text}) AND doc_objects.metadata_tid = metadata_and_text.tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, doc_objects.ocn}
@sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;}
select=@sql_statement[:body] + ' ' + @sql_statement[:range]
select
@@ -443,7 +508,7 @@
def sql_select_endnotes
limit ||=@@limit
offset ||=@@offset
- @sql_statement[:endnotes]=%{SELECT metadata.title, metadata.subtitle, metadata.creator, metadata.filename, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata, endnotes WHERE (#@search_endnotes) AND metadata.tid = endnotes.metadata_tid ORDER BY metadata.title, metadata.filename, endnotes.nr}
+ @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE (#{@search_endnotes}) AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr}
@sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;}
select=@sql_statement[:endnotes] + ' ' + @sql_statement[:range]
select
@@ -467,26 +532,29 @@
<table summary="SiSU summary" bgcolor="#ffffff" cellpadding="2" border="0">
<!-- widget sisu -->
<tr><td valign="top" width="10%">
- <p class="tiny_left"><font color="#666666" size="2">
- <a href="http://www.jus.uio.no/sisu" >
- <img border="0" src="http://localhost/sisu/_sisu/image/sisu.png" alt="SiSU" width="120" height="39" />
- </a>
- </font></p>
-</td><td valign="top" width="45%">
+ <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">
+ <tr><td align="left" bgcolor="#ffffff">
+ <br /><a href="http://sisudoc.org/" target="_top">
+ <b>SiSU</b>
+ </a>
+ <br /><a href="http://git.sisudoc.org/" target="_top">
+ git
+ </a>
+ </td></tr>
+ </table>
+</td>
+<td valign="top" width="45%">
<!-- SiSU Rights -->
<p class="tiny_left"><font color="#666666" size="2">
Generated by
- <a href="http://www.jus.uio.no/sisu" >
- SiSU</a> 0.55.3 2007-07-10 (2007w28/2)
+ SiSU 6.0.3 2014-02-06 (2014w05/4)
<br />
- <a href="http://www.jus.uio.no/sisu" >
+ <a href="http://www.sisudoc.org" >
<b>SiSU</b></a> <sup>&copy;</sup> Ralph Amissah
- 1993, current 2007.
+ 1993, current 2014.
All Rights Reserved.
<br />
- <a href="http://www.jus.uio.no/sisu" >
- SiSU</a>
- is software for document structuring, publishing and search,
+ SiSU is software for document structuring, publishing and search,
<br />
<a href="http://www.jus.uio.no/sisu" >
www.jus.uio.no/sisu
@@ -495,20 +563,33 @@
<a href="http://www.sisudoc.org" >
www.sisudoc.org
</a>
+ sources
+ <a href="http://git.sisudoc.org" >
+ git.sisudoc.org
+ </a>
<br />
<i>w3 since October 3 1993</i>
- <a href="mailto://ralph@amissah.com" >
+ <a href="mailto:ralph@amissah.com" >
ralph@amissah.com
</a>
+ <br />
+ mailing list subscription
+ <a href="http://lists.sisudoc.org/listinfo/sisu" >
+ http://lists.sisudoc.org/listinfo/sisu
+ </a>
+ <br />
+ <a href="mailto:sisu@lists.sisudoc.org" >
+ sisu@lists.sisudoc.org
+ </a>
</font></p>
</td><td valign="top" width="45%">
<p class="tiny_left"><font color="#666666" size="2">
SiSU using:
<br />Standard SiSU markup syntax,
<br />Standard SiSU meta-markup syntax, and the
- <br />Standard SiSU <u>object citation numbering</u> and system, (object/text positioning system)
+ <br />Standard SiSU <u>object citation numbering</u> and system, (object/text identifying/locating system)
<br />
- <sup>&copy;</sup> Ralph Amissah 1997, current 2007.
+ <sup>&copy;</sup> Ralph Amissah 1997, current 2014.
All Rights Reserved.
</font></p>
</td></tr>
@@ -516,7 +597,7 @@
<tr><td valign="top" width="10%">
<p class="tiny_left"><font color="#666666" size="2">
<a href="http://www.gnu.org/licenses/gpl.html">
- <img border="0" src="http://localhost/sisu/_sisu/image/gplv3_free_software.png" alt="GPLv3" width="127" height="51" />
+ .:
</a>
</font></p>
</td><td valign="top" width="45%">
@@ -540,14 +621,6 @@
</a>
software infrastructure,
with the usual GPL (or OSS) suspects.
- <br />
- Better - "performance, reliability, scalability, security &amp; total cost of ownership"
- [not to mention flexibility &amp; choice]
- <br />
- Get With the Future
- <a href="http://www.jus.uio.no/sisu/">
- Way Better!
- </a>
</font></p>
</td></tr>
</table>
@@ -560,18 +633,25 @@
@counters_txt,@counters_endn,@sql_select_body,@sql_select_endnotes='','','',''
FCGI.each_cgi do |cgi|
begin # all code goes in begin section
- @search={ :text => [],:endnotes => [] }
+ @search={ text: [], endnotes: [] }
q=CGI.new
- @db=if cgi['db'] =~/\S+/;
- @stub=/SiSU_(\S+)/.match(cgi['db'])[1]
+ @db=if cgi['db'] =~ /#{@db_name_prefix}(\S+)/
+ @stub=$1
cgi['db']
else
- @stub='sisu'
- 'SiSU_sisu'
+ @stub=@stub_default
+ @db_name_prefix + @stub
end
checked_url,checked_stats,checked_searched,checked_tip,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,selected_db='','','','','','','','',''
- if cgi['view']=~/text/; checked_index,checked_text='','checked'
- else checked_index,checked_text='checked',''
+ result_type=(cgi['view']=~/text/) \
+ ? result_type={ index: '', text: 'checked'}
+ : result_type={ index: 'checked', text: ''}
+ @@limit=if cgi['sql_match_limit'].to_s=~/2500/
+ checked_sql_limit={ l1000: '', l2500: 'checked'}
+ '2500'
+ else
+ checked_sql_limit={ l1000: 'checked', l2500: ''}
+ '1000'
end
checked_echo='checked' if cgi['echo'] =~/\S/
checked_stats='checked' if cgi['stats'] =~/\S/
@@ -598,24 +678,24 @@
checked_echo=checked_stats=checked_url='checked'
checked_searched=checked_tip=checked_case=checked_sql=''
end
- selected_db=case cgi['db']
- when /SiSU_pace/; '<option value="SiSU_pace">pace</option>'
- when /SiSU_sisu/; '<option value="SiSU_sisu">sisu</option>'
- end
+ selected_db=%{<option value="#{@db_name_prefix}#{@stub}">#{@stub}</option>}
dbi="dbi:Pg:database=#{@db};port=#{@port}"
- @conn=DBI.connect(dbi,user)
+ @conn=DBI.connect(dbi,@user)
search_field=cgi['find'] if cgi['find'] # =~/\S+/
- @search_for=Search_request.new(search_field,q) #.analyze #% search_for
+ @search_for=SearchRequest.new(search_field,q) #.analyze #% search_for
#% searches
#Canned_search.new(@base,@search_for.text1,cgi)
- if @search_for.text1=~/\S+/ or @search_for.author=~/\S+/ #and search_field =~/\S/
+ if @search_for.text1=~/\S+/ or @search_for.fulltext=~/\S+/ or @search_for.author=~/\S+/ or @search_for.topic_register=~/\S+/ #and search_field =~/\S/
s1='s1=' + CGI.escape(@search_for.text1) if @search_for.text1=~/\S/
+ ft='&ft=' + CGI.escape(@search_for.fulltext) if @search_for.fulltext=~/\S/
key='key=' + CGI.escape(@search_for.keywords) if @search_for.keywords=~/\S/
ti='&ti=' + CGI.escape(@search_for.title) if @search_for.title=~/\S/
au='&au=' + CGI.escape(@search_for.author) if @search_for.author=~/\S/
+ tr='&tr=' + CGI.escape(@search_for.topic_register) if @search_for.topic_register=~/\S/
sj='&sj=' + CGI.escape(@search_for.subject) if @search_for.subject=~/\S/
dsc='&dsc=' + CGI.escape(@search_for.description) if @search_for.description=~/\S/
pb='&pb=' + CGI.escape(@search_for.publisher) if @search_for.publisher=~/\S/
+ edt='&edt=' + CGI.escape(@search_for.editor) if @search_for.editor=~/\S/
cntr='&cntr=' + CGI.escape(@search_for.contributor) if @search_for.contributor=~/\S/
dt='&dt=' + CGI.escape(@search_for.date) if @search_for.date=~/\S/
ty='&ty=' + CGI.escape(@search_for.type) if @search_for.type=~/\S/
@@ -633,33 +713,35 @@
dta='&dta=' + CGI.escape(@search_for.date_available) if @search_for.date_available=~/\S/
dtv='&dtv=' + CGI.escape(@search_for.date_valid) if @search_for.date_valid=~/\S/
fns='&fns=' + CGI.escape(@search_for.filename) if @search_for.filename=~/\S/
- @@canned_search_url=if checked_all =~/checked/
- "#@base?#{s1}#{key}#{ti}#{au}#{sj}#{dsc}#{pb}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}&a=1"
- else "#@base?#{s1}#{key}#{ti}#{au}#{sj}#{dsc}#{pb}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}"
- end
- @canned_base_url="#@base?#{s1}&db=#{cgi['db']}"
+ @@canned_search_url=(checked_all =~/checked/) \
+ ? "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{edt}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}&a=1"
+ : "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{edt}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}"
+ mod=ft=~/\S+/ ? (ft.gsub(/ft/,'s1')) : s1
+ @canned_base_url="#{@base}?#{mod}&db=#{cgi['db']}"
if checked_case=~/\S/
- @search[:text][1]=%{documents.clean~'#{@search_for.text1}'} #s1
+ @search[:text][1]=%{doc_objects.clean~'#{@search_for.text1}'} #s1
@search[:endnotes][1]=%{endnotes.clean~'#{@search_for.text1}'} #s1
else
- @search[:text][1]=%{documents.clean~*'#{@search_for.text1}'} #s1
+ @search[:text][1]=%{doc_objects.clean~*'#{@search_for.text1}'} #s1
@search[:endnotes][1]=%{endnotes.clean~*'#{@search_for.text1}'} #s1
end
canned_note='search url:'
else
- @@canned_search_url="#@base?s1=United+Nations&db=documents&view=index"
+ @@canned_search_url="#{@base}?db=#{@db}&view=index"
canned_note='search url example:'
end
if search_field =~/\S+/
analyze_format=search_field.gsub(/\s*\n/,'; ')
elsif checked_all =~/checked/ or checked_url =~/checked/
- canned_search=@@canned_search_url.scan(/(?:s1|au|ti|fns)=[^&]+/)
+ canned_search=@@canned_search_url.scan(/(?:s1|ft|au|ti|fns|tr)=[^&]+/)
af=canned_search.join('; ')
- af.gsub!(/s1=/,'text: ')
- af.gsub!(/au=/,'author: ')
- af.gsub!(/ti=/,'title: ')
- af.gsub!(/fns=/,'filename: ')
- af.gsub!(/%2B/,' ')
+ af=af.gsub(/s1=/,'text: ').
+ gsub(/ft=/,'fulltxt: ').
+ gsub(/au=/,'author: ').
+ gsub(/ti=/,'title: ').
+ gsub(/fns=/,'filename: ').
+ gsub(/tr=/,'topic_register: ').
+ gsub(/%2B/,' ')
analyze_format=af
st=af.split(/\s*;\s*/)
search_field=st.join("\n")
@@ -667,232 +749,292 @@
green=%{<font size="2" color="#004000">}
canned_search_url_txt=CGI.escapeHTML(@@canned_search_url)
the_can=%{<font size="2" color="#666666">#{canned_note} <a href="#{@@canned_search_url}">#{canned_search_url_txt}</a></font><br />}
- p_text=p_keywords=p_title=p_author=p_subject=p_description=p_publisher=p_contributor=p_date=p_type=p_format=p_identifier=p_source=p_language=p_relation=p_coverage=p_rights=p_comment=p_abstract=p_subject=p_filename=''
+ p_text=p_fulltext=p_keywords=p_title=p_author=p_topic_register=p_subject=p_description=p_publisher=p_editor=p_contributor=p_date=p_type=p_format=p_identifier=p_source=p_language=p_relation=p_coverage=p_rights=p_comment=p_abstract=p_filename=''
+ p_filename=%{filename: #{green}#{@search_for.filename}</font><br />} if @search_for.filename =~/\S+/
p_text=%{text: #{green}#{@search_for.text1}</font><br />} if @search_for.text1 =~/\S+/
- p_keywords=%{keywords: #{green}#{@search_for.keywords}</font><br />} if @search_for.keywords =~/\S+/
+ p_fulltext=%{fulltxt: #{green}#{@search_for.fulltext}</font><br />} if @search_for.fulltext =~/\S+/
p_title=%{title: #{green}#{@search_for.title}</font><br />} if @search_for.title =~/\S+/
p_author=%{author: #{green}#{@search_for.author}</font><br />} if @search_for.author =~/\S+/
- p_subject=%{subject: #{green}#{@search_for.subject}</font><br />} if @search_for.subject =~/\S+/
- p_description=%{description: #{green}#{@search_for.description}</font><br />} if @search_for.description =~/\S+/
- p_publisher=%{publisher: #{green}#{@search_for.publisher}</font><br />} if @search_for.publisher =~/\S+/
+ p_editor=%{editor: #{green}#{@search_for.editor}</font><br />} if @search_for.editor=~/\S+/
p_contributor=%{contributor: #{green}#{@search_for.contributor}</font><br />} if @search_for.contributor =~/\S+/
p_date=%{date: #{green}#{@search_for.date}</font><br />} if @search_for.date =~/\S+/
+ p_rights=%{rights: #{green}#{@search_for.rights}</font><br />} if @search_for.rights =~/\S+/
+ p_topic_register=%{topic_register: #{green}#{@search_for.topic_register}</font><br />} if @search_for.topic_register =~/\S+/
+ p_subject=%{subject: #{green}#{@search_for.subject}</font><br />} if @search_for.subject =~/\S+/
+ p_keywords=%{keywords: #{green}#{@search_for.keywords}</font><br />} if @search_for.keywords =~/\S+/
+ p_identifier=%{identifier: #{green}#{@search_for.identifier}</font><br />} if @search_for.identifier =~/\S+/
p_type=%{type: #{green}#{@search_for.type}</font><br />} if @search_for.type =~/\S+/
p_format=%{format: #{green}#{@search_for.format}</font><br />} if @search_for.format =~/\S+/
- p_identifier=%{identifier: #{green}#{@search_for.identifier}</font><br />} if @search_for.identifier =~/\S+/
- p_source=%{source: #{green}#{@search_for.source}</font><br />} if @search_for.source =~/\S+/
- p_language=%{language: #{green}#{@search_for.language}</font><br />} if @search_for.language =~/\S+/
p_relation=%{relation: #{green}#{@search_for.relation}</font><br />} if @search_for.relation =~/\S+/
p_coverage=%{coverage: #{green}#{@search_for.coverage}</font><br />} if @search_for.coverage =~/\S+/
- p_rights=%{rights: #{green}#{@search_for.rights}</font><br />} if @search_for.rights =~/\S+/
- p_comment=%{comment: #{green}#{@search_for.comment}</font><br />} if @search_for.comment =~/\S+/
+ p_description=%{description: #{green}#{@search_for.description}</font><br />} if @search_for.description =~/\S+/
p_abstract=%{abstract: #{green}#{@search_for.abstract}</font><br />} if @search_for.abstract =~/\S+/
- p_filename=%{filename: #{green}#{@search_for.filename}</font><br />} if @search_for.filename =~/\S+/
+ p_comment=%{comment: #{green}#{@search_for.comment}</font><br />} if @search_for.comment =~/\S+/
+ p_publisher=%{publisher: #{green}#{@search_for.publisher}</font><br />} if @search_for.publisher =~/\S+/
+ p_source=%{source: #{green}#{@search_for.source}</font><br />} if @search_for.source =~/\S+/
+ p_language=%{language: #{green}#{@search_for.language}</font><br />} if @search_for.language =~/\S+/
search_note=<<-WOK
<font size="2" color="#666666">
- <b>database:</b> #{green}#@db</font>; <b>selected view:</b> #{green}#{cgi['view']}</font>
+ <b>database:</b> #{green}#{@db}</font>; <b>selected view:</b> #{green}#{cgi['view']}</font>
<b>search string:</b> "#{green}#{analyze_format}</font>"<br />
- #{p_text} #{p_keywords} #{p_title} #{p_author} #{p_subject} #{p_description} #{p_publisher} #{p_contributor} #{p_date} #{p_type} #{p_format} #{p_identifier} #{p_source} #{p_language} #{p_relation} #{p_coverage} #{p_rights} #{p_comment} #{p_abstract} #{p_filename}
+ #{p_text} #{p_fulltext} #{p_keywords} #{p_title} #{p_author} #{p_topic_register} #{p_subject} #{p_description} #{p_publisher} #{p_editor} #{p_contributor} #{p_date} #{p_type} #{p_format} #{p_identifier} #{p_source} #{p_language} #{p_relation} #{p_coverage} #{p_rights} #{p_comment} #{p_abstract} #{p_filename}
</font>
WOK
- #eg = %{canned search e.g.:<br /> <a href="#{url}">#{url}</a><br />find: #{analyze}<br />database: #{database}}
- #dbi_canning
- @header=Form.new(@base,search_field,selected_db,checked_index,checked_text,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can).submission_form #% form
- unless q['s1'] =~/\S/ or q['au'] =~/\S/ or @search[:text][1] =~/\S/
- print "Content-type: text/html\n\n"
- puts (@header+@tail)
- else #% searches
- s1=if @search_for.text1 =~/\S/
- @search_for.text1
- else 'Unavailable'
+ #eg = %{canned search e.g.:<br /> <a href="#{url}">#{url}</a><br />find: #{analyze}<br />database: #{database}}
+ #% dbi_canning
+ @header=Form.new(@base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can).submission_form #% form
+ unless q['s1'] =~/\S/ or q['au'] =~/\S/ or @search[:text][1] =~/\S/
+ print "Content-type: text/html\n\n"
+ puts (@header+@tail)
+ else #% searches
+ s1=(@search_for.text1 =~/\S/) \
+ ? @search_for.text1
+ : 'Unavailable'
+ if checked_case=~/\S/
+ @search[:text]<<%{doc_objects.clean~'#{CGI.unescape(s1)}'}
+ @search[:endnotes]<<%{endnotes.clean~'#{CGI.unescape(s1)}'}
+ else
+ @search[:text]<<%{doc_objects.clean~*'#{CGI.unescape(s1)}'}
+ @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'}
+ end
+ #% dbi_request
+ dbi_statement=DBI_SearchStatement.new(@conn,@search_for,q,checked_case)
+ @text_search_flag=false
+ @text_search_flag=dbi_statement.text_search_flag
+ s_contents=dbi_statement.contents
+ s_endnotes=dbi_statement.endnotes
+ @body_main,@endnotes='',''
+ @search_regx=nil
+ oldtid=0
+ if @text_search_flag
+ if checked_sql =~/\S/
+ sql_select_body=dbi_statement.sql_select_body_format
+ sql_select_endnotes=dbi_statement.sql_select_endnotes_format
+ else sql_select_body,sql_select_endnotes='',''
end
- if checked_case=~/\S/
- @search[:text]<<%{documents.clean~'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~'#{CGI.unescape(s1)}'}
+ @body_main << '<p><hr><br /><b>Main Text:</b><br />' << sql_select_body
+ @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes
+ else
+ end
+ @hostpath="#{@hosturl_files}/#{@stub}"
+ def path_manifest(fn,ln=nil)
+ case @output_dir_structure_by
+ when 'filename'
+ @lingual =='mono' \
+ ? "#{@hostpath}/#{fn}/sisu_manifest.html"
+ : "#{@hostpath}/#{fn}/sisu_manifest.#{ln}.html"
+ when 'filetype'
+ @lingual =='mono' \
+ ? "#{@hostpath}/manifest/#{fn}.html"
+ : "#{@hostpath}/manifest/#{fn}.#{ln}.html"
else
- @search[:text]<<%{documents.clean~*'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'}
+ "#{@hostpath}/#{ln}/manifest/#{fn}.html"
end
- #dbi_request
- dbi_statement=Dbi_search_statement.new(@conn,@search_for,q,checked_case)
- @text_search_flag=false
- @text_search_flag=dbi_statement.text_search_flag
- s_contents=dbi_statement.contents
- s_endnotes=dbi_statement.endnotes
- @body_main,@endnotes=[],[]
- @search_regx=nil
- oldtid=0
- if @text_search_flag
- if checked_sql =~/\S/
- sql_select_body=dbi_statement.sql_select_body_format
- sql_select_endnotes=dbi_statement.sql_select_endnotes_format
- else sql_select_body,sql_select_endnotes='',''
- end
- @body_main << '<p><hr><br /><b>Main Text:</b><br />' << sql_select_body
- @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes
+ end
+ def path_html_seg(fn,ln=nil)
+ case @output_dir_structure_by
+ when 'filename'
+ "#{@hostpath}/#{fn}"
+ when 'filetype'
+ "#{@hostpath}/html/#{fn}"
else
+ "#{@hostpath}/#{ln}/html/#{fn}"
end
- #text_objects_body
- s_contents.each do |c| #% text body
- location=c['filename'][/(.+?)\.(?:_?sst|ssm)$/,1]
- file_suffix=c['filename'][/.+?\.(_?sst|ssm)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location.gsub!(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
- else ''
- end
- #metadata_found_body
- if c['tid'].to_i != oldtid.to_i
- ti=if c['subtitle'] =~/\S+/; "#{c['title']} - #{c['subtitle']}"
- else c['title']
- end
- can_txt_srch=if cgi['view']=~/index/; %{<a href="#{@canned_base_url}&fns=#{c['filename']}&view=text"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- else %{<a href="#{@canned_base_url}&fns=#{c['filename']}&view=index"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- end
- title=%{<span style="background-color: #@color_heading"><a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> by #{c['creator']} #{can_txt_srch}<a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html"></a> <a href="#@hosturl_files/#@stub/#{location}/portrait#{lang}.pdf"><img border="0" width="15" height="18" src="#@image_src/b_pdf.png" alt="pdf portrait"></a> <a href="#@hosturl_files/#@stub/#{location}/landscape#{lang}.pdf"><img border="0" width="18" height="15" src="#@image_src/b_pdf.png" alt="pdf landscape"></a> <a href="#@hosturl_files/#@stub/#{location}/opendocument#{lang}.odt"><img border="0" width="15" height="15" src="#@image_src/b_odf.png" alt="odf"></a> <a href="#@hosturl_files/#@stub/#{location}/sisu_manifest#{lang}.html"><img border="0" width="15" height="15" src="#@image_src/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/ #hmm watch file_suffix
- if @text_search_flag; title='<br /><hr>'+title
- else title='<br />'+title
- end
- @counter_txt_doc+=1
- oldtid=c['tid'].to_i
- else title=''
- end
- if @text_search_flag
- if cgi['view']=~/text/ #% txt body
- text=if c['suffix'] !~/1/ #seg
- if @search_for.text1 =~/\S+/ or q['s1'] =~/\S+/ #% only this branch is working !!
- unescaped_search=if @search_for.text1 =~/\S+/; CGI.unescape(@search_for.text1)
- elsif q['s1'] =~/\S+/; CGI.unescape(q['s1'])
- else nil
- end
- @search_regx=if unescaped_search #check
- search_regex=[]
- build=unescaped_search.scan(/\S+/).each do |g|
- if g.to_s =~/(AND|OR)/
- search_regex << '|'
- else search_regex << %{#{g.to_s}}
- end
- end
- search_regex=search_regex.join(' ')
- search_regex=search_regex.gsub(/\s*\|\s*/,'|')
- Regexp.new(search_regex, Regexp::IGNORECASE)
- else nil
- end
+ end
+ def path_toc(fn,ln=nil)
+ if @output_dir_structure_by =='filename' \
+ or @output_dir_structure_by =='filetype'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/toc.html"
+ : "#{path_html_seg(fn,ln)}/toc.#{ln}.html"
+ else
+ "#{path_html_seg(fn,ln)}/toc.html"
+ end
+ end
+ def path_filename(fn,seg,ln=nil)
+ if @output_dir_structure_by =='filename' \
+ or @output_dir_structure_by =='filetype'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/#{seg}.html"
+ : "#{path_html_seg(fn,ln)}/#{seg}.#{ln}.html"
+ else
+ "#{path_html_seg(fn,ln)}/#{seg}.html"
+ end
+ end
+ def path_endnotes(fn,ln=nil)
+ if @output_dir_structure_by =='filename' \
+ or @output_dir_structure_by =='filetype'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/endnotes.html"
+ : "#{path_html_seg(fn,ln)}/endnotes.#{ln}.html"
+ else
+ "#{path_html_seg(fn,ln)}/endnotes.html"
+ end
+ end
+ def path_html_doc(fn,ln=nil)
+ case @output_dir_structure_by
+ when 'filename'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/scroll.html"
+ : "#{path_html_seg(fn,ln)}/scroll.#{ln}.html"
+ when 'filetype'
+ @lingual =='mono' \
+ ? "#{@hostpath}/html/#{fn}.html"
+ : "#{@hostpath}/html/#{fn}.#{ln}.html"
+ else
+ "#{@hostpath}/#{ln}/html/#{fn}.html"
+ end
+ end
+ #% text_objects_body
+ s_contents.each do |c| #% text body
+ location=c['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1]
+ file_suffix=c['src_filename'][/.+?\.(ssm\.sst|sst)$/,1]
+ lang=if location =~ /\S+?~(\S\S\S?)$/
+ l=location[/\S+?~(\S\S\S?)$/,1]
+ location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
+ l=".#{l}"
+ else ''
+ end
+ #% metadata_found_body
+ if c['tid'].to_i != oldtid.to_i
+ ti=c['title']
+ can_txt_srch=(cgi['view']=~/index/) \
+ ? %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ : %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ title=%{<span style="background-color: #{@color_heading}"><a href="#{path_toc(location,c['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> [#{c['language_document_char']}] by #{c['creator_author']} <a href="#{path_manifest(location,c['language_document_char'])}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a> #{can_txt_srch}<br />} if file_suffix=~/s/ #hmm watch file_suffix
+ title=@text_search_flag \
+ ? '<br /><hr>'+title
+ : '<br />'+title
+ @counter_txt_doc+=1
+ oldtid=c['tid'].to_i
+ else title=''
+ end
+ if @text_search_flag
+ if cgi['view']=~/text/ \
+ or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt body
+ text=if c['suffix'] !~/1/ #seg
+ if @search_for.text1 =~/\S+/ \
+ or q['s1'] =~/\S+/ #% only this branch is working !!
+ unescaped_search=if @search_for.text1 =~/\S+/
+ CGI.unescape(@search_for.text1)
+ elsif q['s1'] =~/\S+/
+ CGI.unescape(q['s1'])
else nil
end
- matched_para=if (@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/)
- matched=c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#@search_regx)/mi,%{<span style="background-color: #@color_match">\\1</span>})
- else c['body']
- end
- %{<hr><p><font size="2">ocn <b><a href="#@hosturl_files/#@stub/#{location}/#{c['seg']}#{lang}.html##{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
- elsif c['suffix'] =~/1/ #doc
- %{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}}
- end
- @counter_txt_ocn+=1
- output=if c['seg'] =~/\S+/; title+text
- else text
- end
- elsif cgi['view']=~/index/ #% idx body
- if c['suffix'] !~/1/ #seg
- index=%{<a href="#@hosturl_files/#@stub/#{location}/#{c['seg']}#{lang}.html##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
- elsif c['suffix'] =~/1/ #doc
- index=%{<a href="#@hosturl_files/#@stub/#{location}/doc#{lang}.html##{c['ocn']}">#{c['ocn']}</a>, }
- end
- if c['seg'] =~/\S+/
- if @text_search_flag
- @counter_txt_ocn+=1
- output=title+index
- end
- else
- @counter_txt_ocn+=1
- output=unless c['suffix'] =~/1/; title+index
- else %{#{title}#{c['ocn'].sort}, }
+ @search_regx=if unescaped_search #check
+ search_regex=[]
+ build=unescaped_search.scan(/\S+/).each do |g|
+ (g.to_s =~/(AND|OR)/) \
+ ? (search_regex << '|')
+ : (search_regex << %{#{g.to_s}})
+ end
+ search_regex=search_regex.join(' ')
+ search_regex=search_regex.gsub(/\s*\|\s*/,'|')
+ Regexp.new(search_regex, Regexp::IGNORECASE)
+ else nil
end
+ else nil
end
+ matched_para=(@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/) \
+ ? (c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
+ : c['body']
+ %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
+ elsif c['suffix'] =~/1/ #doc
+ %{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}}
end
- else output=title
- end
- @counters_txt=if @counter_txt_doc > 0
- if checked_stats =~/\S/
- @@lt_t=if @counter_txt_ocn == dbi_statement.sql_limit.to_i
- over='over'
- true
- else
- over=''
- false
+ @counter_txt_ocn+=1
+ output=title+text
+ else #elsif cgi['view']=~/index/ #% idx body
+ if c['suffix'] !~/1/ #seg
+ index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
+ elsif c['suffix'] =~/1/ #doc #FIX
+ index=%{<a href="#{path_html_doc(location,c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, }
+ end
+ if c['seg'] =~/\S+/
+ if @text_search_flag
+ @counter_txt_ocn+=1
+ output=title+index
end
- %{<hr /><font size="2" color="#666666">Found in the main body of #@counter_txt_doc documents, and at #{over} #@counter_txt_ocn locations within.</font><br />}
- else ''
+ else
+ @counter_txt_ocn+=1
+ output=c['suffix'] !~/1/ \
+ ? title+index
+ : %{#{title}#{c['ocn'].sort}, }
end
- else ''
end
- @body_main << output #+ details
+ else output=title
end
- #text_objects_endnote
- oldtid = 0
- s_endnotes.each do |e| #% endnotes
- location=e['filename'][/(.+?)\.(?:_?sst|ssm)$/,1]
- file_suffix=e['filename'][/.+?\.(_?sst|ssm)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location.gsub!(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
+ @counters_txt=if @counter_txt_doc > 0
+ if checked_stats =~/\S/
+ @@lt_t=(@counter_txt_ocn==dbi_statement.sql_match_limit.to_i) ? true : false
+ start=(@@offset.to_i+1).to_s
+ range=(@@offset.to_i+@counter_txt_ocn.to_i).to_s
+ %{<hr /><font size="2" color="#666666">Found #{@counter_txt_ocn} times in the main body of #{@counter_txt_doc} documents [ matches #{start} to #{range} ]</font><br />}
else ''
end
+ else ''
+ end
+ @body_main << output #+ details
+ end
+ #text_objects_endnote
+ oldtid = 0
+ s_endnotes.each do |e| #% endnotes
+ location=e['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1]
+ file_suffix=e['src_filename'][/.+?\.(ssm\.sst|sst)$/,1]
+ lang=if location =~ /\S+?~(\S\S\S?)$/
+ l=location[/\S+?~(\S\S\S?)$/,1]
+ location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
+ l=".#{l}"
+ else ''
+ end
#metadata_found_endnotes
- if @text_search_flag
- if e['metadata_tid'].to_i != oldtid.to_i
- ti=if e['subtitle'] =~/\S+/; "#{e['title']} - #{e['subtitle']}"
- else e['title']
- end
- can_txt_srch=if cgi['view']=~/index/; %{<a href="#{@canned_base_url}&fns=#{e['filename']}&view=text"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- else %{<a href="#{@canned_base_url}&fns=#{e['filename']}&view=index"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- end
- title=%{<br /><hr><span style="background-color: #@color_heading"><a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> by #{e['creator']} #{can_txt_srch}<a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html"></a> <a href="#@hosturl_files/#@stub/#{location}/portrait.pdf"><img border="0" width="15" height="18" src="#@image_src/b_pdf.png" alt="pdf portrait"></a><a href="#@hosturl_files/#@stub/#{location}/landscape.pdf"><img border="0" width="18" height="15" src="#@image_src/b_pdf.png" alt="pdf landscape"></a> <a href="#@hosturl_files/#@stub/#{location}/opendocument#{lang}.odt"><img border="0" width="15" height="15" src="#@image_src/b_odf.png" alt="odf"></a> <a href="#@hosturl_files/#@stub/#{location}/sisu_manifest#{lang}.html"><img border="0" width="15" height="15" src="#@image_src/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/
- @counter_endn_doc+=1
- oldtid=e['metadata_tid'].to_i
- else title = ''
- end
- if cgi['view']=~/text/ #% txt endnotes
- @counter_endn_ocn+=1
- matched_endnote=if (@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/)
- matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#@search_regx)/mi,%{<span style="background-color: #@color_match">\\1</span>})
- else e['body']
- end
- output=%{#{title}<hr><font size="2">note <b><a href="#@hosturl_files/#@stub/#{location}/endnotes.html#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#@hosturl_files/#@stub/#{location}/doc.html##{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
- elsif cgi['view']=~/index/ #% idx endnotes
- @counter_endn_ocn+=1
- output=%{#{title}<a href="#@hosturl_files/#@stub/#{location}/endnotes.html#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#@hosturl_files/#@stub/#{location}/doc.html##{e['ocn']}">#{e['ocn']}</a>], }
- end
- @counters_endn=if @counter_endn_doc > 0
- if checked_stats =~/\S/
- @@lt_e=if @counter_endn_ocn == dbi_statement.sql_limit.to_i
- over='over'
- true
- else
- over=''
- false
- end
- %{<font size="2" color="#666666">Found in the endnotes of #@counter_endn_doc documents, and at #{over} #@counter_endn_ocn locations within.</font><br />}
- else ''
- end
+ if @text_search_flag
+ if e['metadata_tid'].to_i != oldtid.to_i
+ ti=e['title']
+ can_txt_srch=(cgi['view']=~/index/) \
+ ? %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ : %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> [#{e['language_document_char']}] by #{e['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a>&nbsp;<a href="#{path_manifest(location,e['language_document_char'])}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/
+ @counter_endn_doc+=1
+ oldtid=e['metadata_tid'].to_i
+ else title = ''
+ end
+ if cgi['view']=~/text/ \
+ or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt endnotes
+ @counter_endn_ocn+=1
+ matched_endnote=(@search_regx.to_s.is_a?(String) \
+ && @search_regx.to_s=~/\S\S+/) \
+ ? (matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
+ : e['body']
+ output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
+ else #elsif cgi['view']=~/index/ #doc #FIX #% idx endnotes
+ @counter_endn_ocn+=1
+ output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>], }
+ end
+ @counters_endn=if @counter_endn_doc > 0
+ if checked_stats =~/\S/
+ @@lt_e=@counter_endn_ocn==dbi_statement.sql_match_limit.to_i \
+ ? true
+ : false
+ start=(@@offset.to_i+1).to_s
+ range=(@@offset.to_i+@counter_endn_ocn.to_i).to_s
+ %{<font size="2" color="#666666">Found #{@counter_endn_ocn} times in the endnotes of #{@counter_endn_doc} documents [ matches #{start} to #{range} ]</font><br />}
+ else ''
end
- @endnotes << output #+ details
- else @endnotes=[] #does not take out yet
end
+ @endnotes << output #+ details
+ else @endnotes='' #does not take out yet
end
- offset=dbi_statement.sql_offset.to_s
- limit=dbi_statement.sql_limit.to_s
- @@lt_t ||=false; @@lt_e ||=false
- canned=if (@@lt_t or @@lt_e)
- dbi_statement.sql_canned_search_url(true).to_s
- else
- dbi_statement.sql_canned_search_url(false).to_s
- end
- limit=dbi_statement.sql_limit.to_s
- cgi.out{@header + @counters_txt + @counters_endn + @body_main.join + @endnotes.join + canned + @tail} #% print cgi_output_header+counters+body+endnotes
end
+ offset=dbi_statement.sql_offset.to_s
+ limit=dbi_statement.sql_match_limit.to_s
+ @@lt_t ||=false; @@lt_e ||=false
+ canned=(@@lt_t or @@lt_e) \
+ ? dbi_statement.pre_next(true,@image_src).to_s
+ : dbi_statement.pre_next(false,@image_src).to_s
+ limit=dbi_statement.sql_match_limit.to_s
+ cgi.out{@header.force_encoding("UTF-8") + @counters_txt.force_encoding("UTF-8") + @counters_endn.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @body_main.force_encoding("UTF-8") + @endnotes.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @tail.force_encoding("UTF-8")} #% print cgi_output_header+counters+body+endnotes
+ end
rescue Exception => e
s='<pre>' + CGI::escapeHTML(e.backtrace.reverse.join("\n"))
s << CGI::escapeHTML(e.message) + '</pre>'
diff --git a/data/sisu/conf/cgi-bin/sisu_search_sqlite.cgi b/data/sisu/conf/cgi-bin/sisu_search_sqlite.cgi
index 34bb3748..2bd9c09a 100644
--- a/data/sisu/conf/cgi-bin/sisu_search_sqlite.cgi
+++ b/data/sisu/conf/cgi-bin/sisu_search_sqlite.cgi
@@ -13,15 +13,13 @@
* Author: Ralph Amissah
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007 Ralph Amissah All Rights Reserved.
+ * Copyright: (C) 1997 - 2014, Ralph Amissah, All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
- Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007 Ralph Amissah
+ Copyright (C) Ralph Amissah
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
@@ -39,7 +37,7 @@
If you have Internet connection, the latest version of the GPL should be
available at these locations:
<http://www.fsf.org/licenses/gpl.html>
- <http://www.gnu.org/copyleft/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
<http://www.jus.uio.no/sisu/gpl.fsf>
* SiSU uses:
@@ -59,26 +57,34 @@
<ralph.amissah@gmail.com>
=end
- require 'cgi'
- require 'fcgi'
- require 'dbi'
- @version='sisu_search_sqlite'
- @image_src="http://localhost/sisu/_sisu/image"
- @hosturl_db="http://localhost"
- @hosturl_files="http://www.jus.uio.no"
- @@limit,@@offset=1000,0
- @base="#@hosturl_db/cgi-bin/#@version.cgi"
+ begin
+ require 'cgi'
+ require 'fcgi'
+ require 'dbi'
+ rescue LoadError
+ puts 'cgi, fcgi or dbi NOT FOUND (LoadError)'
+ end
+ @stub_default='sisu_sqlite'
+ @image_src="http://#{ENV['HTTP_HOST']}/_sisu/image_sys"
+ @hosturl_cgi="http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}"
+ @hosturl_files="http://#{ENV['HTTP_HOST']}"
+ @output_dir_structure_by='language'
+ @lingual='multi'
+ @db_name_prefix='SiSUv6a_'
+ @base="http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}#{ENV['SCRIPT_NAME']}"
+#Common TOP
+ @@offset=0
@@canned_search_url=@base
@color_heading='#DDFFAA'
@color_match='#ffff48'
class Form
- def initialize(base,search_field,selected_db,checked_index,checked_text,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can='')
+ def initialize(base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can='')
search_note='' if checked_searched !~/\S/
the_can='' if checked_url !~/\S/
search_field='' if checked_echo !~/\S/
- @base,@search_field,@selected_db,@checked_index,@checked_text,@checked_tip,@checked_stats,@checked_searched,@checked_url,@checked_case,@checked_echo,@checked_sql,@checked_all,@checked_none,@checked_selected,@checked_default,@search_note,@the_can=base,search_field,selected_db,checked_index,checked_text,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can
+ @base,@search_field,@selected_db,@result_type,@checked_sql_limit,@checked_tip,@checked_stats,@checked_searched,@checked_url,@checked_case,@checked_echo,@checked_sql,@checked_all,@checked_none,@checked_selected,@checked_default,@search_note,@the_can=base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can
@tip=if checked_tip =~/\S/
- '<font size="2" color="#666666">text:__; keywords:__; title:__; author:__; subject:__; description:__; publisher:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />'
+ '<font size="2" color="#666666">text:__; fulltxt:__; keywords:__; title:__; author:__; topic_register:__; subject:__; description:__; publisher:__; editor:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />'
else ''
end
end
@@ -94,53 +100,68 @@
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="sourcefile" content="SiSU._sst" />
<link rel="generator" href="http://www.jus.uio.no/sisu" />
- <link rel="shortcut icon" href="http://localhost/sisu/_sisu/image/rb7.ico" />
+ <link rel="shortcut icon" href="http://#{ENV['HTTP_HOST']}/_sisu/image_sys/rb7.ico" />
<link rel="stylesheet" href="../_sisu/css/html.css" type="text/css" />
</head>
<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">
<table summary="band" border="0" cellpadding="3" cellspacing="0">
- <tr><td align="left" bgcolor="#ffffff"><a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" src="http://localhost/sisu/_sisu/image/sisu.png" alt="SiSU --&gt;" /></a></td><td>
-<!-- <p class="tiny"><a href="http://www.jus.uio.no/sisu/SiSU/">&nbsp;http://www.jus.uio.no/sisu/SiSU/</a></p> -->
- <label for="find"><b>sample search form</b></label>
+ <tr><td width="20%">
+ <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">
+ <tr><td align="left" bgcolor="#ffffff">
+ <br /><a href="http://sisudoc.org/" target="_top">
+ <b>SiSU</b>
+ </a>
+ <br /><a href="http://git.sisudoc.org/" target="_top">
+ git
+ </a>
+ </td></tr>
+ </table>
+ </td>
+ <td>
+ <label for="find"><b>sample search form (content organised by language)</b></label>
</td></tr>
</table>
- <form action="#@base" id="Test Form" method="post">
+ <form action="#{@base}" id="Test Form" method="post">
<table cellpadding="2">
<tr><td valign=\"top\">
- <textarea id="find" name="find" type="text" rows="6" cols="40" maxlength="256">#@search_field</textarea>
+ <textarea id="find" name="find" type="text" rows="6" cols="40" maxlength="256">#{@search_field}</textarea>
</td>
<td valign=\"top\">
- #@tip
- #@search_note
- #@the_can
+ #{@tip}
+ #{@search_note}
+ #{@the_can}
</td></tr></table>
<td valign=\"top\"><tr><td>
- <!input type="text" id="find" name="find" value="#@search_field" />
+ <!input type="text" id="find" name="find" value="#{@search_field}" />
<!input type="text" id="find" name="find" value="" />
<font size="2" color="#222222">
<b>to search:</b> select which database to search (drop-down menu below); enter your search query (in the form above); and <b>click on the search button</b> (below)
<br />
<select name="db" size="1">
- #@selected_db
- <option value="SiSU_pace">pace</option>
- <option value="SiSU_sisu">sisu</option>
+ #{@selected_db}
+ <option value="SiSUv6a_manual">manual</option>
+ <option value="SiSUv6a_sisu">sisu</option>
</select>
<input type="submit" value="SiSU search" />
- <input type="radio" name="view" value="index" #@checked_index> index
- <input type="radio" name="view" value="text" #@checked_text> text / grep
+ <input type="radio" name="view" value="index" #{@result_type[:index]}> index
+ <input type="radio" name="view" value="text" #{@result_type[:text]}> text / grep
+ <br />
+ match limit:
+ <input type="radio" name="sql_match_limit" value="1000" #{@checked_sql_limit[:l1000]}> 1,000
+ <input type="radio" name="sql_match_limit" value="2500" #{@checked_sql_limit[:l2500]}> 2,500
<br />
- <input type="checkbox" name="echo" #@checked_echo> echo query
- <input type="checkbox" name="stats" #@checked_stats> result stats
- <input type="checkbox" name="url" #@checked_url> search url
- <input type="checkbox" name="searched" #@checked_searched> searched
- <input type="checkbox" name="tip" #@checked_tip> available fields
- <input type="checkbox" name="sql" #@checked_sql> sql statement
+ <input type="checkbox" name="echo" #{@checked_echo}> echo query
+ <input type="checkbox" name="stats" #{@checked_stats}> result stats
+ <input type="checkbox" name="url" #{@checked_url}> search url
+ <input type="checkbox" name="searched" #{@checked_searched}> searched
+ <input type="checkbox" name="tip" #{@checked_tip}> available fields
+ <input type="checkbox" name="sql" #{@checked_sql}> sql statement
<br />
checks:
- <input type="radio" name="checks" value="check_default" #@checked_default> default
- <input type="radio" name="checks" value="check_selected" #@checked_selected> selected
- <input type="radio" name="checks" value="check_all" #@checked_all> all
- <input type="radio" name="checks" value="check_none" #@checked_none> none
+ <input type="radio" name="checks" value="check_default" #{@checked_default}> default
+ <input type="radio" name="checks" value="check_selected" #{@checked_selected}> selected
+ <input type="radio" name="checks" value="check_all" #{@checked_all}> all
+ <input type="radio" name="checks" value="check_none" #{@checked_none}> none
</font>
</td></tr>
</table>
@@ -148,19 +169,21 @@
WOK
end
end
- class Search_request #% search_for
- attr_accessor :text1,:keywords,:title,:author,:subject,:description,:publisher,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid,:filename
+ class SearchRequest #% search_for
+ attr_accessor :text1,:fulltext,:keywords,:title,:author,:topic_register,:subject,:description,:publisher,:editor,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid,:filename
def initialize(search_field='',q='')
@search_field,@q=search_field,q
- @text1=@keywords=@title=@author=@subject=@description=@publisher=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=@filename=''
+ @text1=@fulltext=@keywords=@title=@author=@topic_register=@subject=@description=@publisher=@editor=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=@filename=''
if @search_field=~/\S/
@text1=text_to_match('text:')
- @keywords=text_to_match('key(?:words?)?:')
+ @fulltext=text_to_match('fulltxt:')
+ @topic_register=text_to_match('topic_register:')
@title=text_to_match('title:') # DublinCore 1 - title
@author=text_to_match('(?:author|creator)s?:') # DublinCore 2 - creator/author
@subject=text_to_match('subj(?:ect)?:') # DublinCore 3 - subject
@description=text_to_match('description:') # DublinCore 4 - description
@publisher=text_to_match('pub(?:lisher)?:') # DublinCore 5 - publisher
+ @editor=text_to_match('editor:')
@contributor=text_to_match('contributor:') # DublinCore 6 - contributor
@date=text_to_match('date:') # DublinCore 7 - date dd-mm-yy
@type=text_to_match('type:') # DublinCore 8 - type
@@ -171,6 +194,7 @@
@relation=text_to_match('relation:') # DublinCore 13 - relation
@coverage=text_to_match('coverage:') # DublinCore 14 - coverage
@rights=text_to_match('rights:') # DublinCore 15 - rights
+ @keywords=text_to_match('key(?:words?)?:')
@comment=text_to_match('comment:')
@abstract=text_to_match('abs(?:tract)?:')
@owner=text_to_match('owner:')
@@ -180,15 +204,18 @@
@date_available=text_to_match('date_available:')
@date_valid=text_to_match('date_valid:')
@filename=text_to_match('filename:')
- @text1=text_to_match unless @keywords or @author or @title or @text1 or @comment or @abstract or @rights or @subject or @publisher or @date or @filename
+ @text1=text_to_match unless @keywords or @author or @title or @text1 or @fulltext or @comment or @abstract or @rights or @subject or @publisher or @date or @filename or @topic_register
else
@text1=q['s1'] if q['s1']=~/\S/
+ @fulltext=q['ft'] if q['ft']=~/\S/
@keywords=q['key'] if q['key']=~/\S/
@title=q['ti'] if q['ti']=~/\S/
@author=q['au'] if q['au']=~/\S/
+ @topic_register=q['tr'] if q['tr']=~/\S/
@subject=q['sj'] if q['sj']=~/\S/
@description=q['dsc'] if q['dsc']=~/\S/
@publisher=q['pb'] if q['pb']=~/\S/
+ @editor=q['cntr'] if q['cntr']=~/\S/
@contributor=q['cntr'] if q['cntr']=~/\S/
@date=q['dt'] if q['dt']=~/\S/
@type=q['ty'] if q['ty']=~/\S/
@@ -205,46 +232,46 @@
@date_modified=q['dtm'] if q['dtm']=~/\S/
@date_available=q['dta'] if q['dta']=~/\S/
@date_valid=q['dtv'] if q['dtv']=~/\S/
- @filename=q['fns'] if q['fns']=~/\S/
+ @filename=if q['doc'] and q['search'] !~/search db/ then q['doc']
+ elsif q['fns']=~/\S/ then q['fns']
+ end
@@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000
@@offset=q['off'] if q['off']=~/\d+/ # 0
end
end
def text_to_match(identifier='')
m={
- :string => /#{identifier}\s*(.+?)/,
- :string => /#{identifier}\s*(.+?)(?:;|\n|\r|$)/,
- :word => /#{identifier}[\s(]*(\S+)/
+ string: /#{identifier}\s*(.+?)/,
+ string: /#{identifier}\s*(.+?)(?:;|\n|\r|$)/,
+ word: /#{identifier}[\s(]*(\S+)/
}
search_string=if @search_field =~m[:word]
- search_string=if @search_field =~m[:braces]; m[:braces].match(@search_field)[1]
- elsif @search_field =~m[:string]; m[:string].match(@search_field)[1]
+ search_string=if @search_field =~m[:braces] then m[:braces].match(@search_field)[1]
+ elsif @search_field =~m[:string] then m[:string].match(@search_field)[1]
else
str=m[:word].match(@search_field)[1]
- str.gsub!(/[()]/,'')
+ str=str.gsub(/[()]/,'')
str
end
- search_string.strip!
- search_string.gsub!(/\s+/,'+')
- search_string
+ search_string=search_string.strip.gsub(/\s+/,'+')
#else
# "__"
end
end
end
- class Dbi_search_string
+ class DBI_SearchString
def initialize(l,t,q,cse=false)
@l,@t,@q=l,t,q
end
def string
- search={ :search => [],:flag => false }
+ search={ search: [], flag: false }
if @t =~/\S+/ or @q =~/\S+/
- if @t =~/\S+/; unescaped_search=CGI.unescape(@t)
- elsif @q =~/\S+/; unescaped_search=CGI.unescape(@q)
+ if @t =~/\S+/ then unescaped_search=CGI.unescape(@t)
+ elsif @q =~/\S+/ then unescaped_search=CGI.unescape(@q)
end
search_construct=[]
- unescaped_search.gsub!(/\s*(AND|OR)\s*/,"%' \) \\1 #@l LIKE \( '%")
- unescaped_search.gsub!(/(.+)/,"#@l LIKE \( '%\\1%' \)")
+ unescaped_search=unescaped_search.gsub(/\s*(AND|OR)\s*/,"%' \) \\1 #{@l} LIKE \( '%").
+ gsub(/(.+)/,"#{@l} LIKE \( '%\\1%' \)")
search_construct << unescaped_search
search_construct=search_construct.join(' ')
search[:search] << search_construct
@@ -254,180 +281,217 @@
search
end
end
- class Dbi_search_statement
+ class DBI_SearchStatement
attr_reader :text_search_flag,:sql_select_body_format,:sql_select_endnotes_format,:sql_offset,:sql_limit
def initialize(conn,search_for,q,c)
@conn=conn
@text_search_flag=false
- @sql_statement={ :body=>'',:endnotes=>'',:range=>'' }
+ @sql_statement={ body: '', endnotes: '', range: '' }
#@offset||=@@offset
#@offset+=@@limit
- search={ :text => [],:endnotes => [] }
- cse=if c =~/\S/; true
- else false
- end
- st=Dbi_search_string.new('documents.clean',search_for.text1,q['s1'],cse).string
- se=Dbi_search_string.new('endnotes.clean',search_for.text1,q['s1'],cse).string
+ search={ text: [], endnotes: [] }
+ cse=(c =~/\S/) ? true : false
+ st=DBI_SearchString.new('doc_objects.clean',search_for.text1,q['s1'],cse).string
+ se=DBI_SearchString.new('endnotes.clean',search_for.text1,q['s1'],cse).string
@text_search_flag=st[:flag]
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << se[:search]
end
- st=Dbi_search_string.new('metadata.keywords',search_for.keywords,q['key'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.fulltext',search_for.fulltext,q['ft'],cse).string
+ if st[:flag]
+ search[:text] << st[:search]
+ search[:endnotes] << st[:search]
+ end
+ st=DBI_SearchString.new('metadata_and_text.title',search_for.title,q['ti'],cse).string
+ if st[:flag]
+ search[:text] << st[:search]
+ search[:endnotes] << st[:search]
+ end
+ st=DBI_SearchString.new('metadata_and_text.creator_author',search_for.author,q['au'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.title',search_for.title,q['ti'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.classify_topic_register',search_for.topic_register,q['tr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.creator',search_for.author,q['au'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.classify_subject',search_for.subject,q['sj'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.subject',search_for.subject,q['sj'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.classify_keywords',search_for.keywords,q['key'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.description',search_for.description,q['dsc'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_description',search_for.description,q['dsc'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.publisher',search_for.publisher,q['pb'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.publisher',search_for.publisher,q['pb'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.contributor',search_for.contributor,q['cntr'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.creator_editor',search_for.editor,q['cntr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.date',search_for.date,q['dt'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.creator_contributor',search_for.contributor,q['cntr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.type',search_for.type,q['ty'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.date_published',search_for.date,q['dt'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.identifier',search_for.identifier,q['id'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_type',search_for.type,q['ty'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.source',search_for.source,q['src'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.original_source',search_for.source,q['src'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.language',search_for.language,q['lang'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.language_document_char',search_for.language,q['lang'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.relation',search_for.relation,q['rel'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_relation',search_for.relation,q['rel'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.coverage',search_for.coverage,q['cov'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_coverage',search_for.coverage,q['cov'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.rights',search_for.rights,q['cr'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.rights_all',search_for.rights,q['cr'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.comment',search_for.comment,q['co'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_comment',search_for.comment,q['co'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.abstract',search_for.abstract,q['ab'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.notes_abstract',search_for.abstract,q['ab'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
- st=Dbi_search_string.new('metadata.filename',search_for.filename,q['fns'],cse).string
+ st=DBI_SearchString.new('metadata_and_text.src_filename',search_for.filename,q['fns'],cse).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
@@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000
@@offset=q['off'] if q['off']=~/\d+/ # 0
- @search_text,@search_endnotes=[],[]
- #%
- search[:text].each{|x| @search_text << "#{x} AND " }
- @search_text=@search_text.to_s.gsub!(/AND\s+$/,'')
- @search_text.gsub!(/(documents\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+documents\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)')
- search[:endnotes].each{|x| @search_endnotes << "#{x} AND " }
- @search_endnotes=@search_endnotes.to_s.gsub!(/AND\s+$/,'')
- @search_text.gsub!(/(endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)')
+ @search_text,@search_endnotes='',''
+ @search_text=search[:text].flatten.join(' AND ')
+ @search_text=@search_text.gsub(/(doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)')
+ @search_endnotes=search[:endnotes].flatten.join(' AND ')
+ @search_endnotes=@search_endnotes.gsub(/(endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)')
end
def sql_offset
@@offset
end
- def sql_limit
+ def sql_match_limit
@@limit
end
def sql_canned_search
- @offset_next=sql_offset.to_i + sql_limit.to_i
- @offset_previous=sql_offset.to_i - sql_limit.to_i
+ @offset_next=sql_offset.to_i + sql_match_limit.to_i
+ @offset_previous=sql_offset.to_i - sql_match_limit.to_i
def current
- @@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + sql_offset.to_s
+ @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + sql_offset.to_s
end
def next
- @@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + @offset_next.to_s
+ @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + @offset_next.to_s
end
def previous
- @offset_previous >= 0 ? (@@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + @offset_previous.to_s) : ''
+ @offset_previous >= 0 \
+ ? (@@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + @offset_previous.to_s)
+ : ''
end
def start
- @@canned_search_url.to_s + '&ltd=' + sql_limit.to_s + '&off=' + 0.to_s
+ @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + 0.to_s
end
self
end
- def sql_canned_search_url(ok)
- if ok
- can=sql_canned_search
- page=(sql_offset.to_i + sql_limit.to_i)/sql_limit.to_i
- case page.to_s
- when /^1$/
- %{<hr /><br /><center>
+ def pre_next(beyond_limit,img)
+ can=sql_canned_search
+ page=(sql_offset.to_i + sql_match_limit.to_i)/sql_match_limit.to_i
+ if beyond_limit
+ if page.to_s =~ /^1$/
+ %{<br /><center>
pg. #{page.to_s}
- <a href="#{can.next}">&nbsp;&nbsp;&gt;</a>
+ <a href="#{can.next}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
+ </a>
</center>}
- when /^2$/
- %{<hr /><br /><center>
- <a href="#{can.previous}">&lt;&nbsp;&nbsp;</a>
+ elsif page.to_s =~ /^2$/
+ %{<br /><center>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
pg. #{page.to_s}
- <a href="#{can.next}">&nbsp;&nbsp;&gt;</a>
+ <a href="#{can.next}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
+ </a>
</center>}
else
- %{<hr /><br /><center>
- <a href="#{can.start}">|&lt;&nbsp;&nbsp;</a>
- <a href="#{can.previous}">&lt;&nbsp;&nbsp;</a>
+ %{<br /><center>
+ <a href="#{can.start}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|&lt;&nbsp;" />
+ </a>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
+ pg. #{page.to_s}
+ <a href="#{can.next}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
+ </a>
+ </center>}
+ end
+ else
+ if page.to_s =~ /^1$/ then ''
+ elsif page.to_s =~ /^2$/
+ %{<br /><center>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
+ pg. #{page.to_s}
+ </center>}
+ else
+ %{<br /><center>
+ <a href="#{can.start}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|&lt;&nbsp;" />
+ </a>
+ <a href="#{can.previous}">
+ <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
+ </a>
pg. #{page.to_s}
- <a href="#{can.next}">&nbsp;&nbsp;&gt;</a>
</center>}
end
- else ''
end
end
def sql_select_body
limit ||=@@limit
offset ||=@@offset
- @sql_statement[:body]=%{SELECT metadata.title, metadata.subtitle, metadata.creator, metadata.filename, metadata.suffix, documents.body, documents.seg, documents.ocn, metadata.tid FROM documents, metadata WHERE #{@search_text} AND documents.metadata_tid = metadata.tid ORDER BY metadata.title, metadata.filename, documents.ocn}
+ @sql_statement[:body]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, metadata_and_text.notes_suffix, doc_objects.body, doc_objects.seg, doc_objects.ocn, metadata_and_text.tid FROM doc_objects, metadata_and_text WHERE #{@search_text} AND doc_objects.metadata_tid = metadata_and_text.tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, doc_objects.ocn}
@sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;}
select=@sql_statement[:body] + ' ' + @sql_statement[:range]
select
@@ -435,7 +499,7 @@
def sql_select_endnotes
limit ||=@@limit
offset ||=@@offset
- @sql_statement[:endnotes]= %{SELECT metadata.title, metadata.subtitle, metadata.creator, metadata.filename, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata, endnotes WHERE #{@search_endnotes} AND metadata.tid = endnotes.metadata_tid ORDER BY metadata.title, metadata.filename, endnotes.nr}
+ @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE #{@search_endnotes} AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr}
@sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;}
select=@sql_statement[:endnotes] + ' ' + @sql_statement[:range]
select
@@ -459,26 +523,29 @@
<table summary="SiSU summary" bgcolor="#ffffff" cellpadding="2" border="0">
<!-- widget sisu -->
<tr><td valign="top" width="10%">
- <p class="tiny_left"><font color="#666666" size="2">
- <a href="http://www.jus.uio.no/sisu" >
- <img border="0" src="http://localhost/sisu/_sisu/image/sisu.png" alt="SiSU" width="120" height="39" />
- </a>
- </font></p>
-</td><td valign="top" width="45%">
+ <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">
+ <tr><td align="left" bgcolor="#ffffff">
+ <br /><a href="http://sisudoc.org/" target="_top">
+ <b>SiSU</b>
+ </a>
+ <br /><a href="http://git.sisudoc.org/" target="_top">
+ git
+ </a>
+ </td></tr>
+ </table>
+</td>
+<td valign="top" width="45%">
<!-- SiSU Rights -->
<p class="tiny_left"><font color="#666666" size="2">
Generated by
- <a href="http://www.jus.uio.no/sisu" >
- SiSU</a> 0.55.3 2007-07-10 (2007w28/2)
+ SiSU 6.0.3 2014-02-06 (2014w05/4)
<br />
- <a href="http://www.jus.uio.no/sisu" >
+ <a href="http://www.sisudoc.org" >
<b>SiSU</b></a> <sup>&copy;</sup> Ralph Amissah
- 1993, current 2007.
+ 1993, current 2014.
All Rights Reserved.
<br />
- <a href="http://www.jus.uio.no/sisu" >
- SiSU</a>
- is software for document structuring, publishing and search,
+ SiSU is software for document structuring, publishing and search,
<br />
<a href="http://www.jus.uio.no/sisu" >
www.jus.uio.no/sisu
@@ -487,20 +554,33 @@
<a href="http://www.sisudoc.org" >
www.sisudoc.org
</a>
+ sources
+ <a href="http://git.sisudoc.org" >
+ git.sisudoc.org
+ </a>
<br />
<i>w3 since October 3 1993</i>
- <a href="mailto://ralph@amissah.com" >
+ <a href="mailto:ralph@amissah.com" >
ralph@amissah.com
</a>
+ <br />
+ mailing list subscription
+ <a href="http://lists.sisudoc.org/listinfo/sisu" >
+ http://lists.sisudoc.org/listinfo/sisu
+ </a>
+ <br />
+ <a href="mailto:sisu@lists.sisudoc.org" >
+ sisu@lists.sisudoc.org
+ </a>
</font></p>
</td><td valign="top" width="45%">
<p class="tiny_left"><font color="#666666" size="2">
SiSU using:
<br />Standard SiSU markup syntax,
<br />Standard SiSU meta-markup syntax, and the
- <br />Standard SiSU <u>object citation numbering</u> and system, (object/text positioning system)
+ <br />Standard SiSU <u>object citation numbering</u> and system, (object/text identifying/locating system)
<br />
- <sup>&copy;</sup> Ralph Amissah 1997, current 2007.
+ <sup>&copy;</sup> Ralph Amissah 1997, current 2014.
All Rights Reserved.
</font></p>
</td></tr>
@@ -508,7 +588,7 @@
<tr><td valign="top" width="10%">
<p class="tiny_left"><font color="#666666" size="2">
<a href="http://www.gnu.org/licenses/gpl.html">
- <img border="0" src="http://localhost/sisu/_sisu/image/gplv3_free_software.png" alt="GPLv3" width="127" height="51" />
+ .:
</a>
</font></p>
</td><td valign="top" width="45%">
@@ -532,14 +612,6 @@
</a>
software infrastructure,
with the usual GPL (or OSS) suspects.
- <br />
- Better - "performance, reliability, scalability, security &amp; total cost of ownership"
- [not to mention flexibility &amp; choice]
- <br />
- Get With the Future
- <a href="http://www.jus.uio.no/sisu/">
- Way Better!
- </a>
</font></p>
</td></tr>
</table>
@@ -552,18 +624,25 @@
@counters_txt,@counters_endn,@sql_select_body,@sql_select_endnotes='','','',''
FCGI.each_cgi do |cgi|
begin # all code goes in begin section
- @search={ :text => [],:endnotes => [] }
+ @search={ text: [], endnotes: [] }
q=CGI.new
- @db=if cgi['db'] =~/\S+/;
- @stub=/SiSU_(\S+)/.match(cgi['db'])[1]
+ @db=if cgi['db'] =~ /#{@db_name_prefix}(\S+)/
+ @stub=$1
cgi['db']
else
- @stub='sisu'
- 'SiSU_sisu'
+ @stub=@stub_default
+ @db_name_prefix + @stub
end
checked_url,checked_stats,checked_searched,checked_tip,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,selected_db='','','','','','','','',''
- if cgi['view']=~/text/; checked_index,checked_text='','checked'
- else checked_index,checked_text='checked',''
+ result_type=(cgi['view']=~/text/) \
+ ? result_type={ index: '', text: 'checked'}
+ : result_type={ index: 'checked', text: ''}
+ @@limit=if cgi['sql_match_limit'].to_s=~/2500/
+ checked_sql_limit={ l1000: '', l2500: 'checked'}
+ '2500'
+ else
+ checked_sql_limit={ l1000: 'checked', l2500: ''}
+ '1000'
end
checked_echo='checked' if cgi['echo'] =~/\S/
checked_stats='checked' if cgi['stats'] =~/\S/
@@ -591,28 +670,32 @@
checked_searched=checked_tip=checked_case=checked_sql=''
end
selected_db=case cgi['db']
- when /SiSU_pace/; '<option value="SiSU_pace">pace</option>'
- when /SiSU_sisu/; '<option value="SiSU_sisu">sisu</option>'
+ when /SiSUv6a_manual/ then '<option value="SiSUv6a_manual">manual</option>'
+ when /SiSUv6a_sisu/ then '<option value="SiSUv6a_sisu">sisu</option>'
end
db_name='sisu_sqlite.db'
db_sqlite=case cgi['db']
- when /SiSU_pace/; "/home/ralph/sisu_www/pace/sisu_sqlite.db"
- when /SiSU_sisu/; "/home/ralph/sisu_www/sisu/sisu_sqlite.db"
+ when /SiSUv6a_manual/ then "/srv/www/manual/#{db_name}"
+ when /SiSUv6a_sisu/ then "/srv/www/sisu/#{db_name}"
+ else '/srv/www/manual/#{db_name}'
end
- @dbi="DBI:SQLite:#{db_sqlite}" #sqlite3 ?
+ @dbi="DBI:SQLite3:#{db_sqlite}" #sqlite3 ?
@conn=DBI.connect(@dbi)
search_field=cgi['find'] if cgi['find'] # =~/\S+/
- @search_for=Search_request.new(search_field,q) #.analyze #% search_for
+ @search_for=SearchRequest.new(search_field,q) #.analyze #% search_for
#% searches
#Canned_search.new(@base,@search_for.text1,cgi)
- if @search_for.text1=~/\S+/ or @search_for.author=~/\S+/ #and search_field =~/\S/
+ if @search_for.text1=~/\S+/ or @search_for.fulltext=~/\S+/ or @search_for.author=~/\S+/ or @search_for.topic_register=~/\S+/ #and search_field =~/\S/
s1='s1=' + CGI.escape(@search_for.text1) if @search_for.text1=~/\S/
+ ft='&ft=' + CGI.escape(@search_for.fulltext) if @search_for.fulltext=~/\S/
key='key=' + CGI.escape(@search_for.keywords) if @search_for.keywords=~/\S/
ti='&ti=' + CGI.escape(@search_for.title) if @search_for.title=~/\S/
au='&au=' + CGI.escape(@search_for.author) if @search_for.author=~/\S/
+ tr='&tr=' + CGI.escape(@search_for.topic_register) if @search_for.topic_register=~/\S/
sj='&sj=' + CGI.escape(@search_for.subject) if @search_for.subject=~/\S/
dsc='&dsc=' + CGI.escape(@search_for.description) if @search_for.description=~/\S/
pb='&pb=' + CGI.escape(@search_for.publisher) if @search_for.publisher=~/\S/
+ edt='&edt=' + CGI.escape(@search_for.editor) if @search_for.editor=~/\S/
cntr='&cntr=' + CGI.escape(@search_for.contributor) if @search_for.contributor=~/\S/
dt='&dt=' + CGI.escape(@search_for.date) if @search_for.date=~/\S/
ty='&ty=' + CGI.escape(@search_for.type) if @search_for.type=~/\S/
@@ -630,33 +713,35 @@
dta='&dta=' + CGI.escape(@search_for.date_available) if @search_for.date_available=~/\S/
dtv='&dtv=' + CGI.escape(@search_for.date_valid) if @search_for.date_valid=~/\S/
fns='&fns=' + CGI.escape(@search_for.filename) if @search_for.filename=~/\S/
- @@canned_search_url=if checked_all =~/checked/
- "#@base?#{s1}#{key}#{ti}#{au}#{sj}#{dsc}#{pb}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}&a=1"
- else "#@base?#{s1}#{key}#{ti}#{au}#{sj}#{dsc}#{pb}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}"
- end
- @canned_base_url="#@base?#{s1}&db=#{cgi['db']}"
+ @@canned_search_url=(checked_all =~/checked/) \
+ ? "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{edt}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}&a=1"
+ : "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{edt}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}"
+ mod=ft=~/\S+/ ? (ft.gsub(/ft/,'s1')) : s1
+ @canned_base_url="#{@base}?#{mod}&db=#{cgi['db']}"
if checked_case=~/\S/
- @search[:text][1]=%{documents.clean~'#{@search_for.text1}'} #s1
+ @search[:text][1]=%{doc_objects.clean~'#{@search_for.text1}'} #s1
@search[:endnotes][1]=%{endnotes.clean~'#{@search_for.text1}'} #s1
else
- @search[:text][1]=%{documents.clean~*'#{@search_for.text1}'} #s1
+ @search[:text][1]=%{doc_objects.clean~*'#{@search_for.text1}'} #s1
@search[:endnotes][1]=%{endnotes.clean~*'#{@search_for.text1}'} #s1
end
canned_note='search url:'
else
- @@canned_search_url="#@base?s1=United+Nations&db=documents&view=index"
+ @@canned_search_url="#{@base}?db=#{@db}&view=index"
canned_note='search url example:'
end
if search_field =~/\S+/
analyze_format=search_field.gsub(/\s*\n/,'; ')
elsif checked_all =~/checked/ or checked_url =~/checked/
- canned_search=@@canned_search_url.scan(/(?:s1|au|ti|fns)=[^&]+/)
+ canned_search=@@canned_search_url.scan(/(?:s1|ft|au|ti|fns|tr)=[^&]+/)
af=canned_search.join('; ')
- af.gsub!(/s1=/,'text: ')
- af.gsub!(/au=/,'author: ')
- af.gsub!(/ti=/,'title: ')
- af.gsub!(/fns=/,'filename: ')
- af.gsub!(/%2B/,' ')
+ af=af.gsub(/s1=/,'text: ').
+ gsub(/ft=/,'fulltxt: ').
+ gsub(/au=/,'author: ').
+ gsub(/ti=/,'title: ').
+ gsub(/fns=/,'filename: ').
+ gsub(/tr=/,'topic_register: ').
+ gsub(/%2B/,' ')
analyze_format=af
st=af.split(/\s*;\s*/)
search_field=st.join("\n")
@@ -664,232 +749,292 @@
green=%{<font size="2" color="#004000">}
canned_search_url_txt=CGI.escapeHTML(@@canned_search_url)
the_can=%{<font size="2" color="#666666">#{canned_note} <a href="#{@@canned_search_url}">#{canned_search_url_txt}</a></font><br />}
- p_text=p_keywords=p_title=p_author=p_subject=p_description=p_publisher=p_contributor=p_date=p_type=p_format=p_identifier=p_source=p_language=p_relation=p_coverage=p_rights=p_comment=p_abstract=p_subject=p_filename=''
+ p_text=p_fulltext=p_keywords=p_title=p_author=p_topic_register=p_subject=p_description=p_publisher=p_editor=p_contributor=p_date=p_type=p_format=p_identifier=p_source=p_language=p_relation=p_coverage=p_rights=p_comment=p_abstract=p_filename=''
+ p_filename=%{filename: #{green}#{@search_for.filename}</font><br />} if @search_for.filename =~/\S+/
p_text=%{text: #{green}#{@search_for.text1}</font><br />} if @search_for.text1 =~/\S+/
- p_keywords=%{keywords: #{green}#{@search_for.keywords}</font><br />} if @search_for.keywords =~/\S+/
+ p_fulltext=%{fulltxt: #{green}#{@search_for.fulltext}</font><br />} if @search_for.fulltext =~/\S+/
p_title=%{title: #{green}#{@search_for.title}</font><br />} if @search_for.title =~/\S+/
p_author=%{author: #{green}#{@search_for.author}</font><br />} if @search_for.author =~/\S+/
- p_subject=%{subject: #{green}#{@search_for.subject}</font><br />} if @search_for.subject =~/\S+/
- p_description=%{description: #{green}#{@search_for.description}</font><br />} if @search_for.description =~/\S+/
- p_publisher=%{publisher: #{green}#{@search_for.publisher}</font><br />} if @search_for.publisher =~/\S+/
+ p_editor=%{editor: #{green}#{@search_for.editor}</font><br />} if @search_for.editor=~/\S+/
p_contributor=%{contributor: #{green}#{@search_for.contributor}</font><br />} if @search_for.contributor =~/\S+/
p_date=%{date: #{green}#{@search_for.date}</font><br />} if @search_for.date =~/\S+/
+ p_rights=%{rights: #{green}#{@search_for.rights}</font><br />} if @search_for.rights =~/\S+/
+ p_topic_register=%{topic_register: #{green}#{@search_for.topic_register}</font><br />} if @search_for.topic_register =~/\S+/
+ p_subject=%{subject: #{green}#{@search_for.subject}</font><br />} if @search_for.subject =~/\S+/
+ p_keywords=%{keywords: #{green}#{@search_for.keywords}</font><br />} if @search_for.keywords =~/\S+/
+ p_identifier=%{identifier: #{green}#{@search_for.identifier}</font><br />} if @search_for.identifier =~/\S+/
p_type=%{type: #{green}#{@search_for.type}</font><br />} if @search_for.type =~/\S+/
p_format=%{format: #{green}#{@search_for.format}</font><br />} if @search_for.format =~/\S+/
- p_identifier=%{identifier: #{green}#{@search_for.identifier}</font><br />} if @search_for.identifier =~/\S+/
- p_source=%{source: #{green}#{@search_for.source}</font><br />} if @search_for.source =~/\S+/
- p_language=%{language: #{green}#{@search_for.language}</font><br />} if @search_for.language =~/\S+/
p_relation=%{relation: #{green}#{@search_for.relation}</font><br />} if @search_for.relation =~/\S+/
p_coverage=%{coverage: #{green}#{@search_for.coverage}</font><br />} if @search_for.coverage =~/\S+/
- p_rights=%{rights: #{green}#{@search_for.rights}</font><br />} if @search_for.rights =~/\S+/
- p_comment=%{comment: #{green}#{@search_for.comment}</font><br />} if @search_for.comment =~/\S+/
+ p_description=%{description: #{green}#{@search_for.description}</font><br />} if @search_for.description =~/\S+/
p_abstract=%{abstract: #{green}#{@search_for.abstract}</font><br />} if @search_for.abstract =~/\S+/
- p_filename=%{filename: #{green}#{@search_for.filename}</font><br />} if @search_for.filename =~/\S+/
+ p_comment=%{comment: #{green}#{@search_for.comment}</font><br />} if @search_for.comment =~/\S+/
+ p_publisher=%{publisher: #{green}#{@search_for.publisher}</font><br />} if @search_for.publisher =~/\S+/
+ p_source=%{source: #{green}#{@search_for.source}</font><br />} if @search_for.source =~/\S+/
+ p_language=%{language: #{green}#{@search_for.language}</font><br />} if @search_for.language =~/\S+/
search_note=<<-WOK
<font size="2" color="#666666">
- <b>database:</b> #{green}#@db</font>; <b>selected view:</b> #{green}#{cgi['view']}</font>
+ <b>database:</b> #{green}#{@db}</font>; <b>selected view:</b> #{green}#{cgi['view']}</font>
<b>search string:</b> "#{green}#{analyze_format}</font>"<br />
- #{p_text} #{p_keywords} #{p_title} #{p_author} #{p_subject} #{p_description} #{p_publisher} #{p_contributor} #{p_date} #{p_type} #{p_format} #{p_identifier} #{p_source} #{p_language} #{p_relation} #{p_coverage} #{p_rights} #{p_comment} #{p_abstract} #{p_filename}
+ #{p_text} #{p_fulltext} #{p_keywords} #{p_title} #{p_author} #{p_topic_register} #{p_subject} #{p_description} #{p_publisher} #{p_editor} #{p_contributor} #{p_date} #{p_type} #{p_format} #{p_identifier} #{p_source} #{p_language} #{p_relation} #{p_coverage} #{p_rights} #{p_comment} #{p_abstract} #{p_filename}
</font>
WOK
- #eg = %{canned search e.g.:<br /> <a href="#{url}">#{url}</a><br />find: #{analyze}<br />database: #{database}}
- #dbi_canning
- @header=Form.new(@base,search_field,selected_db,checked_index,checked_text,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can).submission_form #% form
- unless q['s1'] =~/\S/ or q['au'] =~/\S/ or @search[:text][1] =~/\S/
- print "Content-type: text/html\n\n"
- puts (@header+@tail)
- else #% searches
- s1=if @search_for.text1 =~/\S/
- @search_for.text1
- else 'Unavailable'
+ #eg = %{canned search e.g.:<br /> <a href="#{url}">#{url}</a><br />find: #{analyze}<br />database: #{database}}
+ #% dbi_canning
+ @header=Form.new(@base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can).submission_form #% form
+ unless q['s1'] =~/\S/ or q['au'] =~/\S/ or @search[:text][1] =~/\S/
+ print "Content-type: text/html\n\n"
+ puts (@header+@tail)
+ else #% searches
+ s1=(@search_for.text1 =~/\S/) \
+ ? @search_for.text1
+ : 'Unavailable'
+ if checked_case=~/\S/
+ @search[:text]<<%{doc_objects.clean~'#{CGI.unescape(s1)}'}
+ @search[:endnotes]<<%{endnotes.clean~'#{CGI.unescape(s1)}'}
+ else
+ @search[:text]<<%{doc_objects.clean~*'#{CGI.unescape(s1)}'}
+ @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'}
+ end
+ #% dbi_request
+ dbi_statement=DBI_SearchStatement.new(@conn,@search_for,q,checked_case)
+ @text_search_flag=false
+ @text_search_flag=dbi_statement.text_search_flag
+ s_contents=dbi_statement.contents
+ s_endnotes=dbi_statement.endnotes
+ @body_main,@endnotes='',''
+ @search_regx=nil
+ oldtid=0
+ if @text_search_flag
+ if checked_sql =~/\S/
+ sql_select_body=dbi_statement.sql_select_body_format
+ sql_select_endnotes=dbi_statement.sql_select_endnotes_format
+ else sql_select_body,sql_select_endnotes='',''
end
- if checked_case=~/\S/
- @search[:text]<<%{documents.clean~'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~'#{CGI.unescape(s1)}'}
+ @body_main << '<p><hr><br /><b>Main Text:</b><br />' << sql_select_body
+ @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes
+ else
+ end
+ @hostpath="#{@hosturl_files}/#{@stub}"
+ def path_manifest(fn,ln=nil)
+ case @output_dir_structure_by
+ when 'filename'
+ @lingual =='mono' \
+ ? "#{@hostpath}/#{fn}/sisu_manifest.html"
+ : "#{@hostpath}/#{fn}/sisu_manifest.#{ln}.html"
+ when 'filetype'
+ @lingual =='mono' \
+ ? "#{@hostpath}/manifest/#{fn}.html"
+ : "#{@hostpath}/manifest/#{fn}.#{ln}.html"
else
- @search[:text]<<%{documents.clean~*'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'}
+ "#{@hostpath}/#{ln}/manifest/#{fn}.html"
end
- #dbi_request
- dbi_statement=Dbi_search_statement.new(@conn,@search_for,q,checked_case)
- @text_search_flag=false
- @text_search_flag=dbi_statement.text_search_flag
- s_contents=dbi_statement.contents
- s_endnotes=dbi_statement.endnotes
- @body_main,@endnotes=[],[]
- @search_regx=nil
- oldtid=0
- if @text_search_flag
- if checked_sql =~/\S/
- sql_select_body=dbi_statement.sql_select_body_format
- sql_select_endnotes=dbi_statement.sql_select_endnotes_format
- else sql_select_body,sql_select_endnotes='',''
- end
- @body_main << '<p><hr><br /><b>Main Text:</b><br />' << sql_select_body
- @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes
+ end
+ def path_html_seg(fn,ln=nil)
+ case @output_dir_structure_by
+ when 'filename'
+ "#{@hostpath}/#{fn}"
+ when 'filetype'
+ "#{@hostpath}/html/#{fn}"
else
+ "#{@hostpath}/#{ln}/html/#{fn}"
end
- #text_objects_body
- s_contents.each do |c| #% text body
- location=c['filename'][/(.+?)\.(?:_?sst|ssm)$/,1]
- file_suffix=c['filename'][/.+?\.(_?sst|ssm)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location.gsub!(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
- else ''
- end
- #metadata_found_body
- if c['tid'].to_i != oldtid.to_i
- ti=if c['subtitle'] =~/\S+/; "#{c['title']} - #{c['subtitle']}"
- else c['title']
- end
- can_txt_srch=if cgi['view']=~/index/; %{<a href="#{@canned_base_url}&fns=#{c['filename']}&view=text"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- else %{<a href="#{@canned_base_url}&fns=#{c['filename']}&view=index"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- end
- title=%{<span style="background-color: #@color_heading"><a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> by #{c['creator']} #{can_txt_srch}<a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html"></a> <a href="#@hosturl_files/#@stub/#{location}/portrait#{lang}.pdf"><img border="0" width="15" height="18" src="#@image_src/b_pdf.png" alt="pdf portrait"></a> <a href="#@hosturl_files/#@stub/#{location}/landscape#{lang}.pdf"><img border="0" width="18" height="15" src="#@image_src/b_pdf.png" alt="pdf landscape"></a> <a href="#@hosturl_files/#@stub/#{location}/opendocument#{lang}.odt"><img border="0" width="15" height="15" src="#@image_src/b_odf.png" alt="odf"></a> <a href="#@hosturl_files/#@stub/#{location}/sisu_manifest#{lang}.html"><img border="0" width="15" height="15" src="#@image_src/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/ #hmm watch file_suffix
- if @text_search_flag; title='<br /><hr>'+title
- else title='<br />'+title
- end
- @counter_txt_doc+=1
- oldtid=c['tid'].to_i
- else title=''
- end
- if @text_search_flag
- if cgi['view']=~/text/ #% txt body
- text=if c['suffix'] !~/1/ #seg
- if @search_for.text1 =~/\S+/ or q['s1'] =~/\S+/ #% only this branch is working !!
- unescaped_search=if @search_for.text1 =~/\S+/; CGI.unescape(@search_for.text1)
- elsif q['s1'] =~/\S+/; CGI.unescape(q['s1'])
- else nil
- end
- @search_regx=if unescaped_search #check
- search_regex=[]
- build=unescaped_search.scan(/\S+/).each do |g|
- if g.to_s =~/(AND|OR)/
- search_regex << '|'
- else search_regex << %{#{g.to_s}}
- end
- end
- search_regex=search_regex.join(' ')
- search_regex=search_regex.gsub(/\s*\|\s*/,'|')
- Regexp.new(search_regex, Regexp::IGNORECASE)
- else nil
- end
+ end
+ def path_toc(fn,ln=nil)
+ if @output_dir_structure_by =='filename' \
+ or @output_dir_structure_by =='filetype'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/toc.html"
+ : "#{path_html_seg(fn,ln)}/toc.#{ln}.html"
+ else
+ "#{path_html_seg(fn,ln)}/toc.html"
+ end
+ end
+ def path_filename(fn,seg,ln=nil)
+ if @output_dir_structure_by =='filename' \
+ or @output_dir_structure_by =='filetype'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/#{seg}.html"
+ : "#{path_html_seg(fn,ln)}/#{seg}.#{ln}.html"
+ else
+ "#{path_html_seg(fn,ln)}/#{seg}.html"
+ end
+ end
+ def path_endnotes(fn,ln=nil)
+ if @output_dir_structure_by =='filename' \
+ or @output_dir_structure_by =='filetype'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/endnotes.html"
+ : "#{path_html_seg(fn,ln)}/endnotes.#{ln}.html"
+ else
+ "#{path_html_seg(fn,ln)}/endnotes.html"
+ end
+ end
+ def path_html_doc(fn,ln=nil)
+ case @output_dir_structure_by
+ when 'filename'
+ @lingual =='mono' \
+ ? "#{path_html_seg(fn,ln)}/scroll.html"
+ : "#{path_html_seg(fn,ln)}/scroll.#{ln}.html"
+ when 'filetype'
+ @lingual =='mono' \
+ ? "#{@hostpath}/html/#{fn}.html"
+ : "#{@hostpath}/html/#{fn}.#{ln}.html"
+ else
+ "#{@hostpath}/#{ln}/html/#{fn}.html"
+ end
+ end
+ #% text_objects_body
+ s_contents.each do |c| #% text body
+ location=c['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1]
+ file_suffix=c['src_filename'][/.+?\.(ssm\.sst|sst)$/,1]
+ lang=if location =~ /\S+?~(\S\S\S?)$/
+ l=location[/\S+?~(\S\S\S?)$/,1]
+ location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
+ l=".#{l}"
+ else ''
+ end
+ #% metadata_found_body
+ if c['tid'].to_i != oldtid.to_i
+ ti=c['title']
+ can_txt_srch=(cgi['view']=~/index/) \
+ ? %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ : %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ title=%{<span style="background-color: #{@color_heading}"><a href="#{path_toc(location,c['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> [#{c['language_document_char']}] by #{c['creator_author']} <a href="#{path_manifest(location,c['language_document_char'])}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a> #{can_txt_srch}<br />} if file_suffix=~/s/ #hmm watch file_suffix
+ title=@text_search_flag \
+ ? '<br /><hr>'+title
+ : '<br />'+title
+ @counter_txt_doc+=1
+ oldtid=c['tid'].to_i
+ else title=''
+ end
+ if @text_search_flag
+ if cgi['view']=~/text/ \
+ or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt body
+ text=if c['suffix'] !~/1/ #seg
+ if @search_for.text1 =~/\S+/ \
+ or q['s1'] =~/\S+/ #% only this branch is working !!
+ unescaped_search=if @search_for.text1 =~/\S+/
+ CGI.unescape(@search_for.text1)
+ elsif q['s1'] =~/\S+/
+ CGI.unescape(q['s1'])
else nil
end
- matched_para=if (@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/)
- matched=c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#@search_regx)/mi,%{<span style="background-color: #@color_match">\\1</span>})
- else c['body']
- end
- %{<hr><p><font size="2">ocn <b><a href="#@hosturl_files/#@stub/#{location}/#{c['seg']}#{lang}.html##{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
- elsif c['suffix'] =~/1/ #doc
- %{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}}
- end
- @counter_txt_ocn+=1
- output=if c['seg'] =~/\S+/; title+text
- else text
- end
- elsif cgi['view']=~/index/ #% idx body
- if c['suffix'] !~/1/ #seg
- index=%{<a href="#@hosturl_files/#@stub/#{location}/#{c['seg']}#{lang}.html##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
- elsif c['suffix'] =~/1/ #doc
- index=%{<a href="#@hosturl_files/#@stub/#{location}/doc#{lang}.html##{c['ocn']}">#{c['ocn']}</a>, }
- end
- if c['seg'] =~/\S+/
- if @text_search_flag
- @counter_txt_ocn+=1
- output=title+index
- end
- else
- @counter_txt_ocn+=1
- output=unless c['suffix'] =~/1/; title+index
- else %{#{title}#{c['ocn'].sort}, }
+ @search_regx=if unescaped_search #check
+ search_regex=[]
+ build=unescaped_search.scan(/\S+/).each do |g|
+ (g.to_s =~/(AND|OR)/) \
+ ? (search_regex << '|')
+ : (search_regex << %{#{g.to_s}})
+ end
+ search_regex=search_regex.join(' ')
+ search_regex=search_regex.gsub(/\s*\|\s*/,'|')
+ Regexp.new(search_regex, Regexp::IGNORECASE)
+ else nil
end
+ else nil
end
+ matched_para=(@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/) \
+ ? (c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
+ : c['body']
+ %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
+ elsif c['suffix'] =~/1/ #doc
+ %{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}}
end
- else output=title
- end
- @counters_txt=if @counter_txt_doc > 0
- if checked_stats =~/\S/
- @@lt_t=if @counter_txt_ocn == dbi_statement.sql_limit.to_i
- over='over'
- true
- else
- over=''
- false
+ @counter_txt_ocn+=1
+ output=title+text
+ else #elsif cgi['view']=~/index/ #% idx body
+ if c['suffix'] !~/1/ #seg
+ index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
+ elsif c['suffix'] =~/1/ #doc #FIX
+ index=%{<a href="#{path_html_doc(location,c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, }
+ end
+ if c['seg'] =~/\S+/
+ if @text_search_flag
+ @counter_txt_ocn+=1
+ output=title+index
end
- %{<hr /><font size="2" color="#666666">Found in the main body of #@counter_txt_doc documents, and at #{over} #@counter_txt_ocn locations within.</font><br />}
- else ''
+ else
+ @counter_txt_ocn+=1
+ output=c['suffix'] !~/1/ \
+ ? title+index
+ : %{#{title}#{c['ocn'].sort}, }
end
- else ''
end
- @body_main << output #+ details
+ else output=title
end
- #text_objects_endnote
- oldtid = 0
- s_endnotes.each do |e| #% endnotes
- location=e['filename'][/(.+?)\.(?:_?sst|ssm)$/,1]
- file_suffix=e['filename'][/.+?\.(_?sst|ssm)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location.gsub!(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
+ @counters_txt=if @counter_txt_doc > 0
+ if checked_stats =~/\S/
+ @@lt_t=(@counter_txt_ocn==dbi_statement.sql_match_limit.to_i) ? true : false
+ start=(@@offset.to_i+1).to_s
+ range=(@@offset.to_i+@counter_txt_ocn.to_i).to_s
+ %{<hr /><font size="2" color="#666666">Found #{@counter_txt_ocn} times in the main body of #{@counter_txt_doc} documents [ matches #{start} to #{range} ]</font><br />}
else ''
end
+ else ''
+ end
+ @body_main << output #+ details
+ end
+ #text_objects_endnote
+ oldtid = 0
+ s_endnotes.each do |e| #% endnotes
+ location=e['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1]
+ file_suffix=e['src_filename'][/.+?\.(ssm\.sst|sst)$/,1]
+ lang=if location =~ /\S+?~(\S\S\S?)$/
+ l=location[/\S+?~(\S\S\S?)$/,1]
+ location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
+ l=".#{l}"
+ else ''
+ end
#metadata_found_endnotes
- if @text_search_flag
- if e['metadata_tid'].to_i != oldtid.to_i
- ti=if e['subtitle'] =~/\S+/; "#{e['title']} - #{e['subtitle']}"
- else e['title']
- end
- can_txt_srch=if cgi['view']=~/index/; %{<a href="#{@canned_base_url}&fns=#{e['filename']}&view=text"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- else %{<a href="#{@canned_base_url}&fns=#{e['filename']}&view=index"><img border="0" width="12" height="12" src="#@image_src/bullet_red.png" alt="red bullet"></a> }
- end
- title=%{<br /><hr><span style="background-color: #@color_heading"><a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> by #{e['creator']} #{can_txt_srch}<a href="#@hosturl_files/#@stub/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#@image_src/b_toc.png" alt="toc html"></a> <a href="#@hosturl_files/#@stub/#{location}/portrait.pdf"><img border="0" width="15" height="18" src="#@image_src/b_pdf.png" alt="pdf portrait"></a><a href="#@hosturl_files/#@stub/#{location}/landscape.pdf"><img border="0" width="18" height="15" src="#@image_src/b_pdf.png" alt="pdf landscape"></a> <a href="#@hosturl_files/#@stub/#{location}/opendocument#{lang}.odt"><img border="0" width="15" height="15" src="#@image_src/b_odf.png" alt="odf"></a> <a href="#@hosturl_files/#@stub/#{location}/sisu_manifest#{lang}.html"><img border="0" width="15" height="15" src="#@image_src/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/
- @counter_endn_doc+=1
- oldtid=e['metadata_tid'].to_i
- else title = ''
- end
- if cgi['view']=~/text/ #% txt endnotes
- @counter_endn_ocn+=1
- matched_endnote=if (@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/)
- matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#@search_regx)/mi,%{<span style="background-color: #@color_match">\\1</span>})
- else e['body']
- end
- output=%{#{title}<hr><font size="2">note <b><a href="#@hosturl_files/#@stub/#{location}/endnotes.html#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#@hosturl_files/#@stub/#{location}/doc.html##{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
- elsif cgi['view']=~/index/ #% idx endnotes
- @counter_endn_ocn+=1
- output=%{#{title}<a href="#@hosturl_files/#@stub/#{location}/endnotes.html#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#@hosturl_files/#@stub/#{location}/doc.html##{e['ocn']}">#{e['ocn']}</a>], }
- end
- @counters_endn=if @counter_endn_doc > 0
- if checked_stats =~/\S/
- @@lt_e=if @counter_endn_ocn == dbi_statement.sql_limit.to_i
- over='over'
- true
- else
- over=''
- false
- end
- %{<font size="2" color="#666666">Found in the endnotes of #@counter_endn_doc documents, and at #{over} #@counter_endn_ocn locations within.</font><br />}
- else ''
- end
+ if @text_search_flag
+ if e['metadata_tid'].to_i != oldtid.to_i
+ ti=e['title']
+ can_txt_srch=(cgi['view']=~/index/) \
+ ? %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ : %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
+ title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> [#{e['language_document_char']}] by #{e['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a>&nbsp;<a href="#{path_manifest(location,e['language_document_char'])}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/
+ @counter_endn_doc+=1
+ oldtid=e['metadata_tid'].to_i
+ else title = ''
+ end
+ if cgi['view']=~/text/ \
+ or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt endnotes
+ @counter_endn_ocn+=1
+ matched_endnote=(@search_regx.to_s.is_a?(String) \
+ && @search_regx.to_s=~/\S\S+/) \
+ ? (matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
+ : e['body']
+ output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
+ else #elsif cgi['view']=~/index/ #doc #FIX #% idx endnotes
+ @counter_endn_ocn+=1
+ output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>], }
+ end
+ @counters_endn=if @counter_endn_doc > 0
+ if checked_stats =~/\S/
+ @@lt_e=@counter_endn_ocn==dbi_statement.sql_match_limit.to_i \
+ ? true
+ : false
+ start=(@@offset.to_i+1).to_s
+ range=(@@offset.to_i+@counter_endn_ocn.to_i).to_s
+ %{<font size="2" color="#666666">Found #{@counter_endn_ocn} times in the endnotes of #{@counter_endn_doc} documents [ matches #{start} to #{range} ]</font><br />}
+ else ''
end
- @endnotes << output #+ details
- else @endnotes=[] #does not take out yet
end
+ @endnotes << output #+ details
+ else @endnotes='' #does not take out yet
end
- offset=dbi_statement.sql_offset.to_s
- limit=dbi_statement.sql_limit.to_s
- @@lt_t ||=false; @@lt_e ||=false
- canned=if (@@lt_t or @@lt_e)
- dbi_statement.sql_canned_search_url(true).to_s
- else
- dbi_statement.sql_canned_search_url(false).to_s
- end
- limit=dbi_statement.sql_limit.to_s
- cgi.out{@header + @counters_txt + @counters_endn + @body_main.join + @endnotes.join + canned + @tail} #% print cgi_output_header+counters+body+endnotes
end
+ offset=dbi_statement.sql_offset.to_s
+ limit=dbi_statement.sql_match_limit.to_s
+ @@lt_t ||=false; @@lt_e ||=false
+ canned=(@@lt_t or @@lt_e) \
+ ? dbi_statement.pre_next(true,@image_src).to_s
+ : dbi_statement.pre_next(false,@image_src).to_s
+ limit=dbi_statement.sql_match_limit.to_s
+ cgi.out{@header.force_encoding("UTF-8") + @counters_txt.force_encoding("UTF-8") + @counters_endn.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @body_main.force_encoding("UTF-8") + @endnotes.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @tail.force_encoding("UTF-8")} #% print cgi_output_header+counters+body+endnotes
+ end
rescue Exception => e
s='<pre>' + CGI::escapeHTML(e.backtrace.reverse.join("\n"))
s << CGI::escapeHTML(e.message) + '</pre>'
diff --git a/data/sisu/conf/nginx/sites-available/sisu_search b/data/sisu/conf/nginx/sites-available/sisu_search
new file mode 100644
index 00000000..0eb9f8ae
--- /dev/null
+++ b/data/sisu/conf/nginx/sites-available/sisu_search
@@ -0,0 +1,83 @@
+# You may add here your
+# server {
+# ...
+# }
+# statements for each of your virtual hosts to this file
+
+##
+# You should look at the following URL's in order to grasp a solid understanding
+# of Nginx configuration files in order to fully unleash the power of Nginx.
+# http://wiki.nginx.org/Pitfalls
+# http://wiki.nginx.org/QuickStart
+# http://wiki.nginx.org/Configuration
+#
+# Generally, you will want to move this file somewhere, and start with a clean
+# file but keep this around for reference. Or just disable in sites-enabled.
+#
+# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
+##
+
+server {
+ listen 80 default_server;
+ listen [::]:80 default_server ipv6only=on;
+
+ root /srv/www;
+ #root /usr/share/nginx/html;
+ index index.html toc.html;
+
+ #cat /usr/share/doc/fcgiwrap/examples/nginx.conf
+ # Include this file on your nginx.conf to support debian cgi-bin scripts using
+ # fcgiwrap
+ location /cgi-bin/ {
+ # Disable gzip (it makes scripts feel slower since they have to complete
+ # before getting gzipped)
+ gzip off;
+
+ # Set the root to /usr/lib (inside this location this means that we are
+ # giving access to the files under /usr/lib/cgi-bin)
+ root /usr/lib;
+
+ # Fastcgi socket
+ fastcgi_pass unix:/var/run/fcgiwrap.socket;
+
+ # Fastcgi parameters, include the standard ones
+ include /etc/nginx/fastcgi_params;
+
+ # Adjust non standard parameters (SCRIPT_FILENAME)
+ fastcgi_param SCRIPT_FILENAME /usr/lib$fastcgi_script_name;
+ }
+
+ # Make site accessible from http://localhost/
+ server_name localhost;
+
+ #location / {
+ # # First attempt to serve request as file, then
+ # # as directory, then fall back to displaying a 404.
+ # try_files $uri $uri/ =404;
+ # # Uncomment to enable naxsi on this location
+ # # include /etc/nginx/naxsi.rules
+ #}
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ #error_page 500 502 503 504 /50x.html;
+ #location = /50x.html {
+ # root /usr/share/nginx/html;
+ #}
+}
+
+# another virtual host using mix of IP-, name-, and port-based configuration
+#
+#server {
+# listen 8000;
+# listen somename:8080;
+# server_name somename alias another.alias;
+# root html;
+# index index.html index.htm;
+#
+# location / {
+# try_files $uri $uri/ =404;
+# }
+#}
diff --git a/data/sisu/conf/nginx/sites-available/sisu_search_srv b/data/sisu/conf/nginx/sites-available/sisu_search_srv
new file mode 100644
index 00000000..41585505
--- /dev/null
+++ b/data/sisu/conf/nginx/sites-available/sisu_search_srv
@@ -0,0 +1,84 @@
+# You may add here your
+# server {
+# ...
+# }
+# statements for each of your virtual hosts to this file
+
+##
+# You should look at the following URL's in order to grasp a solid understanding
+# of Nginx configuration files in order to fully unleash the power of Nginx.
+# http://wiki.nginx.org/Pitfalls
+# http://wiki.nginx.org/QuickStart
+# http://wiki.nginx.org/Configuration
+#
+# Generally, you will want to move this file somewhere, and start with a clean
+# file but keep this around for reference. Or just disable in sites-enabled.
+#
+# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
+##
+
+server {
+ listen 80 default_server;
+ listen [::]:80 default_server ipv6only=on;
+
+ root /srv/www;
+ #root /usr/share/nginx/html;
+ index index.html toc.html;
+
+ #cat /usr/share/doc/fcgiwrap/examples/nginx.conf
+ # Include this file on your nginx.conf to support debian cgi-bin scripts using
+ # fcgiwrap
+ location /cgi/ {
+ # Disable gzip (it makes scripts feel slower since they have to complete
+ # before getting gzipped)
+ gzip off;
+
+ # Set the root to /srv (inside this location this means that we are
+ # giving access to the files under /srv/cgi)
+ root /srv;
+
+ # Fastcgi socket
+ fastcgi_pass unix:/var/run/fcgiwrap.socket;
+
+ # Fastcgi parameters, include the standard ones
+ include /etc/nginx/fastcgi_params;
+
+ # Adjust non standard parameters (SCRIPT_FILENAME)
+ fastcgi_param SCRIPT_FILENAME /srv$fastcgi_script_name;
+ #fastcgi_param SCRIPT_FILENAME /usr/lib$fastcgi_script_name;
+ }
+
+ # Make site accessible from http://localhost/
+ server_name localhost;
+
+ #location / {
+ # # First attempt to serve request as file, then
+ # # as directory, then fall back to displaying a 404.
+ # try_files $uri $uri/ =404;
+ # # Uncomment to enable naxsi on this location
+ # # include /etc/nginx/naxsi.rules
+ #}
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ #error_page 500 502 503 504 /50x.html;
+ #location = /50x.html {
+ # root /usr/share/nginx/html;
+ #}
+}
+
+# another virtual host using mix of IP-, name-, and port-based configuration
+#
+#server {
+# listen 8000;
+# listen somename:8080;
+# server_name somename alias another.alias;
+# root html;
+# index index.html index.htm;
+#
+# location / {
+# try_files $uri $uri/ =404;
+# }
+#}
diff --git a/data/sisu/v5/v/version.yml b/data/sisu/v5/v/version.yml
index e3f29dbc..874b14b3 100644
--- a/data/sisu/v5/v/version.yml
+++ b/data/sisu/v5/v/version.yml
@@ -1,5 +1,5 @@
---
:project: SiSU
-:version: 5.3.2
-:date_stamp: 2014w05/3
-:date: "2014-02-05"
+:version: 5.3.3
+:date_stamp: 2014w05/6
+:date: "2014-02-08"
diff --git a/data/sisu/v6/v/version.yml b/data/sisu/v6/v/version.yml
index 0f55d28e..5cac813b 100644
--- a/data/sisu/v6/v/version.yml
+++ b/data/sisu/v6/v/version.yml
@@ -1,5 +1,5 @@
---
:project: SiSU
-:version: 6.0.2
-:date_stamp: 2014w05/3
-:date: "2014-02-05"
+:version: 6.0.3
+:date_stamp: 2014w05/6
+:date: "2014-02-08"
diff --git a/lib/sisu/v5/cgi_pgsql.rb b/lib/sisu/v5/cgi_pgsql.rb
index 4281d9d3..53c73c8d 100644
--- a/lib/sisu/v5/cgi_pgsql.rb
+++ b/lib/sisu/v5/cgi_pgsql.rb
@@ -93,13 +93,13 @@ module SiSU_CGI_PgSQL
@name_of[:db]=@env.path.stub_pwd #'sisu' #breaks if not present
false
end
- @name_of[:host_url_cgi]="#{@env.url.webserv_base_cgi(opt)}/cgi-bin"
- @name_of[:host_url_docs]=@env.url.webserv_files_from_db(opt)
- @name_of[:cgi_script]=@env.url.cgi_sample_search_form_name(opt)
+ @name_of[:host_url_cgi]=%q{http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}}
+ @name_of[:host_url_docs]=%q{http://#{ENV['HTTP_HOST']}}
+ @name_of[:cgi_script]=%q{#{ENV['SCRIPT_NAME']}}
@name_of[:user]=@db.psql.user(opt)
- @cgi_file_name=@name_of[:cgi_script]
- @image_src="#{@env.url.webserv_base_cgi(opt)}/_sisu/image_sys"
+ @image_src=%q{http://#{ENV['HTTP_HOST']}/_sisu/image_sys}
@common=SiSU_CGI_SQL::CGI_Common.new(@webserv,opt,@image_src,@env)
+ @cgi_file_name=@env.url.cgi_sample_search_form_name(opt)
end
def pgsql
serve=[]
@@ -200,15 +200,15 @@ module SiSU_CGI_PgSQL
puts 'cgi, fcgi or dbi NOT FOUND (LoadError)'
end
@stub_default='#{@name_of[:db]}'
- @image_src='#{@image_src}'
- @hosturl_cgi='#{@name_of[:host_url_cgi]}'
- @hosturl_files='#{@name_of[:host_url_docs]}'
+ @image_src="#{@image_src}"
+ @hosturl_cgi="#{@name_of[:host_url_cgi]}"
+ @hosturl_files="#{@name_of[:host_url_docs]}"
@output_dir_structure_by='#{@name_of[:output_dir_structure]}'
@lingual='#{@name_of[:lingual]}'
@port='#{@db.psql.port}'
@db_name_prefix='#{Db[:name_prefix]}'
@user='#{@name_of[:user]}' # check user name for access to pg database: e.g. www-data or '#{@env.user}'
- @base='#{@name_of[:host_url_cgi]}/#{@name_of[:cgi_script]}'
+ @base="#{@name_of[:host_url_cgi]}#{@name_of[:cgi_script]}"
WOK_SQL
end
def search_statement
diff --git a/lib/sisu/v5/cgi_sql_common.rb b/lib/sisu/v5/cgi_sql_common.rb
index 42c648e0..c760a9db 100644
--- a/lib/sisu/v5/cgi_sql_common.rb
+++ b/lib/sisu/v5/cgi_sql_common.rb
@@ -973,7 +973,7 @@ module SiSU_CGI_SQL
matched_para=(@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/) \
? (c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
: c['body']
- %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
+ %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
elsif c['suffix'] =~/1/ #doc
%{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}}
end
@@ -981,9 +981,9 @@ module SiSU_CGI_SQL
output=title+text
else #elsif cgi['view']=~/index/ #% idx body
if c['suffix'] !~/1/ #seg
- index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
+ index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
elsif c['suffix'] =~/1/ #doc #FIX
- index=%{<a href="#{path_html_doc(location,c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a>, }
+ index=%{<a href="#{path_html_doc(location,c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, }
end
if c['seg'] =~/\S+/
if @text_search_flag
@@ -1041,10 +1041,10 @@ module SiSU_CGI_SQL
&& @search_regx.to_s=~/\S\S+/) \
? (matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
: e['body']
- output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}##{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
+ output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
else #elsif cgi['view']=~/index/ #doc #FIX #% idx endnotes
@counter_endn_ocn+=1
- output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}##{e['ocn']}">#{e['ocn']}</a>], }
+ output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>], }
end
@counters_endn=if @counter_endn_doc > 0
if checked_stats =~/\S/
diff --git a/lib/sisu/v5/cgi_sqlite.rb b/lib/sisu/v5/cgi_sqlite.rb
index c4222ecb..4351a64c 100644
--- a/lib/sisu/v5/cgi_sqlite.rb
+++ b/lib/sisu/v5/cgi_sqlite.rb
@@ -79,6 +79,10 @@ module SiSU_CGI_SQLite
opt.lingual.to_s
else 'multi'
end
+ @name_of[:host_url_cgi]=%q{http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}}
+ @name_of[:host_url_docs]=%q{http://#{ENV['HTTP_HOST']}}
+ @name_of[:cgi_script]=%q{#{ENV['SCRIPT_NAME']}}
+ @image_src=%q{http://#{ENV['HTTP_HOST']}/_sisu/image_sys}
@common=SiSU_CGI_SQL::CGI_Common.new(@webserv,opt,@image_src,@env)
@cgi_file_name=@env.url.cgi_sample_search_form_name(opt)
@name_of_sqlite_db_file='sisu_sqlite.db'
@@ -173,13 +177,13 @@ module SiSU_CGI_SQLite
puts 'cgi, fcgi or dbi NOT FOUND (LoadError)'
end
@stub_default='sisu_sqlite'
- @image_src='#{@image_src}'
- @hosturl_cgi='#{@env.url.webserv_base_cgi(@opt)}/cgi-bin'
- @hosturl_files='#{@env.url.webserv_files_from_db(@opt)}'
+ @image_src="#{@image_src}"
+ @hosturl_cgi="#{@name_of[:host_url_cgi]}"
+ @hosturl_files="#{@name_of[:host_url_docs]}"
@output_dir_structure_by='#{@name_of[:output_dir_structure]}'
@lingual='#{@name_of[:lingual]}'
@db_name_prefix='#{Db[:name_prefix]}'
- @base='#{@env.url.webserv_base_cgi(@opt)}/cgi-bin/#{@env.url.cgi_sample_search_form_name(@opt)}' #fix sqlite
+ @base="#{@name_of[:host_url_cgi]}#{@name_of[:cgi_script]}"
WOK_SQL
end
def search_statement
diff --git a/lib/sisu/v5/sysenv.rb b/lib/sisu/v5/sysenv.rb
index 537e52ca..7d8a9766 100644
--- a/lib/sisu/v5/sysenv.rb
+++ b/lib/sisu/v5/sysenv.rb
@@ -215,7 +215,7 @@ module SiSU_Env
BUNDLE => false,
CONCORD_MAX => 260000,
DIGEST => 'sha256',
- WEBSERV_HOST_CGI => ' http://localhost',
+ WEBSERV_HOST_CGI => 'http://localhost',
WEBSERV_PORT_CGI => 8081, #8111,8123,8081
POSTGRESQL_USER => @@user, #'ralph', # change user !!!
POSTGRESQL_PORT => port_pgsql,
diff --git a/lib/sisu/v6/cgi_pgsql.rb b/lib/sisu/v6/cgi_pgsql.rb
index 26db0341..a52b62e3 100644
--- a/lib/sisu/v6/cgi_pgsql.rb
+++ b/lib/sisu/v6/cgi_pgsql.rb
@@ -93,13 +93,13 @@ module SiSU_CGI_PgSQL
@name_of[:db]=@env.path.stub_pwd #'sisu' #breaks if not present
false
end
- @name_of[:host_url_cgi]="#{@env.url.webserv_base_cgi(opt)}/cgi-bin"
- @name_of[:host_url_docs]=@env.url.webserv_files_from_db(opt)
- @name_of[:cgi_script]=@env.url.cgi_sample_search_form_name(opt)
+ @name_of[:host_url_cgi]=%q{http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}}
+ @name_of[:host_url_docs]=%q{http://#{ENV['HTTP_HOST']}}
+ @name_of[:cgi_script]=%q{#{ENV['SCRIPT_NAME']}}
@name_of[:user]=@db.psql.user(opt)
- @cgi_file_name=@name_of[:cgi_script]
- @image_src="#{@env.url.webserv_base_cgi(opt)}/_sisu/image_sys"
+ @image_src=%q{http://#{ENV['HTTP_HOST']}/_sisu/image_sys}
@common=SiSU_CGI_SQL::CGI_Common.new(@webserv,opt,@image_src,@env)
+ @cgi_file_name=@env.url.cgi_sample_search_form_name(opt)
end
def pgsql
serve=[]
@@ -200,15 +200,15 @@ module SiSU_CGI_PgSQL
puts 'cgi, fcgi or dbi NOT FOUND (LoadError)'
end
@stub_default='#{@name_of[:db]}'
- @image_src='#{@image_src}'
- @hosturl_cgi='#{@name_of[:host_url_cgi]}'
- @hosturl_files='#{@name_of[:host_url_docs]}'
+ @image_src="#{@image_src}"
+ @hosturl_cgi="#{@name_of[:host_url_cgi]}"
+ @hosturl_files="#{@name_of[:host_url_docs]}"
@output_dir_structure_by='#{@name_of[:output_dir_structure]}'
@lingual='#{@name_of[:lingual]}'
@port='#{@db.psql.port}'
@db_name_prefix='#{Db[:name_prefix]}'
@user='#{@name_of[:user]}' # check user name for access to pg database: e.g. www-data or '#{@env.user}'
- @base='#{@name_of[:host_url_cgi]}/#{@name_of[:cgi_script]}'
+ @base="#{@name_of[:host_url_cgi]}#{@name_of[:cgi_script]}"
WOK_SQL
end
def search_statement
diff --git a/lib/sisu/v6/cgi_sql_common.rb b/lib/sisu/v6/cgi_sql_common.rb
index 44d06880..6e9ddf25 100644
--- a/lib/sisu/v6/cgi_sql_common.rb
+++ b/lib/sisu/v6/cgi_sql_common.rb
@@ -973,7 +973,7 @@ module SiSU_CGI_SQL
matched_para=(@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/) \
? (c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
: c['body']
- %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
+ %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}}
elsif c['suffix'] =~/1/ #doc
%{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}}
end
@@ -981,9 +981,9 @@ module SiSU_CGI_SQL
output=title+text
else #elsif cgi['view']=~/index/ #% idx body
if c['suffix'] !~/1/ #seg
- index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
+ index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
elsif c['suffix'] =~/1/ #doc #FIX
- index=%{<a href="#{path_html_doc(location,c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a>, }
+ index=%{<a href="#{path_html_doc(location,c['language_document_char'])}#o#{c['ocn']}">#{c['ocn']}</a>, }
end
if c['seg'] =~/\S+/
if @text_search_flag
@@ -1041,10 +1041,10 @@ module SiSU_CGI_SQL
&& @search_regx.to_s=~/\S\S+/) \
? (matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
: e['body']
- output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}##{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
+ output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
else #elsif cgi['view']=~/index/ #doc #FIX #% idx endnotes
@counter_endn_ocn+=1
- output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}##{e['ocn']}">#{e['ocn']}</a>], }
+ output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>], }
end
@counters_endn=if @counter_endn_doc > 0
if checked_stats =~/\S/
diff --git a/lib/sisu/v6/cgi_sqlite.rb b/lib/sisu/v6/cgi_sqlite.rb
index 6db31b48..696b6817 100644
--- a/lib/sisu/v6/cgi_sqlite.rb
+++ b/lib/sisu/v6/cgi_sqlite.rb
@@ -79,6 +79,10 @@ module SiSU_CGI_SQLite
opt.lingual.to_s
else 'multi'
end
+ @name_of[:host_url_cgi]=%q{http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}}
+ @name_of[:host_url_docs]=%q{http://#{ENV['HTTP_HOST']}}
+ @name_of[:cgi_script]=%q{#{ENV['SCRIPT_NAME']}}
+ @image_src=%q{http://#{ENV['HTTP_HOST']}/_sisu/image_sys}
@common=SiSU_CGI_SQL::CGI_Common.new(@webserv,opt,@image_src,@env)
@cgi_file_name=@env.url.cgi_sample_search_form_name(opt)
@name_of_sqlite_db_file='sisu_sqlite.db'
@@ -173,13 +177,13 @@ module SiSU_CGI_SQLite
puts 'cgi, fcgi or dbi NOT FOUND (LoadError)'
end
@stub_default='sisu_sqlite'
- @image_src='#{@image_src}'
- @hosturl_cgi='#{@env.url.webserv_base_cgi(@opt)}/cgi-bin'
- @hosturl_files='#{@env.url.webserv_files_from_db(@opt)}'
+ @image_src="#{@image_src}"
+ @hosturl_cgi="#{@name_of[:host_url_cgi]}"
+ @hosturl_files="#{@name_of[:host_url_docs]}"
@output_dir_structure_by='#{@name_of[:output_dir_structure]}'
@lingual='#{@name_of[:lingual]}'
@db_name_prefix='#{Db[:name_prefix]}'
- @base='#{@env.url.webserv_base_cgi(@opt)}/cgi-bin/#{@env.url.cgi_sample_search_form_name(@opt)}' #fix sqlite
+ @base="#{@name_of[:host_url_cgi]}#{@name_of[:cgi_script]}"
WOK_SQL
end
def search_statement
diff --git a/lib/sisu/v6/sysenv.rb b/lib/sisu/v6/sysenv.rb
index 60d963dc..16fbbf4c 100644
--- a/lib/sisu/v6/sysenv.rb
+++ b/lib/sisu/v6/sysenv.rb
@@ -215,7 +215,7 @@ module SiSU_Env
BUNDLE => false,
CONCORD_MAX => 260000,
DIGEST => 'sha256',
- WEBSERV_HOST_CGI => ' http://localhost',
+ WEBSERV_HOST_CGI => 'http://localhost',
WEBSERV_PORT_CGI => 8081, #8111,8123,8081
POSTGRESQL_USER => @@user, #'ralph', # change user !!!
POSTGRESQL_PORT => port_pgsql,
@@ -2519,6 +2519,7 @@ WOK
end
end
http=http.strip
+ #%q{http://#{ENV['HTTP_HOST']}}
end
def webrick #must have a port #REMOVE
if defined? @rc['webserv_cgi']['host'] \
@@ -2581,6 +2582,7 @@ WOK
else webserv_base_cgi(opt)
end
end
+ #%q{http://#{ENV['HTTP_HOST']}/cgi-bin}
end
def cgi_sample_search_form_name(opt=nil)
if opt.mod.inspect =~/--(?:cgi-)?search-form-name[=-]["']?(\S+?\.cgi)/
diff --git a/man/man1/sisu.1 b/man/man1/sisu.1
index f6bb6b5b..478f1f6f 100644
--- a/man/man1/sisu.1
+++ b/man/man1/sisu.1
@@ -1,4 +1,4 @@
-.TH "sisu" "1" "2014-02-05" "6.0.1" "SiSU"
+.TH "sisu" "1" "2014-02-05" "6.0.3" "SiSU"
.br
.SH NAME
.br
@@ -913,16 +913,15 @@ Available man pages are converted back to html using man2html:
An online version of the sisu man page is available here:
.BR
-* various sisu man pages <http://www.jus.uio.no/sisu/man/> [^9]
+* various sisu man pages <http://www.jus.uio.no/sisu/man/> [^1]
.BR
-* sisu.1 <http://www.jus.uio.no/sisu/man/sisu.1.html> [^10]
-
+* sisu.1 <http://www.jus.uio.no/sisu/man/sisu.1.html> [^2]
.SH SISU BUILT-IN INTERACTIVE HELP, [DISCONTINUED]
.BR
This fell out of date and has been discontinued.
-.SH INTRODUCTION TO SISU MARKUP[^11]
+.SH INTRODUCTION TO SISU MARKUP[^3]
.SH SUMMARY
@@ -932,7 +931,7 @@ source documents are
.I plaintext
(
.I UTF-8
-)[^12] files
+)[^4] files
.BR
All paragraphs are separated by an empty line.
@@ -1473,7 +1472,7 @@ determines whether footnotes or endnotes will be produced
.B resulting output:
.BR
-[^13]
+[^5]
.BR
.B markup example:
@@ -1485,7 +1484,7 @@ normal text~{ self contained endnote marker & endnote in one }~ continues
.B resulting output:
.BR
-normal text[^14] continues
+normal text[^6] continues
.BR
.B markup example:
@@ -1620,7 +1619,7 @@ about {~^ SiSU }http://url.org markup
.B resulting output:
.BR
-aboutSiSU <http://www.sisudoc.org/> [^15] markup
+aboutSiSU <http://www.sisudoc.org/> [^7] markup
.BR
Internal document links to a tagged location, including an ocn
@@ -1684,7 +1683,7 @@ GnuDebianLinuxRubyBetterWay.png 100x101 "Way Better - with Gnu/Linux, Debian
and Ruby" <http://www.sisudoc.org/>
.BR
-ruby_logo.png 70x90 "Ruby" <http://www.ruby-lang.org/en/> [^16]
+ruby_logo.png 70x90 "Ruby" <http://www.ruby-lang.org/en/> [^8]
.BR
.B linked url footnote shortcut
@@ -1769,7 +1768,7 @@ information in each column
.BR
.B markup example:
-[^18]
+[^10]
.nf
!_ Table 3.1: Contributors to Wikipedia, January 2001 - June 2005
@@ -2404,7 +2403,7 @@ contain other documents.
.BR
Note: a secondary file of the composite document is built prior to processing
-with the same prefix and the suffix ._sst [^19]
+with the same prefix and the suffix ._sst [^11]
.SH SISU INSERT FILES (.SSI)
.BR
@@ -2594,7 +2593,7 @@ The default homepage may use homepage.css or html. css
.BR
Under consideration is to permit the placement of a CSS file with a different
-name in directory _sisu/css directory or equivalent.[^20]
+name in directory _sisu/css directory or equivalent.[^12]
.SH ORGANISING CONTENT - DIRECTORY STRUCTURE AND MAPPING
@@ -3067,9 +3066,9 @@ output formats.
.B SiSU
feeds sisu markupd documents into sql type databases
.I PostgreSQL
-[^21] and/or
+[^13] and/or
.I SQLite
-[^22] database together with information related to document structure.
+[^14] database together with information related to document structure.
.BR
This is one of the more interesting output forms, as all the structural data of
@@ -3290,14 +3289,63 @@ removes specified document from sqlite database.
.SH INTRODUCTION
+.SH SETUP SEARCH FORM
+
+
+.BR
+You will need a web server, httpd with cgi enabled, and a postgresql database
+to which you are able to create databases.
+
+.BR
+Setup postgresql, make sure you are able to create and write to the database,
+e.g.:
+.nf
+sudo su postgres
+ createuser -d -a ralph
+.fi
+
+
+.BR
+You then need to create the database that sisu will use, for sisu manual in the
+directory manual/en for example, (when you try to populate a database that does
+not exist sisu prompts as to whether it exists):
+.nf
+createdb SiSUv6a_manual
+.fi
+
+
+.BR
+
+.B SiSU
+is then able to create the required tables that allow you to populate the
+database with documents in the directory for which it has been created:
+.nf
+sisu --pg --createall -v
+.fi
+
+
+.BR
+You can then start to populate the database, in this example with a single
+document:
+.nf
+sisu --pg --update -v en/sisu_manual.ssm
+.fi
+
+
+.BR
+To create a sample search form, from within the same directory run:
+
+.BR
+A sample setup for nginx is provided that assumes data will be stored under
+/srv/www and cgi scripts under /srv/cgi
.SH SEARCH - DATABASE FRONTEND SAMPLE, UTILISING DATABASE AND SISU FEATURES,
INCLUDING OBJECT CITATION NUMBERING (BACKEND CURRENTLY POSTGRESQL)
.BR
-Sample search frontend <http://search.sisudoc.org> [^23] A small database and
-sample query front-end (search from) that makes use of the citation system,
-.I object citation numbering
-to demonstrates functionality.[^24]
+Sample search frontend <http://search.sisudoc.org> [^15] A small database and
+sample query front-end (search from) that makes use of the citation system, .I
+object citation numbering
+to demonstrates functionality.[^16]
.BR
.B SiSU
@@ -3321,7 +3369,7 @@ documents matched.
Note you may set results either for documents matched and object number
locations within each matched document meeting the search criteria; or display
the names of the documents matched along with the objects (paragraphs) that
-meet the search criteria.[^25]
+meet the search criteria.[^17]
.TP
.B sisu -F --webserv-webrick
@@ -3626,53 +3674,6 @@ possible representations that are quite different from those offered at
present. For example objects could be saved individually and identified by
their hashes, with an index of how the objects relate to each other to form a
document.
-
-.TP
-.BI 1.
-objects include: headings, paragraphs, verse, tables, images, but not
-footnotes/endnotes which are numbered separately and tied to the object from
-which they are referenced.
-
-.BR
-.TP
-.BI 2.
-i.e. the HTML, PDF, EPUB, ODT outputs are each built individually and optimised for that form of
-presentation, rather than for example the html being a saved version of the
-odf, or the pdf being a saved version of the html.
-
-.BR
-.TP
-.BI 3.
-the different heading levels
-
-.BR
-.TP
-.BI 4.
-units of text, primarily paragraphs and headings, also any tables, poems,
-code-blocks
-
-.BR
-.TP
-.BI 5.
-An open standard format for e-books
-
-.BR
-.TP
-.BI 6.
-Open Document Format ( ODF ) text
-
-.BR
-.TP
-.BI 7.
-Specification submitted by Adobe to ISO to become a full open ISO
-specification <http://www.linux-watch.com/news/NS7542722606.html>
-
-.BR
-.TP
-.BI 8.
-ISO standard ISO/IEC 26300:2006
-
-.BR
.TP
.BI *1.
square brackets
@@ -3689,33 +3690,33 @@ square brackets
.BR
.TP
-.BI 9.
+.BI 1.
<http://www.jus.uio.no/sisu/man/>
.BR
.TP
-.BI 10.
+.BI 2.
<http://www.jus.uio.no/sisu/man/sisu.1.html>
.BR
.TP
-.BI 11.
+.BI 3.
From sometime after SiSU 0.58 it should be possible to describe SiSU markup
using SiSU, which though not an original design goal is useful.
.BR
.TP
-.BI 12.
+.BI 4.
files should be prepared using UTF-8 character encoding
.BR
.TP
-.BI 13.
+.BI 5.
a footnote or endnote
.BR
.TP
-.BI 14.
+.BI 6.
self contained endnote marker & endnote in one
.BR
@@ -3740,23 +3741,23 @@ editors notes, numbered plus symbol footnote/endnote series
.BR
.TP
-.BI 15.
+.BI 7.
<http://www.sisudoc.org/>
.BR
.TP
-.BI 16.
+.BI 8.
<http://www.ruby-lang.org/en/>
.BR
.TP
-.BI 18.
+.BI 10.
Table from the Wealth of Networks by Yochai Benkler
<http://www.jus.uio.no/sisu/the_wealth_of_networks.yochai_benkler>
.BR
.TP
-.BI 19.
+.BI 11.
\.ssc (for composite) is under consideration but \._sst makes clear that this
is not a regular file to be worked on, and thus less likely that people will
have "accidents", working on a \.ssc file that is overwritten by subsequent
@@ -3765,37 +3766,37 @@ appropriate suffix to use.
.BR
.TP
-.BI 20.
+.BI 12.
SiSU has worked this way in the past, though this was dropped as it was
thought the complexity outweighed the flexibility, however, the balance was
rather fine and this behaviour could be reinstated.
.BR
.TP
-.BI 21.
+.BI 13.
<http://www.postgresql.org/> <http://advocacy.postgresql.org/>
<http://en.wikipedia.org/wiki/Postgresql>
.BR
.TP
-.BI 22.
+.BI 14.
<http://www.hwaci.com/sw/sqlite/> <http://en.wikipedia.org/wiki/Sqlite>
.BR
.TP
-.BI 23.
+.BI 15.
<http://search.sisudoc.org>
.BR
.TP
-.BI 24.
+.BI 16.
(which could be extended further with current back-end). As regards scaling
of the database, it is as scalable as the database (here Postgresql) and
hardware allow.
.BR
.TP
-.BI 25.
+.BI 17.
of this feature when demonstrated to an IBM software innovations evaluator
in 2004 he said to paraphrase: this could be of interest to us. We have large
document management systems, you can search hundreds of thousands of documents
diff --git a/rbuild b/rbuild
index 959b89b6..7e0946e7 100644
--- a/rbuild
+++ b/rbuild
@@ -37,8 +37,8 @@
#require 'mkmf'
#create_makefile("sisu")
#% manual settings, edit/update as required (note current default settings are obtained from sisu version yml file)
-SiSU_version_next_stable = '5.3.2'
-SiSU_version_next_unstable = '6.0.2'
+SiSU_version_next_stable = '5.3.3'
+SiSU_version_next_unstable = '6.0.3'
#% rake file
SiSU_version_generic_next_stable = '5.3.x'
SiSU_version_generic_next_unstable = '6.0.x'