Merge the remove_wj filter into xhtml_compat.
authorNick Bowler <nbowler@draconx.ca>
Sun, 21 Feb 2021 05:17:00 +0000 (00:17 -0500)
committerNick Bowler <nbowler@draconx.ca>
Sun, 21 Feb 2021 05:18:45 +0000 (00:18 -0500)
Both these filters are used together and in every relevant compilation
rule.  The remove_wj filter is just one line and can be easily added
to xhtml_compat.

Rules
lib/removewj.rb [deleted file]
lib/xhtml-compat.rb

diff --git a/Rules b/Rules
index 43f27a4e15784bf8c278d23da8bdac4dc0145049..ebe9cf2f23a67545e868e87e0f54a04567f7e634 100644 (file)
--- a/Rules
+++ b/Rules
@@ -134,7 +134,6 @@ compile '/**/index.lst' do
     layout '/default.xsl'
     filter :relativize_paths, type: :xml
     filter :xhtml_compat
-    filter :remove_wj
     write item.identifier.without_ext + ".xhtml"
 end
 
@@ -145,7 +144,6 @@ compile '/license/gpl*.md' do
     layout '/default.xsl'
     filter :relativize_paths, type: :xml
     filter :xhtml_compat
-    filter :remove_wj
     write to_xhtml
 end
 
@@ -157,7 +155,6 @@ compile '/**/*.md' do
     layout '/default.xsl'
     filter :relativize_paths, type: :xml
     filter :xhtml_compat
-    filter :remove_wj
     write to_xhtml
 end
 
@@ -168,7 +165,6 @@ compile '/license/cc*.sgml' do
     layout '/default.xsl', "section-links": "yes"
     filter :relativize_paths, type: :xml
     filter :xhtml_compat
-    filter :remove_wj
     write to_xhtml
 end
 
@@ -178,7 +174,6 @@ compile '/license/cc*.xhtml' do
     layout '/default.xsl', "section-links": "yes"
     filter :relativize_paths, type: :xml
     filter :xhtml_compat
-    filter :remove_wj
     write to_xhtml
 end
 
@@ -195,7 +190,6 @@ compile '/images/*.jpg', rep: :info do
     layout '/default.xsl'
     filter :relativize_paths, type: :xml
     filter :xhtml_compat
-    filter :remove_wj
     write to_xhtml
 end
 
diff --git a/lib/removewj.rb b/lib/removewj.rb
deleted file mode 100644 (file)
index 18264dd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Nick's web site: remove_wj filter.  Delete all zero-width word joiners
-# which were added during XSLT processing.
-#
-# Copyright © 2019 Nick Bowler
-#
-# 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 <https://www.gnu.org/licenses/>.
-
-class RemoveWJFilter < Nanoc::Filter
-    identifier :remove_wj
-
-    def run(content, params = {})
-        return content.delete "\u2060"
-    end
-end
index 25fe2e2a6e3a88f5cb92efac5555d084309ab1ba..1c738d9e7447c374bce3c15d442ac9c801f8e14f 100644 (file)
@@ -1,7 +1,7 @@
-# Nick's web site: xhtml_compat filter.  Add whitespace before the end
-# of empty element tags to improve compatibility with old browsers.
+# Nick's web site: xhtml_compat filter.  Perform fixups to improve
+# XHTML compatibility with various user agents.
 #
-# Copyright © 2020 Nick Bowler
+# Copyright © 2019-2021 Nick Bowler
 #
 # 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
@@ -20,9 +20,17 @@ class XhtmlCompatFilter < Nanoc::Filter
     identifier :xhtml_compat
 
     def run(content, params = {})
+        # Old versions of Netscape get confused by <hr/> but have no problem
+        # with <hr />, so avoid that by adding spaces to such elements.
         text = content.gsub(/([^[:space:]])\/>/m, '\1 />');
+
+        # Even older versions of Netscape interpret any script as Javascript,
+        # which causes major problems with the CDATA hack; solve that by making
+        # the whole thing look like a Javascript comment.
         text.gsub!("<![CDATA[]]x><!--]]>", '/*\&')
         text.gsub!("<![CDATA[-->]]>", '\&*/')
-        return text
+
+        # Delete any zero-width word joiners added for XSLT processing.
+        return text.delete "\u2060"
     end
 end