doc: Commands tests use `test_frontend`
[nit.git] / src / frontend / i18n_phase.nit
index 60bcdf9..14bf436 100644 (file)
@@ -58,7 +58,7 @@ private class I18NPhase
 
                var pot_path = locale_dir / module_name
                var arr = vi.strings.values.to_a
 
                var pot_path = locale_dir / module_name
                var arr = vi.strings.values.to_a
-               var po = new POFile.with_strings(arr)
+               var po = new POFile(arr)
                po.write_template(pot_path)
 
                if lang != null then
                po.write_template(pot_path)
 
                if lang != null then
@@ -130,8 +130,9 @@ end
 redef class AStringExpr
 
        redef fun accept_string_finder(v) do
 redef class AStringExpr
 
        redef fun accept_string_finder(v) do
-               var str = value.as(not null).escape_to_c
-               var parse = v.toolcontext.parse_expr("\"{str}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").unescape_nit")
+               var str = value.escape_to_gettext
+               var code = "\"{str}\".get_translation(\"{v.domain}\", \"{v.languages_location}\")"
+               var parse = v.toolcontext.parse_expr(code)
                replace_with(parse)
                v.add_string(str, location)
        end
                replace_with(parse)
                v.add_string(str, location)
        end
@@ -143,17 +144,20 @@ redef class ASuperstringExpr
                var fmt = ""
                var exprs = new Array[AExpr]
                for i in n_exprs do
                var fmt = ""
                var exprs = new Array[AExpr]
                for i in n_exprs do
-                       if i isa AStringFormExpr then
-                               fmt += i.value.as(not null)
+                       if i isa AStartStringExpr or i isa AEndStringExpr or i isa AMidStringExpr then
+                               assert i isa AStringFormExpr
+                               var str = i.value
+                               fmt += str.replace("%", "%%")
                        else
                                fmt += "%"
                                exprs.push i
                        else
                                fmt += "%"
                                exprs.push i
-                               fmt += exprs.length.to_s
+                               fmt += (exprs.length-1).to_s
                        end
                end
                        end
                end
-               fmt = fmt.escape_to_c
+               fmt = fmt.escape_to_gettext
                v.add_string(fmt, location)
                v.add_string(fmt, location)
-               var parse = v.toolcontext.parse_expr("\"{fmt}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").unescape_nit.format()")
+               var code = "\"{fmt}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").format()"
+               var parse = v.toolcontext.parse_expr(code)
                if not parse isa ACallExpr then
                        v.toolcontext.error(location, "Fatal error in i18n annotation, the parsed superstring could not be generated properly")
                        return
                if not parse isa ACallExpr then
                        v.toolcontext.error(location, "Fatal error in i18n annotation, the parsed superstring could not be generated properly")
                        return
@@ -188,12 +192,6 @@ class POFile
        # Read from a PO file
        var strings: Array[PObject]
 
        # Read from a PO file
        var strings: Array[PObject]
 
-       # Creates a PO file with strings built-in
-       init with_strings(sm: Array[PObject])do
-               strings = new Array[PObject].with_capacity(sm.length)
-               strings.add_all sm
-       end
-
        redef fun write_to_file(path) do
                if not path.has_suffix(".po") then path += ".po"
                super path
        redef fun write_to_file(path) do
                if not path.has_suffix(".po") then path += ".po"
                super path
@@ -216,3 +214,10 @@ class POFile
                f.close
        end
 end
                f.close
        end
 end
+
+redef class Text
+       private fun escape_to_gettext: String
+       do
+               return escape_to_c.replace("\{", "\\\{").replace("\}", "\\\}")
+       end
+end