$NetBSD: patch-ae,v 1.6 2026/08/12 14:41:19 taca Exp $

* Try load from PKG_SYSCONFDIR/dot.rd2rc.
* Proper program name parsing in require_implicit_format_lib().
* Take care for character encodings a bit.

--- bin/rd2.orig	2026-05-27 03:53:01.573432732 +0000
+++ bin/rd2
@@ -78,6 +78,7 @@ class RD2Command
     @output_index = false
     @out_code = nil
     @from_rdo = false
+    @sysconf = "@PKG_SYSCONFDIR@/dot.rd2rc"
   end
 
   def run
@@ -173,7 +174,7 @@ class RD2Command
     if File.readable?(user_config)
       load user_config
     else
-      load "rd/dot.rd2rc"
+      load @sysconf
     end
   rescue LoadError, StandardError
     load "rd/dot.rd2rc"
@@ -181,9 +182,9 @@ class RD2Command
 
   def require_implicit_format_lib
     base = File.basename(@program_name, ".*").downcase
-    return unless /rd2.+/ =~ base
+    return unless /rd2[0-9]*([a-z][a-z0-9]+)/ =~ base
 
-    load_format_library("rd/#{$&}-lib.rb")
+    load_format_library("rd/#{$1}-lib.rb")
   end
 
   def load_format_library(lib)
@@ -241,6 +242,21 @@ class RD2Command
       src.unshift("=begin\n").push("=end\n")
     end
 
+    # ad hoc encoding check
+    data = src.join('')
+    encoding = [Encoding::UTF_8, Encoding::EUC_JP, Encoding::ISO_8859_1]
+    encoding.each { |e|
+      data.force_encoding e
+      if data.valid_encoding?
+        if e != Encoding::UTF_8
+          src.each { |l|
+            l.encode!(Encoding::UTF_8, e)
+          }
+        end
+        break
+      end
+    }
+
     tree = RDTree.new(src, @include_path, nil)
     @with_part.each do |entry|
       tree.filter[entry.part] = $RC["filter"][entry.filter]
