[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
trans-coord/gnun/server/gnun add-fuzzy-diff.in
From: |
Pavel Kharitonov |
Subject: |
trans-coord/gnun/server/gnun add-fuzzy-diff.in |
Date: |
Fri, 25 Nov 2011 16:57:43 +0000 |
CVSROOT: /sources/trans-coord
Module name: trans-coord
Changes by: Pavel Kharitonov <ineiev> 11/11/25 16:57:43
Added files:
gnun/server/gnun: add-fuzzy-diff.in
Log message:
add
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/add-fuzzy-diff.in?cvsroot=trans-coord&rev=1.1
Patches:
Index: add-fuzzy-diff.in
===================================================================
RCS file: add-fuzzy-diff.in
diff -N add-fuzzy-diff.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ add-fuzzy-diff.in 25 Nov 2011 16:57:43 -0000 1.1
@@ -0,0 +1,103 @@
+#! @SED@ -nf
+
+# Copyright (C) 2011 Free Software Foundation, Inc.
+
+# This file is part of GNUnited Nations.
+
+# GNUnited Nations 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.
+
+# GNUnited Nations 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 GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
+
+# Prepend fuzzy translations with wdiff from the previous msgid
+# to current msgid. The difference is put in comment lines beginning
+# with `# | '; if such comments are present in the PO file, they are
+# removed by the script.
+
+# Remove old difference.
+/^# |[| ]/d;
+# Add new difference.
+/^#, fuzzy\>/{
+# Read previous and current msgids.
+ N; /\n#| msgid "/! b obsolete;
+ :read-previous;
+ N; /\n#| [^\n]*$/ b read-previous;
+ /\nmsgid "[^\n]*$/! b obsolete;
+ :read-current;
+ N; /\nmsgstr "/ b create-file;
+ /\n"[^\n]*$/b read-current; b obsolete;
+# Create a temporary file. Its name shall be kept in the last line
+# of both pattern and hold space.
+ :create-file;
+# It seems to be considerably faster to create a new file than
+# to rewrite an existing one on fencepost (?)
+ x; s%.*%mktemp addiff.XXXXXXXXXXXXX%e;
+ H; g;
+# Cut out the lines with current msgid.
+ s/\nmsgid ".*\(\n[^\n]*\)$/\1/;
+# Extract previous msgid.
+ s/^#, fuzzy\>[^\n]*\n//; s/^#| msgid "\([^\n]*\)"[^\n]*\n/\1\n/;
+ s/\nmsgid [^\n]*\n/\n/;
+ s/\(" *\)\?\n#| "//g;
+ s/" *\n/\n/; s/^\n*//;
+# Escape single quotes to workaround command line.
+ s/'/'"'"'/g;
+# Escape `\n's to workaround wdiff.
+ s/\\n/\\\\n/g;
+# Output previous msgid to temporary file.
+ s%^\(.*\)\n%echo '\1' > %e;
+# Extract current msgid.
+ g; s/\nmsgstr ".*\n/\n/; s/^.*\nmsgid "\([^\n]*\)"/\1/;
+ s/\(" *\)\?\n"//g; s/" *\n/\n/; s/^\n*//; s/'/'"'"'/g; s/\\n/\\\\n/g;
+# Invoke diff program and remove the temporary file.
+ s%\(.*\)\n\([^\n]*\)$%echo '\1' | @WDIFF@ \2 -; rm \2%e;
+ s/\n//g; t rm-duplicates;
+# A little bit of postprocessing.
+ :rm-duplicates; s/\[-\(.*\)-\] *{+\1+}/\1/; t rm-duplicates;
+ :merge-tails;
+ s/\[-\(.\)\?\(.\+\)-\] *{+\(.\)\?\2+}/\[-\1-\]{+\3+}\2/;
+ t merge-tails;
+ :merge-heads;
+ s/\[-\(.\+\)\(.\)\?-\] *{+\1\(.\)\?+}/\1\[-\2-\]{+\3+}/;
+ t merge-heads;
+ :merge-wings;
+ s/\[-\(.\+\)\(.\)\?\(.\+\)-\] *{+\1\(.\)\?\3+}/\1\[-\2-\]{+\4+}\3/;
+ t merge-wings;
+ s/\[--\]//g; s/{++}//g;
+ /{+.*+}/ b format; /\[-.*-\]/ b format;
+ s/.*/# || No change detected. The change might only be in amounts of
spaces./
+ b output-diff;
+ :format;
+# fmt -w 75 the result.
+# Remove possible long word beginning the string
+ s/^\([^ ]\{75,\}\) \(.*\)$/\1\n\2/;
+ :fmt;
+# Long word; leave on the line.
+ s/\(\n[^\n ]\{75,\}\) \([^\n]*\)$/\1\n\2/; t fmt;
+# There is a space: split the line.
+ s/\([^\n]\{75\}\)\([^\n]\+\)$/\1\n\2/; t proceed;
+# No more characters.
+ b fmt-done;
+ :proceed;
+# Move the newline to the last space in the line.
+ s/ \([^\n ]*\)\n\([^\n]*\)$/\n\1\2/; b fmt;
+ :fmt-done;
+# Prepend every line with `# | '.
+ s/\(^\|\n\)/\1# | /g;
+ :output-diff; p;
+# Pass original content to output.
+ g; s/\n\([^\n]*\)$//
+ :obsolete
+# We've got something different, e.g. obsolete msg or no previous msgid;
+# just pass what we have.
+}
+# Otherwise, just print the input.
+p
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- trans-coord/gnun/server/gnun add-fuzzy-diff.in,
Pavel Kharitonov <=