diff --git a/CMakeLists.txt b/CMakeLists.txt index affb290..e288cf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,7 +137,7 @@ set ( CFILES ${SRCDIR}/buffio.c ${SRCDIR}/fileio.c ${SRCDIR}/streamio.c ${SRCDIR}/tagask.c ${SRCDIR}/tmbstr.c ${SRCDIR}/utf8.c ${SRCDIR}/tidylib.c ${SRCDIR}/mappedio.c ${SRCDIR}/gdoc.c - ${SRCDIR}/language.c ${SRCDIR}/win_vsnprintf.c ) + ${SRCDIR}/language.c ) set ( HFILES ${INCDIR}/tidyplatform.h ${INCDIR}/tidy.h ${INCDIR}/tidyenum.h ${INCDIR}/tidybuffio.h ) diff --git a/build/mingw/README.txt b/build/mingw/README.txt deleted file mode 100644 index e4c0d9b..0000000 --- a/build/mingw/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -Building with MinGW -=================== - -Currently building with MinGW on Windows is a bit complicated, and these -assumptions are made: - -1. Using MinGW as distributed from [http://mingw.org](http://mingw.org). -2. Using default install path (C:\MinGW) - - -Pre-Build Instructions ----------------------- - -**Copy the file `specs` into `C:\MinGW\lib\gcc\\specs`** - -This file was generated with `gcc-dumpspecs > specs`, and then modified to add -`-lmsvcrt_tidy` to the `*libgcc:` linking section. - - -**Copy the file `libmsvcrt_tidy.a` into `C:\MinGW\lib\`** (or someplace else you -know is included in gcc's library search path). - -This file is the import library for `msvcrt.dll` that includes the missing -definitions not included in MinGW's own import library. It was generated via -`dlltool -v -d msvcrt.def -l libmsvcrt_tidy.a --dllname %windir%\System32\msvcrt.dll`. -The `msvcrt.def` file is available in the `mingw` directory, too. - -You can inspect MS' `msvcrt.dll` with `dumpbin /exports C:\Windows\System32\msvcrt.dll` -in the Visual Studio Command Prompt (not CMD). - - -Build ------ - -`cmake ..\.. -G "MinGW Makefiles"` -`mingw32-make` - - -Todo ----- - -Obviously this isn't a fun solution. Some help configuring CMake to include the -import library would be appreciated. - -Also I'm not certain we should be distributing the import library as part of the -source. Would it be better to distribute the `msvcrt.def` as part of the source -and build the import library with `dlltool` as part of the build process? - - - - diff --git a/build/mingw/libmsvcrt_tidy.a b/build/mingw/libmsvcrt_tidy.a deleted file mode 100755 index e591c2f..0000000 Binary files a/build/mingw/libmsvcrt_tidy.a and /dev/null differ diff --git a/build/mingw/msvcrt.def b/build/mingw/msvcrt.def deleted file mode 100755 index f42e1aa..0000000 --- a/build/mingw/msvcrt.def +++ /dev/null @@ -1,4 +0,0 @@ -LIBRARY msvcrt.dll -EXPORTS -_vscprintf_p_l -_vsprintf_p diff --git a/build/mingw/specs b/build/mingw/specs deleted file mode 100755 index 0424d4e..0000000 --- a/build/mingw/specs +++ /dev/null @@ -1,147 +0,0 @@ -*asm: - - -*asm_debug: -%{!g0:%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}} %{fdebug-prefix-map=*:--debug-prefix-map %*} - -*asm_final: -%{gsplit-dwarf: - objcopy --extract-dwo %{c:%{o*:%*}%{!o*:%b%O}}%{!c:%U%O} %{c:%{o*:%:replace-extension(%{o*:%*} .dwo)}%{!o*:%b.dwo}}%{!c:%b.dwo} - objcopy --strip-dwo %{c:%{o*:%*}%{!o*:%b%O}}%{!c:%U%O} } - -*asm_options: -%{-target-help:%:print-asm-header()} %{v} %{w:-W} %{I*} %a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} - -*invoke_as: -%{!fwpa: %{fcompare-debug=*|fdump-final-insns=*:%:compare-debug-dump-opt()} %{!S:-o %|.s | - as %(asm_options) %m.s %A } } - -*cpp: -%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} %{pthread:-D_REENTRANT} %{!no-pthread: } - -*cpp_options: -%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w} %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*} %{undef} %{save-temps*:-fpch-preprocess} - -*cpp_debug_options: -%{d*} - -*cpp_unique_options: -%{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}} %{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD} %{!iplugindir*:%{fplugin*:%:find-plugindir()}} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{fmudflap:-D_MUDFLAP -include mf-runtime.h} %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h} %{E|M|MM:%W{o*}} - -*trad_capable_cpp: -cc1 -E %{traditional|traditional-cpp:-traditional-cpp} - -*cc1: -%(cc1_cpu) - -*cc1_options: -%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %{!iplugindir*:%{fplugin*:%:find-plugindir()}} %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*} %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{Qy:} %{-help:--help} %{-target-help:--target-help} %{-version:--version} %{-help=*:--help=%*} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants} %{coverage:-fprofile-arcs -ftest-coverage} - -*cc1plus: - - -*link_gcc_c_sequence: -%G %L %G - -*link_ssp: -%{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp} - -*endfile: -%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} crtend.o%s - -*link: -%{mwindows:--subsystem windows} %{mconsole:--subsystem console} %{shared: %{mdll: %eshared and mdll are not compatible}} %{shared: --shared} %{mdll:--dll} %{static:-Bstatic} %{!static:-Bdynamic} %{shared|mdll: -e _DllMainCRTStartup@12 --enable-auto-image-base} %(shared_libgcc_undefs) - -*lib: -%{pg:-lgmon} %{pthread:-lpthread} %{!no-pthread: } %{mwindows:-lgdi32 -lcomdlg32} -ladvapi32 -lshell32 -luser32 -lkernel32 - -*mfwrap: - %{static: %{fmudflap|fmudflapth: --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc --wrap=mmap --wrap=mmap64 --wrap=munmap --wrap=alloca} %{fmudflapth: --wrap=pthread_create}} %{fmudflap|fmudflapth: --wrap=main} - -*mflib: -%{fmudflap|fmudflapth: -export-dynamic} - -*link_gomp: - - -*libgcc: -%{mthreads:-lmingwthrd} -lmingw32 %{static|static-libgcc:-lgcc -lgcc_eh} %{!static: %{!static-libgcc: %{!shared: %{!shared-libgcc:-lgcc -lgcc_eh} %{shared-libgcc:-lgcc_s -lgcc} } %{shared:-lgcc_s -lgcc} } } -lmoldname -lmingwex -lmsvcrt -lmsvcrt_tidy - -*startfile: -%{shared|mdll:dllcrt2%O%s} %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s} crtbegin.o%s - -*cross_compile: -0 - -*version: -4.8.1 - -*multilib: -. ; - -*multilib_defaults: - - -*multilib_extra: - - -*multilib_matches: - - -*multilib_exclusions: - - -*multilib_options: - - -*multilib_reuse: - - -*linker: -collect2 - -*linker_plugin_file: - - -*lto_wrapper: - - -*lto_gcc: - - -*link_libgcc: -%D - -*md_exec_prefix: - - -*md_startfile_prefix: - - -*md_startfile_prefix_1: - - -*startfile_prefix_spec: - - -*sysroot_spec: ---sysroot=%R - -*sysroot_suffix_spec: - - -*sysroot_hdrs_suffix_spec: - - -*self_spec: - - -*cc1_cpu: -%{march=native:%>march=native %:local_cpu_detect(arch) %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} %{mtune=native:%>mtune=native %:local_cpu_detect(tune)} - -*shared_libgcc_undefs: -%{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info} - -*link_command: -%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) %{!fno-use-linker-plugin:%{flto|flto=*|fuse-linker-plugin: -plugin %(linker_plugin_file) -plugin-opt=%(lto_wrapper) -plugin-opt=-fresolution=%u.res %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}} }}%{flto|flto=*:% /* Force console to UTF8. */ -/* Windows requires special help for printf positional format specifiers. */ -#include "win_vsnprintf.h" -#define nest_(x) TY_(x) -#define printf nest_(win_printf) -#define fprint nest_(win_fprintf) +//#define nest_(x) TY_(x) +//#define printf nest_(win_printf) +//#define fprint nest_(win_fprintf) #endif #if !defined(NDEBUG) && defined(_MSC_VER) #include "sprtf.h" diff --git a/include/tidyplatform.h b/include/tidyplatform.h index 908692e..a36039f 100644 --- a/include/tidyplatform.h +++ b/include/tidyplatform.h @@ -450,7 +450,7 @@ extern "C" { #define utimbuf _utimbuf /* Windows seems to want utimbuf */ #define stat _stat #define utime _utime -#define vsnprintf prvTidywin_vsnprintf +#define vsnprintf _vsnprintf #endif /* _WIN32 */ #endif /* PRESERVE_FILE_TIMES */ diff --git a/localize/poconvert.rb b/localize/poconvert.rb index df16054..da44765 100755 --- a/localize/poconvert.rb +++ b/localize/poconvert.rb @@ -365,8 +365,12 @@ module PoConvertModule self.items[l_key][num_case][:comment] = comment self.items[l_key][num_case][:case] = num_case self.items[l_key][num_case][:if_group] = nil - tmp = '' - string.each_line { |line| tmp << line.lstrip } + # Reconstitute Hex Escapes + tmp = string.each_line.collect do |line| + line.lstrip.gsub(/\\x(..)/) { |g| [$1.hex].pack('c*').force_encoding('UTF-8') } + end + # Eliminate C double-double-quotes. + tmp = tmp.join.gsub(/""/) { |g| } self.items[l_key][num_case][:string] = tmp end if !self.items || self.items.empty? @@ -403,6 +407,7 @@ module PoConvertModule include PoConvertModule attr_accessor :emacs_footer + attr_accessor :plaintext ######################################################### # initialize @@ -411,6 +416,7 @@ module PoConvertModule @po_locale = nil # The locale to use to generate PO files. @known_locales = {} # The locales we know about. @emacs_footer = false # Indicates whether or not to add emacs instructions. + @plaintext = false # Indicates whether or not we should stick to plaintext. end @@ -777,18 +783,23 @@ msgstr "" end end - # Gather some information to format this nicely. + + # Gather some information to format this nicely, and perform + # UTF escaping if necessary. longest_key = 22 # length of TIDY_MESSAGE_TYPE_LAST. longest_value = 10 # reasonable default in case no single-line strings are found. po_content.items.each do |key, value| longest_key = key.length if key.length > longest_key value.each_value do |value_inner| - value_inner[:string].gsub!(/[^\u0000-\u007e][0-9a-fA-F]?/) do |c| - esc = c[0].bytes.map{ |b| '\\x' + b.to_s(16) }.join('') - if c[1] - esc += '""' + c[1] + # If we're not plaintext then escape UTF sequences. + unless plaintext + value_inner[:string].gsub!(/[^\u0000-\u007e][0-9a-fA-F]?/) do |c| + esc = c[0].bytes.map{ |b| '\\x' + b.to_s(16) }.join('') + if c[1] + esc += '""' + c[1] + end + esc end - esc end length = value_inner[:string].length longest_value = length if length > longest_value && !value_inner[:string].start_with?("\n") @@ -875,7 +886,7 @@ msgstr "" File.rename(output_file, safe_backup_name(output_file)) end File.open(output_file, 'w') do |f| - #f.write "\uFEFF" # MSVC requires a BOM. + f.write "\uFEFF" if plaintext # MSVC requires a BOM. f.write(report) end @@log.info "#{__method__}: Results written to #{output_file}" @@ -1026,10 +1037,12 @@ Complete Help: desc 'msgunfmt ', 'Converts an existing Tidy header H file to PO format.' long_desc <<-LONG_DESC Converts an existing Tidy header H file to a PO file using the locale - specified in the H file. Specifying is required. The - resulting file will consist of English original strings, the translated - strings from the header, and blank translated strings if not specified in - the header. + specified in the H file. Specifying is required, and + multiple input files may be specified. + + The resulting file will consist of English original strings, the + translated strings from the header, and blank translated strings if not + specified in the header. You can use the --baselang option to gather the untranslated strings from a different header file. This may be useful for translators that want to @@ -1039,14 +1052,20 @@ Complete Help: Use case: create a PO file from an existing Tidy header H file using a combination of languages that are suitable to you. LONG_DESC - def msgunfmt(input_file = nil) - converter = PoConverter.new - converter.emacs_footer = options[:emacs] - set_options - if converter.convert_to_po( input_file, options[:baselang] ) + def msgunfmt(*args) + error_count = 0 + + args.each do |input_file| + converter = PoConverter.new + converter.emacs_footer = options[:emacs] + set_options + error_count = converter.convert_to_po(input_file, options[:baselang]) ? error_count : error_count + 1 + end + + if error_count == 0 puts 'msgunfmt exited without errors.' else - puts 'msgunfmt exited with errors. Consider using the --verbose or --debug options.' + puts "msgunfmt exited with errors #{error_count} time(s). Consider using the --verbose or --debug options." exit 1 end end # msgunfmt @@ -1060,10 +1079,14 @@ Complete Help: :type => :string, :desc => 'Specifies a base language from which to exclude translated strings.', :aliases => '-b' + option :plaintext, + :type => :boolean, + :desc => 'Specifies that the generated file contain plain text instead of hex escaped characters.', + :aliases => '-p' desc 'msgfmt ', 'Creates a Tidy header H file from the given PO file.' long_desc <<-LONG_DESC Creates a Tidy header H file from the specified PO file, - which is a required argument. + which is a required argument. Multiple input files may be specified. You can use the --baselang option to exclude already translated strings from an inherited base language. This will help keep Tidy's library and executable size @@ -1075,13 +1098,20 @@ Complete Help: Use case: Tidy can only build H files, and so this command will convert PO files to something useful. LONG_DESC - def msgfmt(input_file) - converter = PoConverter.new - set_options - if converter.convert_to_h( input_file, options[:baselang] ) + def msgfmt(*args) + error_count = 0 + + args.each do |input_file| + converter = PoConverter.new + converter.plaintext = options[:plaintext] + set_options + error_count = converter.convert_to_h( input_file, options[:baselang] ) ? error_count : error_count + 1 + end + + if error_count == 0 puts 'msgfmt exited without errors.' else - puts 'msgfmt exited with errors. Consider using the --verbose or --debug options.' + puts "msgfmt exited with errors #{error_count} time(s). Consider using the --verbose or --debug options." exit 1 end end # msgfmt diff --git a/localize/translations/language_es.po b/localize/translations/language_es.po index 0278cab..6f218e3 100644 --- a/localize/translations/language_es.po +++ b/localize/translations/language_es.po @@ -22,7 +22,7 @@ msgstr "" #, c-format msgctxt "FILE_CANT_OPEN" msgid "Can't open \"%1$s\"\n" -msgstr "" +msgstr "No se puede abrir \"%1$s\"\n" #, c-format msgctxt "LINE_COLUMN_STRING" diff --git a/src/language.c b/src/language.c index a93c7cf..6d60389 100644 --- a/src/language.c +++ b/src/language.c @@ -18,21 +18,15 @@ #endif #include "tmbstr.h" #include "locale.h" -#if defined(_WIN32) -#include "win_vsnprintf.h" -#define nest_(x) TY_(x) -#define printf nest_(win_printf) -#define fprint nest_(win_fprintf) -#endif /** * This structure type provides universal access to all of Tidy's strings. */ typedef struct { - languageDefinition *currentLanguage; - languageDefinition *fallbackLanguage; - languageDefinition *languages[]; + languageDefinition *currentLanguage; + languageDefinition *fallbackLanguage; + languageDefinition *languages[]; } tidyLanguagesType; @@ -41,20 +35,20 @@ typedef struct { * `.currentLanguage` to language_en, which is Tidy's default language. */ static tidyLanguagesType tidyLanguages = { - &language_en, /* current language */ - &language_en, /* first fallback language */ - { + &language_en, /* current language */ + &language_en, /* first fallback language */ + { /* Required localization! */ &language_en, #if SUPPORT_LOCALIZATIONS - /* These additional languages are installed. */ - &language_en_gb, - &language_es, - &language_es_mx, + /* These additional languages are installed. */ + &language_en_gb, + &language_es, + &language_es_mx, &language_zh_cn, #endif - NULL /* This array MUST be null terminated. */ - } + NULL /* This array MUST be null terminated. */ + } }; @@ -64,168 +58,168 @@ static tidyLanguagesType tidyLanguages = { * POSIX names). */ static const tidyLocaleMapItem localeMappings[] = { - { "america", "en_us" }, - { "american english", "en_us" }, - { "american-english", "en_us" }, - { "american", "en_us" }, - { "aus", "en_au" }, - { "australia", "en_au" }, - { "australian", "en_au" }, - { "austria", "de_at" }, - { "aut", "de_at" }, - { "bel", "nl_be" }, - { "belgian", "nl_be" }, - { "belgium", "nl_be" }, - { "bra", "pt-br" }, - { "brazil", "pt-br" }, - { "britain", "en_gb" }, - { "can", "en_ca" }, - { "canada", "en_ca" }, - { "canadian", "en_ca" }, - { "che", "de_ch" }, - { "china", "zh_cn" }, - { "chinese-simplified", "zh" }, - { "chinese-traditional", "zh_tw" }, - { "chinese", "zh" }, - { "chn", "zh_cn" }, - { "chs", "zh" }, - { "cht", "zh_tw" }, - { "csy", "cs" }, - { "cze", "cs_cz" }, - { "czech", "cs_cz" }, - { "dan", "da" }, - { "danish", "da" }, - { "dea", "de_at" }, - { "denmark", "da_dk" }, - { "des", "de_ch" }, - { "deu", "de" }, - { "dnk", "da_dk" }, - { "dutch-belgian", "nl_be" }, - { "dutch", "nl" }, - { "ell", "el" }, - { "ena", "en_au" }, - { "enc", "en_ca" }, - { "eng", "eb_gb" }, - { "england", "en_gb" }, - { "english-american", "en_us" }, - { "english-aus", "en_au" }, - { "english-can", "en_ca" }, - { "english-nz", "en_nz" }, - { "english-uk", "eb_gb" }, - { "english-us", "en_us" }, - { "english-usa", "en_us" }, - { "english", "en" }, - { "enu", "en_us" }, - { "enz", "en_nz" }, - { "esm", "es-mx" }, - { "esn", "es" }, - { "esp", "es" }, - { "fin", "fi" }, - { "finland", "fi_fi" }, - { "finnish", "fi" }, - { "fra", "fr" }, - { "france", "fr_fr" }, - { "frb", "fr_be" }, - { "frc", "fr_ca" }, - { "french-belgian", "fr_be" }, - { "french-canadian", "fr_ca" }, - { "french-swiss", "fr_ch" }, - { "french", "fr" }, - { "frs", "fr_ch" }, - { "gbr", "en_gb" }, - { "german-austrian", "de_at" }, - { "german-swiss", "de_ch" }, - { "german", "de" }, - { "germany", "de_de" }, - { "grc", "el_gr" }, - { "great britain", "en_gb" }, - { "greece", "el_gr" }, - { "greek", "el" }, - { "hkg", "zh_hk" }, - { "holland", "nl_nl" }, - { "hong kong", "zh_hk" }, - { "hong-kong", "zh_hk" }, - { "hun", "hu" }, - { "hungarian", "hu" }, - { "hungary", "hu_hu" }, - { "iceland", "is_is" }, - { "icelandic", "is" }, - { "ireland", "en_ie" }, - { "irl", "en_ie" }, - { "isl", "is" }, - { "ita", "it" }, - { "ita", "it_it" }, - { "italian-swiss", "it_ch" }, - { "italian", "it" }, - { "italy", "it_it" }, - { "its", "it_ch" }, - { "japan", "ja_jp" }, - { "japanese", "ja" }, - { "jpn", "ja" }, - { "kor", "ko" }, - { "korea", "ko_kr" }, - { "korean", "ko" }, - { "mex", "es-mx" }, - { "mexico", "es-mx" }, - { "netherlands", "nl_nl" }, - { "new zealand", "en_nz" }, - { "new-zealand", "en_nz" }, - { "nlb", "nl_be" }, - { "nld", "nl" }, - { "non", "nn" }, - { "nor", "nb" }, - { "norway", "no" }, - { "norwegian-bokmal", "nb" }, - { "norwegian-nynorsk", "nn" }, - { "norwegian", "no" }, - { "nz", "en_nz" }, - { "nzl", "en_nz" }, - { "plk", "pl" }, - { "pol", "pl-pl" }, - { "poland", "pl-pl" }, - { "polish", "pl" }, - { "portugal", "pt-pt" }, - { "portuguese-brazil", "pt-br" }, - { "portuguese", "pt" }, - { "pr china", "zh_cn" }, - { "pr-china", "zh_cn" }, - { "prt", "pt-pt" }, - { "ptb", "pt-br" }, - { "ptg", "pt" }, - { "rus", "ru" }, - { "russia", "ru-ru" }, - { "russian", "ru" }, - { "sgp", "zh_sg" }, - { "singapore", "zh_sg" }, - { "sky", "sk" }, - { "slovak", "sk" }, - { "spain", "es-es" }, - { "spanish-mexican", "es-mx" }, - { "spanish-modern", "es" }, - { "spanish", "es" }, - { "sve", "sv" }, - { "svk", "sk-sk" }, - { "swe", "sv-se" }, - { "sweden", "sv-se" }, - { "swedish", "sv" }, - { "swiss", "de_ch" }, - { "switzerland", "de_ch" }, - { "taiwan", "zh_tw" }, - { "trk", "tr" }, - { "tur", "tr-tr" }, - { "turkey", "tr-tr" }, - { "turkish", "tr" }, - { "twn", "zh_tw" }, - { "uk", "en_gb" }, - { "united kingdom", "en_gb" }, - { "united states", "en_us" }, - { "united-kingdom", "en_gb" }, - { "united-states", "en_us" }, - { "us", "en_us" }, - { "usa", "en_us" }, - - /* MUST be last. */ - { NULL, NULL } + { "america", "en_us" }, + { "american english", "en_us" }, + { "american-english", "en_us" }, + { "american", "en_us" }, + { "aus", "en_au" }, + { "australia", "en_au" }, + { "australian", "en_au" }, + { "austria", "de_at" }, + { "aut", "de_at" }, + { "bel", "nl_be" }, + { "belgian", "nl_be" }, + { "belgium", "nl_be" }, + { "bra", "pt-br" }, + { "brazil", "pt-br" }, + { "britain", "en_gb" }, + { "can", "en_ca" }, + { "canada", "en_ca" }, + { "canadian", "en_ca" }, + { "che", "de_ch" }, + { "china", "zh_cn" }, + { "chinese-simplified", "zh" }, + { "chinese-traditional", "zh_tw" }, + { "chinese", "zh" }, + { "chn", "zh_cn" }, + { "chs", "zh" }, + { "cht", "zh_tw" }, + { "csy", "cs" }, + { "cze", "cs_cz" }, + { "czech", "cs_cz" }, + { "dan", "da" }, + { "danish", "da" }, + { "dea", "de_at" }, + { "denmark", "da_dk" }, + { "des", "de_ch" }, + { "deu", "de" }, + { "dnk", "da_dk" }, + { "dutch-belgian", "nl_be" }, + { "dutch", "nl" }, + { "ell", "el" }, + { "ena", "en_au" }, + { "enc", "en_ca" }, + { "eng", "eb_gb" }, + { "england", "en_gb" }, + { "english-american", "en_us" }, + { "english-aus", "en_au" }, + { "english-can", "en_ca" }, + { "english-nz", "en_nz" }, + { "english-uk", "eb_gb" }, + { "english-us", "en_us" }, + { "english-usa", "en_us" }, + { "english", "en" }, + { "enu", "en_us" }, + { "enz", "en_nz" }, + { "esm", "es-mx" }, + { "esn", "es" }, + { "esp", "es" }, + { "fin", "fi" }, + { "finland", "fi_fi" }, + { "finnish", "fi" }, + { "fra", "fr" }, + { "france", "fr_fr" }, + { "frb", "fr_be" }, + { "frc", "fr_ca" }, + { "french-belgian", "fr_be" }, + { "french-canadian", "fr_ca" }, + { "french-swiss", "fr_ch" }, + { "french", "fr" }, + { "frs", "fr_ch" }, + { "gbr", "en_gb" }, + { "german-austrian", "de_at" }, + { "german-swiss", "de_ch" }, + { "german", "de" }, + { "germany", "de_de" }, + { "grc", "el_gr" }, + { "great britain", "en_gb" }, + { "greece", "el_gr" }, + { "greek", "el" }, + { "hkg", "zh_hk" }, + { "holland", "nl_nl" }, + { "hong kong", "zh_hk" }, + { "hong-kong", "zh_hk" }, + { "hun", "hu" }, + { "hungarian", "hu" }, + { "hungary", "hu_hu" }, + { "iceland", "is_is" }, + { "icelandic", "is" }, + { "ireland", "en_ie" }, + { "irl", "en_ie" }, + { "isl", "is" }, + { "ita", "it" }, + { "ita", "it_it" }, + { "italian-swiss", "it_ch" }, + { "italian", "it" }, + { "italy", "it_it" }, + { "its", "it_ch" }, + { "japan", "ja_jp" }, + { "japanese", "ja" }, + { "jpn", "ja" }, + { "kor", "ko" }, + { "korea", "ko_kr" }, + { "korean", "ko" }, + { "mex", "es-mx" }, + { "mexico", "es-mx" }, + { "netherlands", "nl_nl" }, + { "new zealand", "en_nz" }, + { "new-zealand", "en_nz" }, + { "nlb", "nl_be" }, + { "nld", "nl" }, + { "non", "nn" }, + { "nor", "nb" }, + { "norway", "no" }, + { "norwegian-bokmal", "nb" }, + { "norwegian-nynorsk", "nn" }, + { "norwegian", "no" }, + { "nz", "en_nz" }, + { "nzl", "en_nz" }, + { "plk", "pl" }, + { "pol", "pl-pl" }, + { "poland", "pl-pl" }, + { "polish", "pl" }, + { "portugal", "pt-pt" }, + { "portuguese-brazil", "pt-br" }, + { "portuguese", "pt" }, + { "pr china", "zh_cn" }, + { "pr-china", "zh_cn" }, + { "prt", "pt-pt" }, + { "ptb", "pt-br" }, + { "ptg", "pt" }, + { "rus", "ru" }, + { "russia", "ru-ru" }, + { "russian", "ru" }, + { "sgp", "zh_sg" }, + { "singapore", "zh_sg" }, + { "sky", "sk" }, + { "slovak", "sk" }, + { "spain", "es-es" }, + { "spanish-mexican", "es-mx" }, + { "spanish-modern", "es" }, + { "spanish", "es" }, + { "sve", "sv" }, + { "svk", "sk-sk" }, + { "swe", "sv-se" }, + { "sweden", "sv-se" }, + { "swedish", "sv" }, + { "swiss", "de_ch" }, + { "switzerland", "de_ch" }, + { "taiwan", "zh_tw" }, + { "trk", "tr" }, + { "tur", "tr-tr" }, + { "turkey", "tr-tr" }, + { "turkish", "tr" }, + { "twn", "zh_tw" }, + { "uk", "en_gb" }, + { "united kingdom", "en_gb" }, + { "united states", "en_us" }, + { "united-kingdom", "en_gb" }, + { "united-states", "en_us" }, + { "us", "en_us" }, + { "usa", "en_us" }, + + /* MUST be last. */ + { NULL, NULL } }; @@ -499,18 +493,18 @@ ctmbstr tidyErrorCodeAsString(uint code) */ ctmbstr TY_(tidyLocalizedString)( uint messageType, languageDefinition *definition, uint plural ) { - int i; - languageDictionary *dictionary = &definition->messages; - uint pluralForm = definition->whichPluralForm(plural); - - for (i = 0; (*dictionary)[i].value; ++i) - { - if ( (*dictionary)[i].key == messageType && (*dictionary)[i].pluralForm == pluralForm ) - { - return (*dictionary)[i].value; - } - } - return NULL; + int i; + languageDictionary *dictionary = &definition->messages; + uint pluralForm = definition->whichPluralForm(plural); + + for (i = 0; (*dictionary)[i].value; ++i) + { + if ( (*dictionary)[i].key == messageType && (*dictionary)[i].pluralForm == pluralForm ) + { + return (*dictionary)[i].value; + } + } + return NULL; } @@ -525,28 +519,28 @@ ctmbstr TY_(tidyLocalizedString)( uint messageType, languageDefinition *definiti */ ctmbstr tidyLocalizedStringN( uint messageType, uint quantity ) { - ctmbstr result; - - result = TY_(tidyLocalizedString)( messageType, tidyLanguages.currentLanguage, quantity); - - if (!result && tidyLanguages.fallbackLanguage ) - { - result = TY_(tidyLocalizedString)( messageType, tidyLanguages.fallbackLanguage, quantity); - } - - if (!result) - { - /* Fallback to en which is built in. */ - result = TY_(tidyLocalizedString)( messageType, &language_en, quantity); - } - - if (!result) - { - /* Last resort: Fallback to en singular which is built in. */ - result = TY_(tidyLocalizedString)( messageType, &language_en, 1); - } - - return result; + ctmbstr result; + + result = TY_(tidyLocalizedString)( messageType, tidyLanguages.currentLanguage, quantity); + + if (!result && tidyLanguages.fallbackLanguage ) + { + result = TY_(tidyLocalizedString)( messageType, tidyLanguages.fallbackLanguage, quantity); + } + + if (!result) + { + /* Fallback to en which is built in. */ + result = TY_(tidyLocalizedString)( messageType, &language_en, quantity); + } + + if (!result) + { + /* Last resort: Fallback to en singular which is built in. */ + result = TY_(tidyLocalizedString)( messageType, &language_en, 1); + } + + return result; } @@ -560,7 +554,7 @@ ctmbstr tidyLocalizedStringN( uint messageType, uint quantity ) */ ctmbstr tidyLocalizedString( uint messageType ) { - return tidyLocalizedStringN( messageType, 1 ); + return tidyLocalizedStringN( messageType, 1 ); } @@ -574,23 +568,23 @@ ctmbstr tidyLocalizedString( uint messageType ) */ tmbstr tidySystemLocale(tmbstr result) { - ctmbstr temp; - - /* This should set the OS locale. */ - setlocale( LC_ALL, "" ); - - /* This should read the current locale. */ - temp = setlocale( LC_ALL, NULL); - - /* Make a new copy of the string, because temp - always points to the current locale. */ - if (( result = malloc( strlen( temp ) + 1 ) )) - strcpy(result, temp); - - /* This should restore the C locale. */ - setlocale( LC_ALL, "C" ); - - return result; + ctmbstr temp; + + /* This should set the OS locale. */ + setlocale( LC_ALL, "" ); + + /* This should read the current locale. */ + temp = setlocale( LC_ALL, NULL); + + /* Make a new copy of the string, because temp + always points to the current locale. */ + if (( result = malloc( strlen( temp ) + 1 ) )) + strcpy(result, temp); + + /* This should restore the C locale. */ + setlocale( LC_ALL, "C" ); + + return result; } @@ -601,47 +595,52 @@ tmbstr tidySystemLocale(tmbstr result) */ tmbstr tidyNormalizedLocaleName( ctmbstr locale ) { - uint i; - uint len; - static char result[6] = "xx_yy"; - tmbstr search = strdup(locale); - search = TY_(tmbstrtolower)(search); - - /* See if our string matches a Windows name. */ - for (i = 0; localeMappings[i].winName; ++i) - { - if ( strcmp( localeMappings[i].winName, search ) == 0 ) - { + uint i; + uint len; + static char result[6] = "xx_yy"; + char character[1]; + tmbstr search = strdup(locale); + search = TY_(tmbstrtolower)(search); + + /* See if our string matches a Windows name. */ + for (i = 0; localeMappings[i].winName; ++i) + { + if ( strcmp( localeMappings[i].winName, search ) == 0 ) + { free(search); search = strdup(localeMappings[i].POSIXName); - break; - } - } - - /* We're going to be stupid about this and trust the user, and - return just the first two characters if they exist and the - 4th and 5th if they exist. The worst that can happen is a - junk language that doesn't exist and won't be set. */ - - len = strlen( search ); - len = len <= 5 ? len : 5; - - for ( i = 0; i < len; i++ ) - { - if ( i == 2 ) - { - /* Either terminate the string or ensure there's an underscore */ - strncpy( result + i, strlen( search ) >= 5 ? "_" : '\0', 1 ); - } - else - { - strncpy( result + i, search + i, 1); - result[i] = tolower( result[i] ); - } - } - + break; + } + } + + /* We're going to be stupid about this and trust the user, and + return just the first two characters if they exist and the + 4th and 5th if they exist. The worst that can happen is a + junk language that doesn't exist and won't be set. */ + + len = strlen( search ); + len = len <= 5 ? len : 5; + + for ( i = 0; i < len; i++ ) + { + if ( i == 2 ) + { + /* Either terminate the string or ensure there's an underscore */ + if (strlen( search) >= 5) + character[0] = '_'; + else + character[0] = '\0'; + strncpy( result + i, character, 1 ); + } + else + { + strncpy( result + i, search + i, 1); + result[i] = tolower( result[i] ); + } + } + if ( search ) free( search ); - return result; + return result; } @@ -651,22 +650,22 @@ tmbstr tidyNormalizedLocaleName( ctmbstr locale ) */ languageDefinition *TY_(tidyTestLanguage)( ctmbstr languageCode ) { - uint i; - languageDefinition *testLang; - languageDictionary *testDict; - ctmbstr testCode; - - for (i = 0; tidyLanguages.languages[i]; ++i) - { - testLang = tidyLanguages.languages[i]; - testDict = &testLang->messages; - testCode = (*testDict)[0].value; - - if ( strcmp(testCode, languageCode) == 0 ) + uint i; + languageDefinition *testLang; + languageDictionary *testDict; + ctmbstr testCode; + + for (i = 0; tidyLanguages.languages[i]; ++i) + { + testLang = tidyLanguages.languages[i]; + testDict = &testLang->messages; + testCode = (*testDict)[0].value; + + if ( strcmp(testCode, languageCode) == 0 ) return testLang; - } - - return NULL; + } + + return NULL; } @@ -683,30 +682,30 @@ languageDefinition *TY_(tidyTestLanguage)( ctmbstr languageCode ) */ Bool tidySetLanguage( ctmbstr languageCode ) { - languageDefinition *dict1 = NULL; - languageDefinition *dict2 = NULL; - tmbstr wantCode = NULL; - char lang[3] = ""; - - if ( !languageCode || !(wantCode = tidyNormalizedLocaleName( languageCode )) ) + languageDefinition *dict1 = NULL; + languageDefinition *dict2 = NULL; + tmbstr wantCode = NULL; + char lang[3] = ""; + + if ( !languageCode || !(wantCode = tidyNormalizedLocaleName( languageCode )) ) { - return no; + return no; } - + /* We want to use the specified language as the currentLanguage, and set fallback language as necessary. We have either a two or five digit code, either or both of which might be installed. Let's test both of them: */ - + dict1 = TY_(tidyTestLanguage( wantCode )); /* WANTED language */ - + if ( strlen( wantCode ) > 2 ) { strncpy(lang, wantCode, 2); lang[2] = '\0'; dict2 = TY_(tidyTestLanguage( lang ) ); /* BACKUP language? */ } - + if ( dict1 && dict2 ) { tidyLanguages.currentLanguage = dict1; @@ -726,8 +725,8 @@ Bool tidySetLanguage( ctmbstr languageCode ) { /* No change. */ } - - return dict1 || dict2; + + return dict1 || dict2; } @@ -736,9 +735,9 @@ Bool tidySetLanguage( ctmbstr languageCode ) */ ctmbstr tidyGetLanguage() { - languageDefinition *langDef = tidyLanguages.currentLanguage; - languageDictionary *langDict = &langDef->messages; - return (*langDict)[0].value; + languageDefinition *langDef = tidyLanguages.currentLanguage; + languageDictionary *langDict = &langDef->messages; + return (*langDict)[0].value; } @@ -748,7 +747,7 @@ ctmbstr tidyGetLanguage() */ ctmbstr tidyDefaultString( uint messageType ) { - return TY_(tidyLocalizedString)( messageType, &language_en, 1); + return TY_(tidyLocalizedString)( messageType, &language_en, 1); } @@ -813,16 +812,16 @@ uint getNextStringKey( TidyIterator* iter ) */ const uint TY_(tidyLanguageListSize)() { - static uint array_size = 0; - - if ( array_size == 0 ) - { + static uint array_size = 0; + + if ( array_size == 0 ) + { while ( localeMappings[array_size].winName ) { array_size++; } - } - - return array_size; + } + + return array_size; } /** @@ -863,16 +862,16 @@ const tidyLocaleMapItem *getNextWindowsLanguage( TidyIterator *iter ) */ const uint TY_(tidyInstalledLanguageListSize)() { - static uint array_size = 0; - - if ( array_size == 0 ) - { - while ( tidyLanguages.languages[array_size] ) { - array_size++; - } - } - - return array_size; + static uint array_size = 0; + + if ( array_size == 0 ) + { + while ( tidyLanguages.languages[array_size] ) { + array_size++; + } + } + + return array_size; } /** diff --git a/src/language_en.h b/src/language_en.h index 5de1a69..1b774a7 100644 --- a/src/language_en.h +++ b/src/language_en.h @@ -1,4 +1,4 @@ -#ifndef language_en_h +#ifndef language_en_h #define language_en_h /* * language_en.h @@ -16,9 +16,6 @@ * See tidy.h and access.h for the copyright notice. * * Created by Jim Derry on 11/28/15. - * - * PO_LAST_TRANSLATOR=jderry - * PO_REVISION_DATE=2016-01-12 */ #ifdef _MSC_VER @@ -72,16 +69,16 @@ static languageDefinition language_en = { whichPluralForm_en, { {/* Only translate if a URL to the target language can be found. */ ATRC_ACCESS_URL, 0, "http://www.html-tidy.org/accessibility/" }, - { FILE_CANT_OPEN, 0, "Can't open \"%1$s\"\n" }, - { LINE_COLUMN_STRING, 0, "line %1$d column %2$d - " }, - { STRING_CONTENT_LOOKS, 0, "Document content looks like %1$s" }, + { FILE_CANT_OPEN, 0, "Can't open \"%s\"\n" }, + { LINE_COLUMN_STRING, 0, "line %d column %d - " }, + { STRING_CONTENT_LOOKS, 0, "Document content looks like %s" }, {/* For example, "discarding invalid UTF-16 surrogate pair" */ STRING_DISCARDING, 0, "discarding" }, - { STRING_DOCTYPE_GIVEN, 0, "Doctype given is \"%1$s\"" }, + { STRING_DOCTYPE_GIVEN, 0, "Doctype given is \"%s\"" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - STRING_ERROR_COUNT, 0, "Tidy found %1$u %2$s and %3$u %4$s!" + STRING_ERROR_COUNT, 0, "Tidy found %u %s and %u %s!" }, { STRING_ERROR_COUNT_ERROR, 0, "error" }, { STRING_ERROR_COUNT_ERROR, 1, "errors" }, @@ -91,7 +88,7 @@ static languageDefinition language_en = { whichPluralForm_en, { {/* This is not a formal name and can be translated. */ STRING_HTML_PROPRIETARY, 0, "HTML Proprietary" }, - { STRING_MISSING_MALFORMED, 0, "missing or malformed argument for option: %1$s" }, + { STRING_MISSING_MALFORMED, 0, "missing or malformed argument for option: %s" }, { STRING_NO_ERRORS, 0, "No warnings or errors were found." }, { STRING_NO_SYSID, 0, "No system identifier in emitted doctype" }, { STRING_NOT_ALL_SHOWN, 0, "Not all warnings/errors were shown." }, @@ -102,9 +99,9 @@ static languageDefinition language_en = { whichPluralForm_en, { {/* For example, "you should avoid using the specified encoding." */ STRING_SPECIFIED, 0, "specified" }, - { STRING_UNKNOWN_FILE, 0, "%1$s: can't open file \"%2$s\"\n" }, - { STRING_UNKNOWN_OPTION, 0, "unknown option: %1$s" }, - { STRING_UNRECZD_OPTION, 0, "unrecognized option -%1$c use -help to list options\n" }, + { STRING_UNKNOWN_FILE, 0, "%s: can't open file \"%s\"\n" }, + { STRING_UNKNOWN_OPTION, 0, "unknown option: %s" }, + { STRING_UNRECZD_OPTION, 0, "unrecognized option -%c use -help to list options\n" }, { STRING_XML_DECLARATION, 0, "XML declaration" }, {/* This console output should be limited to 78 characters per line. */ @@ -133,22 +130,23 @@ static languageDefinition language_en = { whichPluralForm_en, { "than Windows character code 153 (0x2122 in Unicode). Note that\n" "as of February 1998 few browsers support the new entities.\n\n" }, - {/* This console output should be limited to 78 characters per line. */ + {/* This console output should be limited to 78 characters per line. + - %s represents a string-encoding name which may be localized in your language. */ TEXT_VENDOR_CHARS, 0, "It is unlikely that vendor-specific, system-dependent encodings\n" "work widely enough on the World Wide Web; you should avoid using the \n" - "%1$s character encoding, instead you are recommended to\n" + "%s character encoding, instead you are recommended to\n" "use named entities, e.g. ™.\n" "\n" }, {/* This console output should be limited to 78 characters per line. - - %1$s represents a string-encoding name which may be localized in your language. + - %s represents a string-encoding name which may be localized in your language. - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TEXT_SGML_CHARS, 0, "Character codes 128 to 159 (U+0080 to U+009F) are not allowed in HTML;\n" "even if they were, they would likely be unprintable control characters.\n" "Tidy assumed you wanted to refer to a character with the same byte value in the \n" - "%1$s encoding and replaced that reference with the Unicode \n" + "%s encoding and replaced that reference with the Unicode \n" "equivalent.\n" "\n" }, @@ -330,100 +328,100 @@ static languageDefinition language_en = { whichPluralForm_en, { /* ReportEncodingWarning */ { - ENCODING_MISMATCH, 0, "specified input encoding (%1$s) does not match actual input encoding (%2$s)" }, /* Warning */ + ENCODING_MISMATCH, 0, "specified input encoding (%s) does not match actual input encoding (%s)" }, /* Warning */ /* ReportEncodingError */ - { VENDOR_SPECIFIC_CHARS, 0, "%1$s invalid character code %2$s" }, /* Error */ - { INVALID_SGML_CHARS, 0, "%1$s invalid character code %2$s" }, /* Error */ - { INVALID_UTF8, 0, "%1$s invalid UTF-8 bytes (char. code %2$s)" }, /* Error */ - { INVALID_UTF16, 0, "%1$s invalid UTF-16 surrogate pair (char. code %2$s)" }, /* Error */ - { INVALID_NCR, 0, "%1$s invalid numeric character reference %2$s" }, /* Error */ + { VENDOR_SPECIFIC_CHARS, 0, "%s invalid character code %s" }, /* Error */ + { INVALID_SGML_CHARS, 0, "%s invalid character code %s" }, /* Error */ + { INVALID_UTF8, 0, "%s invalid UTF-8 bytes (char. code %s)" }, /* Error */ + { INVALID_UTF16, 0, "%s invalid UTF-16 surrogate pair (char. code %s)" }, /* Error */ + { INVALID_NCR, 0, "%s invalid numeric character reference %s" }, /* Error */ /* ReportEntityError */ - { MISSING_SEMICOLON, 0, "entity \"%1$s\" doesn't end in ';'" }, /* Warning in HTML, Error in XML/XHTML */ - { MISSING_SEMICOLON_NCR, 0, "numeric character reference \"%1$s\" doesn't end in ';'" }, /* Warning in HTML, Error in XML/XHTML */ + { MISSING_SEMICOLON, 0, "entity \"%s\" doesn't end in ';'" }, /* Warning in HTML, Error in XML/XHTML */ + { MISSING_SEMICOLON_NCR, 0, "numeric character reference \"%s\" doesn't end in ';'" }, /* Warning in HTML, Error in XML/XHTML */ { UNESCAPED_AMPERSAND, 0, "unescaped & which should be written as &" }, /* Warning in HTML, Error in XHTML */ - { UNKNOWN_ENTITY, 0, "unescaped & or unknown entity \"%1$s\"" }, /* Error */ + { UNKNOWN_ENTITY, 0, "unescaped & or unknown entity \"%s\"" }, /* Error */ { APOS_UNDEFINED, 0, "named entity ' only defined in XML/XHTML" }, /* Error in HTML (should only occur for HTML input) */ /* ReportAttrError - attribute name */ - { INSERTING_ATTRIBUTE, 0, "%1$s inserting \"%2$s\" attribute" }, /* Warning in CheckLINK, Error otherwise */ - { INSERTING_AUTO_ATTRIBUTE, 0, "%1$s inserting \"%2$s\" attribute using value \"%3$s\"" }, /* Warning */ - { MISSING_ATTR_VALUE, 0, "%1$s attribute \"%2$s\" lacks value" }, /* Warning in CheckUrl, Error otherwise */ - { UNKNOWN_ATTRIBUTE, 0, "%1$s unknown attribute \"%2$s\"" }, /* Error */ - { PROPRIETARY_ATTRIBUTE, 0, "%1$s proprietary attribute \"%2$s\"" }, /* Error */ - { JOINING_ATTRIBUTE, 0, "%1$s joining values of repeated attribute \"%2$s\"" }, /* Error */ - { XML_ATTRIBUTE_VALUE, 0, "%1$s has XML attribute \"%2$s\"" }, /* Error (but deprecated) */ + { INSERTING_ATTRIBUTE, 0, "%s inserting \"%s\" attribute" }, /* Warning in CheckLINK, Error otherwise */ + { INSERTING_AUTO_ATTRIBUTE, 0, "%s inserting \"%s\" attribute using value \"%s\"" }, /* Warning */ + { MISSING_ATTR_VALUE, 0, "%s attribute \"%s\" lacks value" }, /* Warning in CheckUrl, Error otherwise */ + { UNKNOWN_ATTRIBUTE, 0, "%s unknown attribute \"%s\"" }, /* Error */ + { PROPRIETARY_ATTRIBUTE, 0, "%s proprietary attribute \"%s\"" }, /* Error */ + { JOINING_ATTRIBUTE, 0, "%s joining values of repeated attribute \"%s\"" }, /* Error */ + { XML_ATTRIBUTE_VALUE, 0, "%s has XML attribute \"%s\"" }, /* Error (but deprecated) */ /* ReportAttrError - attribute value */ - { XML_ID_SYNTAX, 0, "%1$s ID \"%2$s\" uses XML ID syntax" }, /* Warning if XHTML, Error if HTML */ - { ATTR_VALUE_NOT_LCASE, 0, "%1$s attribute value \"%2$s\" must be lower case for XHTML" }, /* Error if XHTML input, Notice if HTML input and XHTML outpout */ - { PROPRIETARY_ATTR_VALUE, 0, "%1$s proprietary attribute value \"%2$s\"" }, /* Error */ - { ANCHOR_NOT_UNIQUE, 0, "%1$s anchor \"%2$s\" already defined" }, /* Error */ + { XML_ID_SYNTAX, 0, "%s ID \"%s\" uses XML ID syntax" }, /* Warning if XHTML, Error if HTML */ + { ATTR_VALUE_NOT_LCASE, 0, "%s attribute value \"%s\" must be lower case for XHTML" }, /* Error if XHTML input, Notice if HTML input and XHTML outpout */ + { PROPRIETARY_ATTR_VALUE, 0, "%s proprietary attribute value \"%s\"" }, /* Error */ + { ANCHOR_NOT_UNIQUE, 0, "%s anchor \"%s\" already defined" }, /* Error */ /* ReportAttrError - attribute name, attribute value */ - { BAD_ATTRIBUTE_VALUE, 0, "%1$s attribute \"%2$s\" has invalid value \"%3$s\"" }, /* Error */ - { BAD_ATTRIBUTE_VALUE_REPLACED, 0, "%1$s attribute \"%2$s\" had invalid value \"%3$s\" and has been replaced" }, /* Error */ - { INVALID_ATTRIBUTE, 0, "%1$s attribute name \"%2$s\" (value=\"%3$s\") is invalid" }, /* Error */ + { BAD_ATTRIBUTE_VALUE, 0, "%s attribute \"%s\" has invalid value \"%s\"" }, /* Error */ + { BAD_ATTRIBUTE_VALUE_REPLACED, 0, "%s attribute \"%s\" had invalid value \"%s\" and has been replaced" }, /* Error */ + { INVALID_ATTRIBUTE, 0, "%s attribute name \"%s\" (value=\"%s\") is invalid" }, /* Error */ /* ReportAttrError - attribute value, attribute name */ - { REPEATED_ATTRIBUTE, 0, "%1$s dropping value \"%2$s\" for repeated attribute \"%3$s\"" }, /* Error */ + { REPEATED_ATTRIBUTE, 0, "%s dropping value \"%s\" for repeated attribute \"%s\"" }, /* Error */ /* ReportAttrError - no arguments */ - { INVALID_XML_ID, 0, "%1$s cannot copy name attribute to id" }, /* Warning */ - { UNEXPECTED_GT, 0, "%1$s missing '>' for end of tag" }, /* Warning if HTML, Error if XML/XHTML */ - { UNEXPECTED_QUOTEMARK, 0, "%1$s unexpected or duplicate quote mark" }, /* Error */ - { MISSING_QUOTEMARK, 0, "%1$s attribute with missing trailing quote mark" }, /* Error */ - { UNEXPECTED_END_OF_FILE_ATTR, 0, "%1$s end of file while parsing attributes" }, /* Error */ - { ID_NAME_MISMATCH, 0, "%1$s id and name attribute value mismatch" }, /* Error */ - { BACKSLASH_IN_URI, 0, "%1$s URI reference contains backslash. Typo?" }, /* Error */ - { FIXED_BACKSLASH, 0, "%1$s converting backslash in URI to slash" }, /* Error */ - { ILLEGAL_URI_REFERENCE, 0, "%1$s improperly escaped URI reference" }, /* Error */ - { ESCAPED_ILLEGAL_URI, 0, "%1$s escaping malformed URI reference" }, /* Error */ - { NEWLINE_IN_URI, 0, "%1$s discarding newline in URI reference" }, /* Error */ - { WHITE_IN_URI, 0, "%1$s discarding whitespace in URI reference" }, /* Error */ - { UNEXPECTED_EQUALSIGN, 0, "%1$s unexpected '=', expected attribute name" }, /* Error */ - { MISSING_IMAGEMAP, 0, "%1$s should use client-side image map" }, /* Warning (but deprecated) */ + { INVALID_XML_ID, 0, "%s cannot copy name attribute to id" }, /* Warning */ + { UNEXPECTED_GT, 0, "%s missing '>' for end of tag" }, /* Warning if HTML, Error if XML/XHTML */ + { UNEXPECTED_QUOTEMARK, 0, "%s unexpected or duplicate quote mark" }, /* Error */ + { MISSING_QUOTEMARK, 0, "%s attribute with missing trailing quote mark" }, /* Error */ + { UNEXPECTED_END_OF_FILE_ATTR, 0, "%s end of file while parsing attributes" }, /* Error */ + { ID_NAME_MISMATCH, 0, "%s id and name attribute value mismatch" }, /* Error */ + { BACKSLASH_IN_URI, 0, "%s URI reference contains backslash. Typo?" }, /* Error */ + { FIXED_BACKSLASH, 0, "%s converting backslash in URI to slash" }, /* Error */ + { ILLEGAL_URI_REFERENCE, 0, "%s improperly escaped URI reference" }, /* Error */ + { ESCAPED_ILLEGAL_URI, 0, "%s escaping malformed URI reference" }, /* Error */ + { NEWLINE_IN_URI, 0, "%s discarding newline in URI reference" }, /* Error */ + { WHITE_IN_URI, 0, "%s discarding whitespace in URI reference" }, /* Error */ + { UNEXPECTED_EQUALSIGN, 0, "%s unexpected '=', expected attribute name" }, /* Error */ + { MISSING_IMAGEMAP, 0, "%s should use client-side image map" }, /* Warning (but deprecated) */ /* ReportMissingAttr */ - { MISSING_ATTRIBUTE, 0, "%1$s lacks \"%2$s\" attribute" }, /* Error */ + { MISSING_ATTRIBUTE, 0, "%s lacks \"%s\" attribute" }, /* Error */ /* ReportWarning */ - { NESTED_EMPHASIS, 0, "nested emphasis %1$s" }, /* Warning */ + { NESTED_EMPHASIS, 0, "nested emphasis %s" }, /* Warning */ { NESTED_QUOTATION, 0, "nested q elements, possible typo." }, /* Warning */ - { OBSOLETE_ELEMENT, 0, "replacing obsolete element %1$s with %2$s" }, /* Warning */ - { COERCE_TO_ENDTAG_WARN, 0, "<%1$s> is probably intended as " }, /* Warning */ - { REMOVED_HTML5, 0, "%1$s element removed from HTML5" }, /* Warning */ + { OBSOLETE_ELEMENT, 0, "replacing obsolete element %s with %s" }, /* Warning */ + { COERCE_TO_ENDTAG_WARN, 0, "<%s> is probably intended as " }, /* Warning */ + { REMOVED_HTML5, 0, "%s element removed from HTML5" }, /* Warning */ { BAD_BODY_HTML5, 0, "Found attribute on body that is obsolete in HTML5. Use CSS" }, /* Warning */ - { BAD_ALIGN_HTML5, 0, "The align attribute on the %1$s element is obsolete. Use CSS" }, /* Warning */ - { BAD_SUMMARY_HTML5, 0, "The summary attribute on the %1$s element is obsolete in HTML5" }, /* Warning */ + { BAD_ALIGN_HTML5, 0, "The align attribute on the %s element is obsolete. Use CSS" }, /* Warning */ + { BAD_SUMMARY_HTML5, 0, "The summary attribute on the %s element is obsolete in HTML5" }, /* Warning */ /* ReportNotice */ - { TRIM_EMPTY_ELEMENT, 0, "trimming empty %1$s" }, /* Notice */ - { REPLACING_ELEMENT, 0, "replacing %1$s with %2$s" }, /* Notice */ + { TRIM_EMPTY_ELEMENT, 0, "trimming empty %s" }, /* Notice */ + { REPLACING_ELEMENT, 0, "replacing %s with %s" }, /* Notice */ /* ReportError */ - { COERCE_TO_ENDTAG, 0, "<%1$s> is probably intended as " }, /* Error */ - { REPLACING_UNEX_ELEMENT, 0, "replacing unexpected %1$s with %2$s" }, /* Error */ - { MISSING_ENDTAG_FOR, 0, "missing " }, /* Error */ - { MISSING_ENDTAG_BEFORE, 0, "missing before %2$s" }, /* Error */ - { DISCARDING_UNEXPECTED, 0, "discarding unexpected %1$s" }, /* Error */ - { NON_MATCHING_ENDTAG, 0, "replacing unexpected %1$s with " }, /* Error */ - { TAG_NOT_ALLOWED_IN, 0, "%1$s isn't allowed in <%2$s> elements" }, /* Error */ - { MISSING_STARTTAG, 0, "missing <%1$s>" }, /* Error */ - { UNEXPECTED_ENDTAG, 0, "unexpected " }, /* Error */ - { TOO_MANY_ELEMENTS, 0, "too many %1$s elements" }, /* Error */ - { USING_BR_INPLACE_OF, 0, "using
in place of %1$s" }, /* Error */ - { INSERTING_TAG, 0, "inserting implicit <%1$s>" }, /* Error */ - { CANT_BE_NESTED, 0, "%1$s can't be nested" }, /* Error */ - { PROPRIETARY_ELEMENT, 0, "%1$s is not approved by W3C" }, /* Error */ - { ILLEGAL_NESTING, 0, "%1$s shouldn't be nested" }, /* Error */ - { NOFRAMES_CONTENT, 0, "%1$s not inside 'noframes' element" }, /* Error */ - { UNEXPECTED_END_OF_FILE, 0, "unexpected end of file %1$s" }, /* Error */ - { ELEMENT_NOT_EMPTY, 0, "%1$s element not empty or not closed" }, /* Error */ - { UNEXPECTED_ENDTAG_IN, 0, "unexpected in <%2$s>" }, /* Error */ - { TOO_MANY_ELEMENTS_IN, 0, "too many %1$s elements in <%2$s>" }, /* Error */ - { UNESCAPED_ELEMENT, 0, "unescaped %1$s in pre content" }, /* Error (but deprecated) */ + { COERCE_TO_ENDTAG, 0, "<%s> is probably intended as " }, /* Error */ + { REPLACING_UNEX_ELEMENT, 0, "replacing unexpected %s with %s" }, /* Error */ + { MISSING_ENDTAG_FOR, 0, "missing " }, /* Error */ + { MISSING_ENDTAG_BEFORE, 0, "missing before %s" }, /* Error */ + { DISCARDING_UNEXPECTED, 0, "discarding unexpected %s" }, /* Error */ + { NON_MATCHING_ENDTAG, 0, "replacing unexpected %s with " }, /* Error */ + { TAG_NOT_ALLOWED_IN, 0, "%s isn't allowed in <%s> elements" }, /* Error */ + { MISSING_STARTTAG, 0, "missing <%s>" }, /* Error */ + { UNEXPECTED_ENDTAG, 0, "unexpected " }, /* Error */ + { TOO_MANY_ELEMENTS, 0, "too many %s elements" }, /* Error */ + { USING_BR_INPLACE_OF, 0, "using
in place of %s" }, /* Error */ + { INSERTING_TAG, 0, "inserting implicit <%s>" }, /* Error */ + { CANT_BE_NESTED, 0, "%s can't be nested" }, /* Error */ + { PROPRIETARY_ELEMENT, 0, "%s is not approved by W3C" }, /* Error */ + { ILLEGAL_NESTING, 0, "%s shouldn't be nested" }, /* Error */ + { NOFRAMES_CONTENT, 0, "%s not inside 'noframes' element" }, /* Error */ + { UNEXPECTED_END_OF_FILE, 0, "unexpected end of file %s" }, /* Error */ + { ELEMENT_NOT_EMPTY, 0, "%s element not empty or not closed" }, /* Error */ + { UNEXPECTED_ENDTAG_IN, 0, "unexpected in <%s>" }, /* Error */ + { TOO_MANY_ELEMENTS_IN, 0, "too many %s elements in <%s>" }, /* Error */ + { UNESCAPED_ELEMENT, 0, "unescaped %s in pre content" }, /* Error (but deprecated) */ /* ReportError - no arguments */ { DOCTYPE_AFTER_TAGS, 0, " isn't allowed after elements" }, /* Error */ @@ -444,10 +442,10 @@ static languageDefinition language_en = { whichPluralForm_en, { /* ReportFatal */ { SUSPECTED_MISSING_QUOTE, 0, "missing quote mark for attribute value" }, /* Error? (not really sometimes) */ { DUPLICATE_FRAMESET, 0, "repeated FRAMESET element" }, /* Error */ - { UNKNOWN_ELEMENT, 0, "%1$s is not recognized!" }, /* Error */ + { UNKNOWN_ELEMENT, 0, "%s is not recognized!" }, /* Error */ /* Info */ - { PREVIOUS_LOCATION, 0, "<%1$s> previously mentioned" }, /* Info */ + { PREVIOUS_LOCATION, 0, "<%s> previously mentioned" }, /* Info */ #if SUPPORT_ACCESSIBILITY_CHECKS @@ -1594,7 +1592,7 @@ static languageDefinition language_en = { whichPluralForm_en, { { TC_LABEL_LANG, 0, "lang" }, { TC_LABEL_LEVL, 0, "level" }, { TC_LABEL_OPT, 0, "option" }, - { TC_MAIN_ERROR_LOAD_CONFIG, 0, "Loading config file \"%1$s\" failed, err = %2$d" }, + { TC_MAIN_ERROR_LOAD_CONFIG, 0, "Loading config file \"%s\" failed, err = %d" }, { TC_OPT_ACCESS, 0, "do additional accessibility checks ( = 0, 1, 2, 3). 0 is " "assumed if is missing." @@ -1675,16 +1673,16 @@ static languageDefinition language_en = { whichPluralForm_en, { TC_STRING_CONF_NOTE, 0, "Values marked with an *asterisk are calculated internally by HTML Tidy" }, - { TC_STRING_OPT_NOT_DOCUMENTED, 0, "Warning: option `%1$s' is not documented." }, + { TC_STRING_OPT_NOT_DOCUMENTED, 0, "Warning: option `%s' is not documented." }, { TC_STRING_OUT_OF_MEMORY, 0, "Out of memory. Bailing out." }, - { TC_STRING_FATAL_ERROR, 0, "Fatal error: impossible value for id='%1$d'." }, + { TC_STRING_FATAL_ERROR, 0, "Fatal error: impossible value for id='%d'." }, { TC_STRING_FILE_MANIP, 0, "File manipulation" }, { TC_STRING_PROCESS_DIRECTIVES, 0, "Processing directives" }, { TC_STRING_CHAR_ENCODING, 0, "Character encodings" }, { TC_STRING_LANG_MUST_SPECIFY, 0, "A POSIX or Windows locale must be specified." }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TC_STRING_LANG_NOT_FOUND, 0, "Tidy doesn't have language '%1$s,' will use '%2$s' instead." + TC_STRING_LANG_NOT_FOUND, 0, "Tidy doesn't have language '%s,' will use '%s' instead." }, { TC_STRING_MISC, 0, "Miscellaneous" }, @@ -1692,34 +1690,34 @@ static languageDefinition language_en = { whichPluralForm_en, { { TC_STRING_MUST_SPECIFY, 0, "A Tidy option name must be specified." }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TC_STRING_UNKNOWN_OPTION, 0, "HTML Tidy: unknown option: %1$c" + TC_STRING_UNKNOWN_OPTION, 0, "HTML Tidy: unknown option: %c" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TC_STRING_UNKNOWN_OPTION_B, 0, "HTML Tidy: unknown option." }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TC_STRING_VERS_A, 0, "HTML Tidy for %1$s version %2$s" + TC_STRING_VERS_A, 0, "HTML Tidy for %s version %s" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TC_STRING_VERS_B, 0, "HTML Tidy version %1$s" + TC_STRING_VERS_B, 0, "HTML Tidy version %s" }, {/* This console output should be limited to 78 characters per line. - - %1$n represents the name of the executable from the file system, and is mostly like going to be "tidy". - - %2$2 represents a version number, typically x.x.xx. + - %n represents the name of the executable from the file system, and is mostly like going to be "tidy". + - %2 represents a version number, typically x.x.xx. - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TC_TXT_HELP_1, 0, "\n" - "%1$s [options...] [file...] [options...] [file...]\n" + "%s [options...] [file...] [options...] [file...]\n" "Utility to clean up and pretty print HTML/XHTML/XML.\n" "\n" - "This is modern HTML Tidy version %2$s.\n" + "This is modern HTML Tidy version %s.\n" "\n" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. - - %1$s represents the platform, for example, "Mac OS X" or "Windows". */ + - %s represents the platform, for example, "Mac OS X" or "Windows". */ TC_TXT_HELP_2A, 0, - "Command Line Arguments for HTML Tidy for %1$s:" + "Command Line Arguments for HTML Tidy for %s:" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TC_TXT_HELP_2B, 0, diff --git a/src/language_en_gb.h b/src/language_en_gb.h index 487c721..7592104 100644 --- a/src/language_en_gb.h +++ b/src/language_en_gb.h @@ -1,4 +1,4 @@ -#ifndef language_en_gb_h +#ifndef language_en_gb_h #define language_en_gb_h /* * language_en_gb.h @@ -20,7 +20,7 @@ * * Orginating PO file metadata: * PO_LAST_TRANSLATOR=jderry - * PO_REVISION_DATE=2016-01-23 16:04:27 + * PO_REVISION_DATE=2016-01-26 14:38:30 */ #ifdef _MSC_VER diff --git a/src/language_es.h b/src/language_es.h index 3a79b0d..44d9f0e 100644 --- a/src/language_es.h +++ b/src/language_es.h @@ -1,4 +1,4 @@ -#ifndef language_es_h +#ifndef language_es_h #define language_es_h /* * language_es.h @@ -20,7 +20,7 @@ * * Orginating PO file metadata: * PO_LAST_TRANSLATOR=jderry - * PO_REVISION_DATE=2016-01-23 16:04:55 + * PO_REVISION_DATE=2016-01-26 14:38:30 */ #ifdef _MSC_VER @@ -61,26 +61,26 @@ static languageDefinition language_es = { whichPluralForm_es, { - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TEXT_GENERAL_INFO_PLEA, 0, "\n" - "\xc2\xbfLe gustar\xc3\xad""a ver Tidy en un espa\xc3\xb1ol correcto? Por favor considere \n" - "ayudarnos a localizar HTML Tidy. Para m\xc3\xa1s detalles consulte \n" + "¿Le gustaría ver Tidy en un español correcto? Por favor considere \n" + "ayudarnos a localizar HTML Tidy. Para más detalles consulte \n" "https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md \n" }, {/* Please use _only_ , , , and
. It's very important that
be self-closing in this manner! - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TidyMakeClean, 0, - "Esta opci\xc3\xb3n especifica si Tidy debe realizar la limpieza de alg\xc3\xban legado etiquetas de " - "presentaci\xc3\xb3n (actualmente <i>, <b>, <center> cuando encerrados dentro de las etiquetas apropiadas en l\xc3\xadnea y <font>). Si se establece en yes, entonces etiquetas existentes ser\xc3\xa1n reemplazados " - "con CSS <style> y estructural markup seg\xc3\xban corresponda. " + "Esta opción especifica si Tidy debe realizar la limpieza de algún legado etiquetas de " + "presentación (actualmente <i>, <b>, <center> cuando encerrados dentro de las etiquetas apropiadas en línea y <font>). Si se establece en yes, entonces etiquetas existentes serán reemplazados " + "con CSS <style> y estructural markup según corresponda. " }, #if SUPPORT_ASIAN_ENCODINGS {/* Please use _only_ , , , and
. It's very important that
be self-closing in this manner! - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TidyNCR, 0, "Esta opci\xc3\xb3n especifica si Tidy debe permitir referencias de caracteres num\xc3\xa9ricos. " + TidyNCR, 0, "Esta opción especifica si Tidy debe permitir referencias de caracteres numéricos. " }, #endif /* SUPPORT_ASIAN_ENCODINGS */ @@ -88,22 +88,22 @@ static languageDefinition language_es = { whichPluralForm_es, { - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TC_TXT_HELP_LANG_1, 0, "\n" - "La opci\xc3\xb3n --language (o --lang) indica el lenguaje Tidy debe \n" + "La opción --language (o --lang) indica el lenguaje Tidy debe \n" "utilizar para comunicar su salida. Tenga en cuenta que esto no es \n" - "un servicio de traducci\xc3\xb3n de documentos, y s\xc3\xb3lo afecta a los mensajes \n" + "un servicio de traducción de documentos, y sólo afecta a los mensajes \n" "que Tidy comunica a usted. \n" "\n" - "Cuando se utiliza la l\xc3\xadnea de comandos el argumento --language debe \n" - "utilizarse antes de cualquier argumento que dan lugar a la producci\xc3\xb3n, \n" - "de lo contrario Tidy producir\xc3\xa1 la salida antes de que se conozca el \n" + "Cuando se utiliza la línea de comandos el argumento --language debe \n" + "utilizarse antes de cualquier argumento que dan lugar a la producción, \n" + "de lo contrario Tidy producirá la salida antes de que se conozca el \n" "idioma a utilizar. \n" "\n" - "Adem\xc3\xa1s de los c\xc3\xb3""digos de idioma est\xc3\xa1ndar POSIX, Tidy es capaz de \n" - "entender c\xc3\xb3""digos de idioma legados de Windows. Tenga en cuenta que \n" - "este lista indica los c\xc3\xb3""digos Tidy entiende, y no indica que \n" - "actualmente el idioma est\xc3\xa1 instalado. \n" + "Además de los códigos de idioma estándar POSIX, Tidy es capaz de \n" + "entender códigos de idioma legados de Windows. Tenga en cuenta que \n" + "este lista indica los códigos Tidy entiende, y no indica que \n" + "actualmente el idioma está instalado. \n" "\n" - "La columna m\xc3\xa1s a la derecha indica c\xc3\xb3mo Tidy comprender\xc3\xa1 el \n" + "La columna más a la derecha indica cómo Tidy comprenderá el \n" "legado nombre de Windows.\n" "\n" }, @@ -111,23 +111,23 @@ static languageDefinition language_es = { whichPluralForm_es, { - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TC_TXT_HELP_LANG_2, 0, "\n" - "Los siguientes idiomas est\xc3\xa1n instalados actualmente en Tidy. Tenga \n" - "en cuenta que no hay garant\xc3\xad""a de que est\xc3\xa1n completos; s\xc3\xb3lo quiere decir \n" - "que un desarrollador u otro comenzaron a a\xc3\xb1""adir el idioma indicado. \n" + "Los siguientes idiomas están instalados actualmente en Tidy. Tenga \n" + "en cuenta que no hay garantía de que están completos; sólo quiere decir \n" + "que un desarrollador u otro comenzaron a añadir el idioma indicado. \n" "\n" "Localizaciones incompletas por defecto se usan \"en\" cuando sea \n" - "necesario. \xc2\xa1""Favor de informar los desarrolladores de estes casos! \n" + "necesario. ¡Favor de informar los desarrolladores de estes casos! \n" "\n" }, {/* This console output should be limited to 78 characters per line. - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TC_TXT_HELP_LANG_3, 0, "\n" - "Si Tidy es capaz de determinar la configuraci\xc3\xb3n regional entonces \n" - "Tidy utilizar\xc3\xa1 el lenguaje de forma autom\xc3\xa1tica de la configuraci\xc3\xb3n \n" + "Si Tidy es capaz de determinar la configuración regional entonces \n" + "Tidy utilizará el lenguaje de forma automática de la configuración \n" "regional. Por ejemplo los sistemas de tipo Unix utilizan los variables \n" - "$LANG y/o $LC_ALL. Consulte a su documentaci\xc3\xb3n del sistema para \n" - "obtener m\xc3\xa1s informaci\xc3\xb3n.\n" + "$LANG y/o $LC_ALL. Consulte a su documentación del sistema para \n" + "obtener más información.\n" "\n" }, diff --git a/src/language_es_mx.h b/src/language_es_mx.h index 7afa7d3..1ef8b39 100644 --- a/src/language_es_mx.h +++ b/src/language_es_mx.h @@ -1,4 +1,4 @@ -#ifndef language_es_mx_h +#ifndef language_es_mx_h #define language_es_mx_h /* * language_es_mx.h @@ -20,7 +20,7 @@ * * Orginating PO file metadata: * PO_LAST_TRANSLATOR=jderry - * PO_REVISION_DATE=2016-01-23 16:04:41 + * PO_REVISION_DATE=2016-01-26 14:38:30 */ #ifdef _MSC_VER @@ -61,8 +61,8 @@ static languageDefinition language_es_mx = { whichPluralForm_es_mx, { - The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ TEXT_GENERAL_INFO_PLEA, 0, "\n" - "\xc2\xbfLe gustar\xc3\xad""a ver Tidy en adecuada, espa\xc3\xb1ol mexicano? Por favor considere \n" - "ayudarnos a localizar HTML Tidy. Para m\xc3\xa1s detalles consulte \n" + "¿Le gustaría ver Tidy en adecuada, español mexicano? Por favor considere \n" + "ayudarnos a localizar HTML Tidy. Para más detalles consulte \n" "https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md \n" }, diff --git a/src/language_zh_cn.h b/src/language_zh_cn.h index 6123145..2a3bb62 100644 --- a/src/language_zh_cn.h +++ b/src/language_zh_cn.h @@ -1,4 +1,4 @@ -#ifndef language_zh_cn_h +#ifndef language_zh_cn_h #define language_zh_cn_h /* * language_zh_cn.h @@ -20,7 +20,7 @@ * * Orginating PO file metadata: * PO_LAST_TRANSLATOR=jderry - * PO_REVISION_DATE=2016-01-23 16:05:15 + * PO_REVISION_DATE=2016-01-26 14:38:30 */ #ifdef _MSC_VER @@ -57,14 +57,14 @@ static languageDefinition language_zh_cn = { whichPluralForm_zh_cn, { {/* Specify the ll or ll_cc language code here. */ TIDY_LANGUAGE, 0, "zh_cn" }, - { FILE_CANT_OPEN, 0, "\xe6\x97\xa0\xe6\xb3\x95\xe6\x89\x93\xe5\xbc\x80\xe2\x80\x9d%1$s\xe2\x80\x9d\n" }, - { LINE_COLUMN_STRING, 0, "\xe8\xa1\x8c %1$d \xe5\x88\x97 %2$d - " }, - { STRING_CONTENT_LOOKS, 0, "\xe6\x96\x87\xe6\xa1\xa3\xe5\x86\x85\xe5\xae\xb9\xe7\x9c\x8b\xe8\xb5\xb7\xe6\x9d\xa5\xe5\x83\x8f %1$s" }, + { FILE_CANT_OPEN, 0, "无法打开”%s”\n" }, + { LINE_COLUMN_STRING, 0, "行 %d 列 %d - " }, + { STRING_CONTENT_LOOKS, 0, "文档内容看起来像 %s" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TC_STRING_VERS_A, 0, "HTML Tidy \xe7\x89\x88\xe6\x9c\xac %2$s \xe7\x94\xa8\xe4\xba\x8e %1$s" + TC_STRING_VERS_A, 0, "HTML Tidy 用于 %s 版本 %s" }, {/* The strings "Tidy" and "HTML Tidy" are the program name and must not be translated. */ - TC_STRING_VERS_B, 0, "HTML Tidy \xe7\x89\x88\xe6\x9c\xac %1$s" + TC_STRING_VERS_B, 0, "HTML Tidy 版本 %s" }, {/* This MUST be present and last. */ diff --git a/src/tmbstr.c b/src/tmbstr.c index 5fcf515..8fb0611 100644 --- a/src/tmbstr.c +++ b/src/tmbstr.c @@ -8,9 +8,6 @@ #include "forward.h" #include "tmbstr.h" #include "lexer.h" -#if defined(_WIN32) -#include "win_vsnprintf.h" -#endif /* like strdup but using an allocator */ tmbstr TY_(tmbstrdup)( TidyAllocator *allocator, ctmbstr str ) diff --git a/src/win_vsnprintf.c b/src/win_vsnprintf.c deleted file mode 100644 index 5247466..0000000 --- a/src/win_vsnprintf.c +++ /dev/null @@ -1,129 +0,0 @@ -/* win_vsnprintf.h -- Provides standard vsnprintf.h and - * additional printf routines to Tidy on Windows. - * - * Created by Jim Derry on 1/8/16. - * (c) 2016 HTACG - * See tidy.h and access.h for the copyright notice. - */ - -#include -#include -#include "forward.h" -#include "win_vsnprintf.h" - -#if defined(__MINGW32__) -/* minGW.org doesn't automatically include these in its `libmsvcrt.a` although - * `dumpbin /exports C:\Windows\System32\msvcrt.dll` indicates they are present. - * We include our own import library `libmsvcrt_tidy.a` that adds these missing - * definitions. - * - * Unfortunately `msvcrt.dll` only includes `_vscprintf_p_l` for some strange - * reason, which takes a locale_t which is not available to minGW. Since we're - * going to pass NULL anyway, we can import it as a void*. - */ -extern int _vscprintf_p_l(const char *fmt, void *locale, va_list ap); -extern int _vsprintf_p(char *s, uint n, const char *fmt, va_list ap); -#endif - - -#if defined(_WIN32) - -static char* TY_(new_string)( const ctmbstr fmt, va_list args ); - - -/* Provides a proper `vsnprintf` for Windows including correct return - * values and with support for positional arguments. - * Adapted from FFmpeg -- LGPL - */ -int TY_(win_vsnprintf)(char *s, uint n, const char *fmt, va_list ap) -{ - int ret; - va_list ap_copy; - - if (n == 0) - return _vscprintf_p_l(fmt, NULL, ap); - - memset(s, 0, n); - va_copy(ap_copy, ap); - ret = _vsprintf_p(s, n, fmt, ap_copy); - va_end(ap_copy); - if (ret == -1) - ret = _vscprintf(fmt, ap); - - return ret; -} - - -/* Provides a proper `snprintf` for Windows including correct return - * values and with support for positional arguments. - */ -int TY_(win_snprintf)(char *s, uint n, const char *fmt, ...) -{ - int retval; - va_list args; - va_start(args, fmt); - retval = TY_(win_vsnprintf)(s, n, fmt, args); - va_end(args); - return retval; -} - - -/* Provides a wrapper for `printf` using the improved `vsnprintf`. */ -int TY_(win_printf)(const char *s, ...) -{ - int result; - char *out_string; - va_list args; - va_start(args, s); - out_string = TY_(new_string)( s, args ); - va_end(args); - - result = printf("%s", out_string); - - if (out_string) - free(out_string); - - return result; -} - - -/* Provides a wrapper for `fprintf` using the improved `vsnprintf`. */ -int TY_(win_fprintf)(FILE *f, const char *s, ...) -{ - int result; - char *out_string; - va_list args; - va_start(args, s); - out_string = TY_(new_string)( s, args ); - va_end(args); - - result = fprintf(f, "%s", out_string); - - if (out_string) - free(out_string); - - return result; -} - - -/* Convenience to create a new string with a format and arguments. - */ -static char* TY_(new_string)( const ctmbstr fmt, va_list args ) -{ - char *result = NULL; - int len = 0; - - len = TY_(win_vsnprintf)( result, 0, fmt, args ); - if (!(result = malloc( len + 1) )) - { /* @todo */ - fprintf(stderr, "MALLOC FAILED in win_vsnprintf.c creating a new string!"); - exit(2); - } - - TY_(win_vsnprintf)( result, len + 1, fmt, args ); - - return result; -} - - -#endif /* defined(_WIN32) */ diff --git a/src/win_vsnprintf.h b/src/win_vsnprintf.h deleted file mode 100644 index 714cc5f..0000000 --- a/src/win_vsnprintf.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef __win_vsnprintf_h__ -#define __win_vsnprintf_h__ - -/* win_vsnprintf.h -- Provides standard vsnprintf.h and - * additional printf routines to Tidy on Windows. - * - * Created by Jim Derry on 1/8/16. - * (c) 2016 HTACG - * See tidy.h and access.h for the copyright notice. - */ - -#if defined(_WIN32) - -#include -#include "tidyplatform.h" -#include "forward.h" - - -/* Provides a proper `vsnprintf` for Windows including correct return - * values and with support for positional arguments. - */ -int TY_(win_vsnprintf)(char *s, uint n, const char *fmt, va_list ap); - - -/* Provides a proper `snprintf` for Windows including correct return - * values and with support for positional arguments. - */ -int TY_(win_snprintf)(char *s, uint n, const char *fmt, ...); - - -/* Provides a wrapper for `printf` using the improved `vsnprintf`. */ -int TY_(win_printf)(const char *s, ...); - - -/* Provides a wrapper for `fprintf` using the improved `vsnprintf`. */ -int TY_(win_fprintf)(FILE *f, const char *s, ...); - - -#endif /* defined(_WIN32) */ -#endif /* __win_vsnprintf_h_ */