# coding: utf-8 =begin * Name: SiSU * Description: a framework for document structuring, publishing and search * Author: Ralph Amissah * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: SiSU, a framework for document structuring, publishing and search 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 Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . If you have Internet connection, the latest version of the GPL should be available at these locations: * SiSU uses: * Standard SiSU markup syntax, * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system * Hompages: * Download: * Ralph Amissah ** Description: sitemap created from parameters extracted from input file(s) =end module SiSU_Sitemaps require "#{SiSU_lib}/param" # param.rb include SiSU_Param require "#{SiSU_lib}/sysenv" # sysenv.rb include SiSU_Env require "#{SiSU_lib}/shared_xml" # shared_xml.rb include SiSU_XML_munge class Source require 'fileutils' include FileUtils def initialize(opt) @opt=opt end def read songsheet end def songsheet begin @sys=SiSU_Env::System_call.new fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) @fn=SiSU_Env::Env_call.new(@opt.fns).lang(fn_set_lang[:c]) if @opt.cmd =~/Y/ @md=SiSU_Param::Parameters.new(@opt).get @trans=SiSU_XML_munge::Trans.new(@md) #check @md is required @env=SiSU_Env::Info_env.new(@md.fns) @rdf=SiSU_XML_tags::RDF.new(@md) @fnb_utf8_xml=@md.fnb.dup @trans.char_enc.utf8(@fnb_utf8_xml) if @sys.locale =~/utf-?8/i #% utf8 output_map(sitemap) elsif @opt.mod.inspect =~/--sitemaps/ @sitemap_idx_fn='sitemapindex.xml' @env=SiSU_Env::Info_env.new output_idx(sitemap_index) SiSU_Screen::Ansi.new(@opt.cmd,"sitemap index:","#{@env.path.output}/#{@sitemap_idx_fn}").result unless @opt.cmd =~/q/ end rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error ensure end end def make_file(path,filename) if File.writable?("#{path}/."); File.new("#{path}/#{filename}",'w+') else SiSU_Screen::Ansi.new('',"is the file or directory writable?, could not create #{filename}").warn end end def make_path(path) mkdir_p(path) unless FileTest.directory?(path) end def output_map(sitemap) path="#{@env.path.output}/#{@md.fnb}" filename=@fn[:sitemap] touch_path=@env.path.sitemaps touch_filename=@fn[:sitemap_touch] SiSU_Env::SiSU_file.new(@md).make_path(path) file=SiSU_Env::SiSU_file.new(@md).make_file(path,filename) file << sitemap if FileTest.file?("#{touch_path}/#{touch_filename}") rm("#{touch_path}/#{touch_filename}") end end def output_idx(sitemap) path=@env.path.output filename=@sitemap_idx_fn make_path(path) file=make_file(path,filename) file << sitemap end def sitemap_index sitemap_files=Dir.glob("#{@env.path.sitemaps}/sitemap_*.xml") sitemap_idx=[] sitemap_idx <<< WOK sitemap_files.each do |s| f=s.gsub(/.+?\/sitemap_([^\/]+?)\.xml$/,'\1') @trans.char_enc.utf8(f) if @sys.locale =~/utf-?8/i #% utf8 sitemap_idx <<< #{@env.path.url.remote}/#{f}/sitemap.xml WOK end sitemap_idx <<< WOK idx=sitemap_idx.join end def sitemap map=if defined? @md.date.modified \ and @md.date.modified=~/\d{4}-\d{2}-\d{2}/ sitemap_date_modified else sitemap_no_date end end def sitemap_date_modified < #{@rdf.comment_xml} #{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:toc]} #{@md.date.modified} monthly 0.7 #{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:doc]} #{@md.date.modified} 0.5 #{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:manifest]} #{@md.date.modified} 0.5 WOK end def sitemap_no_date < #{@rdf.comment_xml} #{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:toc]} monthly 0.7 #{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:doc]} 0.5 #{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:manifest]} 0.5 WOK end end end __END__ * sanitize xml, pass through filter to ensure is valid - done but needs testing * remote placement of sitemaps --sitemaps -R (probably makes more sense than doing against -Y [filename/wildcard]) - done but needs testing * gzip sitemaps - not before testing / after testing * issue with master documnts, naming and mapping, check multilingual