ruduki2 5 anni fa
parent
commit
0305fca9ed
1 ha cambiato i file con 35 aggiunte e 5 eliminazioni
  1. 35 5
      Rakefile

+ 35 - 5
Rakefile

@@ -147,12 +147,42 @@ task :autofix do
     twee_source = File.read(file.source_file)
     twee_source = twee_source.lines.each_with_index.map do |line, lineno|
       line.chomp!
-      line
+      
+      line.gsub(%r{\[\[(?<link>[^\]]*?)\](?<link_mods>\[[^\]]*\])?\]}) do |m|
+        link = $~[:link]
+        link_mods = $~[:link_mods]
+
+        case link.scan('->').length
+        when 0
+          # this style of link doesn't need to be quoted, but it also shouldn't contain special chars
+          "[[#{link}]#{link_mods}]"
+        when 1
+          text, dest = link.split('->')
+          if text.start_with?("'")
+            text = text.end_with?("'") ? text[1..-2] : text[1..-1]
+            text.gsub!(/(?<!\\)'/) { "\\'" }
+            text.gsub!(/(?<!\\)\\(?!')/) { "\\\\" }
+            text = "'#{text}'"
+          elsif link.start_with?('"')
+            text = text.end_with?('"') ? text[1..-2] : text[1..-1]
+            text.gsub!(/(?<!\\)"/) { "\\\"" }
+            text.gsub!(/(?<!\\)\\(?!")/) { "\\\\" }
+            text = "\"#{text}\""
+          elsif link =~ /\A[\[\]'"\\]*\z/
+            text.gsub!(/(?<!\\)'/) { "\\'" }
+            text.gsub!(/(?<!\\)"/) { "\\\"" }
+            text.gsub!(/(?<!\\)\\(?!['"])/) { "\\\\" }
+            text = "'" + (text.gsub("'") { "\\'" }) + "'"
+          end
+          "[[#{text}->#{dest}]#{link_mods}]"
+        else
+          # TODO this doesn't really happen very much in practice, so don't worry about an autofix, just passthru
+          warn('multiple -> in link')
+          "[[#{link}]#{link_mods}]"
+        end
+      end
 =begin
-      line
-      .scan(%r{\[\[(.+?)\](\[(.+?)\])?\]})
-      .map { |x| x[0] }
-      .each do |link|
+      .map do |link|
         case link.scan('->').length
         when 0
           #link contains no ->, probably not a problem