changeset 1293:ca609330a28c draft

move qt-specific scripts to qt-specific directory in scripts/
author Wladimir J. van der Laan <laanwj@gmail.com>
date Sun, 18 Sep 2011 12:04:03 +0200
parents 024a12d5558d
children 8c70236c9f87
files scripts/extract_strings_qt.py scripts/img/reload.xcf scripts/make_spinner.py scripts/make_windows_icon.py scripts/qt/extract_strings_qt.py scripts/qt/img/reload.xcf scripts/qt/make_spinner.py scripts/qt/make_windows_icon.py
diffstat 8 files changed, 115 insertions(+), 115 deletions(-) [+]
line wrap: on
line diff
deleted file mode 100755
--- a/scripts/extract_strings_qt.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/python
-'''
-Extract _("...") strings for translation and convert to Qt4 stringdefs so that
-they can be picked up by Qt linguist.
-'''
-from subprocess import Popen, PIPE
-
-OUT_CPP="src/qt/bitcoinstrings.cpp"
-EMPTY=['""']
-
-def parse_po(text):
-    """
-    Parse 'po' format produced by xgettext.
-    Return a list of (msgid,msgstr) tuples.
-    """
-    messages = []
-    msgid = []
-    msgstr = []
-    in_msgid = False
-    in_msgstr = False
-
-    for line in text.split('\n'):
-        line = line.rstrip('\r')
-        if line.startswith('msgid '):
-            if in_msgstr:
-                messages.append((msgid, msgstr))
-                in_msgstr = False
-            # message start
-            in_msgid = True
-            
-            msgid = [line[6:]]
-        elif line.startswith('msgstr '):
-            in_msgid = False
-            in_msgstr = True
-            msgstr = [line[7:]]
-        elif line.startswith('"'):
-            if in_msgid:
-                msgid.append(line)
-            if in_msgstr:
-                msgstr.append(line)
-
-    if in_msgstr:
-        messages.append((msgid, msgstr))
-
-    return messages
-
-files = ['src/base58.h', 'src/bignum.h', 'src/db.cpp', 'src/db.h', 'src/headers.h', 'src/init.cpp', 'src/init.h', 'src/irc.cpp', 'src/irc.h', 'src/key.h', 'src/main.cpp', 'src/main.h', 'src/net.cpp', 'src/net.h', 'src/noui.h', 'src/script.cpp', 'src/script.h', 'src/serialize.h', 'src/strlcpy.h', 'src/uint256.h', 'src/util.cpp', 'src/util.h']
-
-# xgettext -n --keyword=_ $FILES
-child = Popen(['xgettext','--output=-','-n','--keyword=_'] + files, stdout=PIPE)
-(out, err) = child.communicate()
-
-messages = parse_po(out) 
-
-f = open(OUT_CPP, 'w')
-f.write('#include <QtGlobal>\n')
-f.write('// Automatically generated by extract_strings.py\n')
-f.write('static const char *bitcoin_strings[] = {')
-for (msgid, msgstr) in messages:
-    if msgid != EMPTY:
-        f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid)))
-f.write('};')
-f.close()
deleted file mode 100644
index dc8be62831673c2e99f05f5e5b42581e6e4e1db1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
--- a/scripts/make_spinner.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-# W.J. van der Laan, 2011
-# Make spinning .mng animation from a .png
-# Requires imagemagick 6.7+
-from __future__ import division
-from os import path
-from PIL import Image
-from subprocess import Popen
-
-SRC='img/reload_scaled.png'
-DST='../src/qt/res/movies/update_spinner.mng'
-TMPDIR='/tmp'
-TMPNAME='tmp-%03i.png'
-NUMFRAMES=35
-FRAMERATE=10.0
-CONVERT='convert'
-CLOCKWISE=True
-DSIZE=(16,16)
-
-im_src = Image.open(SRC)
-
-if CLOCKWISE:
-    im_src = im_src.transpose(Image.FLIP_LEFT_RIGHT)
-
-def frame_to_filename(frame):
-    return path.join(TMPDIR, TMPNAME % frame)
-
-frame_files = []
-for frame in xrange(NUMFRAMES):
-    rotation = (frame + 0.5) / NUMFRAMES * 360.0
-    if CLOCKWISE:
-        rotation = -rotation
-    im_new = im_src.rotate(rotation, Image.BICUBIC)
-    im_new.thumbnail(DSIZE, Image.ANTIALIAS)
-    outfile = frame_to_filename(frame)
-    im_new.save(outfile, 'png')
-    frame_files.append(outfile)
-
-p = Popen([CONVERT, "-delay", str(FRAMERATE), "-dispose", "2"] + frame_files + [DST])
-p.communicate()
-
-
-
deleted file mode 100755
--- a/scripts/make_windows_icon.py
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-# create multiresolution windows icon
-ICON_SRC=../src/qt/res/icons/bitcoin.png
-ICON_DST=../src/qt/res/icons/bitcoin.ico
-convert ${ICON_SRC} -resize 16x16 bitcoin-16.png
-convert ${ICON_SRC} -resize 32x32 bitcoin-32.png
-convert ${ICON_SRC} -resize 48x48 bitcoin-48.png
-convert bitcoin-16.png bitcoin-32.png bitcoin-48.png ${ICON_DST}
-
new file mode 100755
--- /dev/null
+++ b/scripts/qt/extract_strings_qt.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+'''
+Extract _("...") strings for translation and convert to Qt4 stringdefs so that
+they can be picked up by Qt linguist.
+'''
+from subprocess import Popen, PIPE
+
+OUT_CPP="src/qt/bitcoinstrings.cpp"
+EMPTY=['""']
+
+def parse_po(text):
+    """
+    Parse 'po' format produced by xgettext.
+    Return a list of (msgid,msgstr) tuples.
+    """
+    messages = []
+    msgid = []
+    msgstr = []
+    in_msgid = False
+    in_msgstr = False
+
+    for line in text.split('\n'):
+        line = line.rstrip('\r')
+        if line.startswith('msgid '):
+            if in_msgstr:
+                messages.append((msgid, msgstr))
+                in_msgstr = False
+            # message start
+            in_msgid = True
+            
+            msgid = [line[6:]]
+        elif line.startswith('msgstr '):
+            in_msgid = False
+            in_msgstr = True
+            msgstr = [line[7:]]
+        elif line.startswith('"'):
+            if in_msgid:
+                msgid.append(line)
+            if in_msgstr:
+                msgstr.append(line)
+
+    if in_msgstr:
+        messages.append((msgid, msgstr))
+
+    return messages
+
+files = ['src/base58.h', 'src/bignum.h', 'src/db.cpp', 'src/db.h', 'src/headers.h', 'src/init.cpp', 'src/init.h', 'src/irc.cpp', 'src/irc.h', 'src/key.h', 'src/main.cpp', 'src/main.h', 'src/net.cpp', 'src/net.h', 'src/noui.h', 'src/script.cpp', 'src/script.h', 'src/serialize.h', 'src/strlcpy.h', 'src/uint256.h', 'src/util.cpp', 'src/util.h']
+
+# xgettext -n --keyword=_ $FILES
+child = Popen(['xgettext','--output=-','-n','--keyword=_'] + files, stdout=PIPE)
+(out, err) = child.communicate()
+
+messages = parse_po(out) 
+
+f = open(OUT_CPP, 'w')
+f.write('#include <QtGlobal>\n')
+f.write('// Automatically generated by extract_strings.py\n')
+f.write('static const char *bitcoin_strings[] = {')
+for (msgid, msgstr) in messages:
+    if msgid != EMPTY:
+        f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid)))
+f.write('};')
+f.close()
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dc8be62831673c2e99f05f5e5b42581e6e4e1db1
GIT binary patch
literal 25292
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
DhY;cx
new file mode 100755
--- /dev/null
+++ b/scripts/qt/make_spinner.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+# W.J. van der Laan, 2011
+# Make spinning .mng animation from a .png
+# Requires imagemagick 6.7+
+from __future__ import division
+from os import path
+from PIL import Image
+from subprocess import Popen
+
+SRC='img/reload_scaled.png'
+DST='../../src/qt/res/movies/update_spinner.mng'
+TMPDIR='/tmp'
+TMPNAME='tmp-%03i.png'
+NUMFRAMES=35
+FRAMERATE=10.0
+CONVERT='convert'
+CLOCKWISE=True
+DSIZE=(16,16)
+
+im_src = Image.open(SRC)
+
+if CLOCKWISE:
+    im_src = im_src.transpose(Image.FLIP_LEFT_RIGHT)
+
+def frame_to_filename(frame):
+    return path.join(TMPDIR, TMPNAME % frame)
+
+frame_files = []
+for frame in xrange(NUMFRAMES):
+    rotation = (frame + 0.5) / NUMFRAMES * 360.0
+    if CLOCKWISE:
+        rotation = -rotation
+    im_new = im_src.rotate(rotation, Image.BICUBIC)
+    im_new.thumbnail(DSIZE, Image.ANTIALIAS)
+    outfile = frame_to_filename(frame)
+    im_new.save(outfile, 'png')
+    frame_files.append(outfile)
+
+p = Popen([CONVERT, "-delay", str(FRAMERATE), "-dispose", "2"] + frame_files + [DST])
+p.communicate()
+
+
+
new file mode 100755
--- /dev/null
+++ b/scripts/qt/make_windows_icon.py
@@ -0,0 +1,9 @@
+#!/bin/bash
+# create multiresolution windows icon
+ICON_SRC=../../src/qt/res/icons/bitcoin.png
+ICON_DST=../../src/qt/res/icons/bitcoin.ico
+convert ${ICON_SRC} -resize 16x16 bitcoin-16.png
+convert ${ICON_SRC} -resize 32x32 bitcoin-32.png
+convert ${ICON_SRC} -resize 48x48 bitcoin-48.png
+convert bitcoin-16.png bitcoin-32.png bitcoin-48.png ${ICON_DST}
+