From 2ddde1587516f5d14aa9e41721708274fda64c6a Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 27 May 2010 21:40:44 +0200 Subject: [PATCH 001/120] Moved Jonathan's JS over to jQuery --- openlp/plugins/remotes/html/index.html | 116 +++++++++++++++++++---- openlp/plugins/remotes/html/jquery.js | 19 ++++ openlp/plugins/remotes/lib/httpserver.py | 60 ++++++------ 3 files changed, 145 insertions(+), 50 deletions(-) create mode 100755 openlp/plugins/remotes/html/jquery.js diff --git a/openlp/plugins/remotes/html/index.html b/openlp/plugins/remotes/html/index.html index 25b08fd43..bb2030039 100644 --- a/openlp/plugins/remotes/html/index.html +++ b/openlp/plugins/remotes/html/index.html @@ -1,10 +1,14 @@ - - -OpenLP Controller - + - + + +

OpenLP Controller

- - -
- - -
- - -
- - +

Service Manager

+
+

(Click service item to go live.)

+
+ Controls +
+ +
+
+ + +
+

- - (Click service item to go live.) -
+

Slide Controller

+
+

(Click verse to display.)

+
+ Controls +
+ +
+
+ + +
+

- - (Click verse to display.) -
+

Miscellaneous

+
+ + +
+
+ + + +

- OpenLP website + OpenLP website diff --git a/openlp/plugins/remotes/html/jquery.js b/openlp/plugins/remotes/html/jquery.js index b1ae21d8b..7c2430802 100755 --- a/openlp/plugins/remotes/html/jquery.js +++ b/openlp/plugins/remotes/html/jquery.js @@ -1,19 +1,154 @@ -/* - * jQuery JavaScript Library v1.3.2 +/*! + * jQuery JavaScript Library v1.4.2 * http://jquery.com/ * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/openlp/plugins/remotes/html/openlp.js b/openlp/plugins/remotes/html/openlp.js index 8172177d7..24c7cec2e 100644 --- a/openlp/plugins/remotes/html/openlp.js +++ b/openlp/plugins/remotes/html/openlp.js @@ -63,33 +63,42 @@ OpenLP.Namespace.create("OpenLP.Events", { // Local variables onload_functions: Array(), // Functions - load: function (func) { + bindLoad: function (func) { this.onload_functions.append(func); }, - click: function (selector, func) { + bindClick: function (selector, func) { $(selector).bind("click", func); }, - change: function (selector, func) { + bindChange: function (selector, func) { $(selector).bind("change", func); }, - submit: function (selector, func) { + bindSubmit: function (selector, func) { $(selector).bind("submit", func); }, - blur: function (selector, func) { + bindBlur: function (selector, func) { $(selector).bind("blur", func); }, - paste: function (selector, func) { + bindPaste: function (selector, func) { $(selector).bind("paste", func); }, - keyup: function (selector, func) { + bindKeyUp: function (selector, func) { $(selector).bind("keyup", func); }, - keydown: function (selector, func) { + bindKeyDown: function (selector, func) { $(selector).bind("keydown", func); }, - keypress: function (selector, func) { + bindKeyPress: function (selector, func) { $(selector).bind("keypress", func); }, + bindMouseEnter: function (selector, func) { + $(selector).bind("mouseenter", func); + }, + bindMouseLeave: function (selector, func) { + $(selector).bind("mouseleave", func); + }, + liveClick: function (selector, func) { + $(selector).live("click", func); + }, getElement: function(event) { var targ; if (!event) { @@ -116,8 +125,115 @@ OpenLP.Namespace.create("OpenLP.Events", { }); OpenLP.Namespace.create("OpenLP.Remote", { - sendEvent: function (event_name, event_data) + sendEvent: function (eventName, eventData) { + var url = "/"; + if (eventName.substr(-8) == "_request") + { + url += "request"; + } + else + { + url += "send"; + } + url += "/" + eventName; + var args = {}; + if (eventData != null && eventData != "") + { + args.q = $.parseJSON(eventData); + } + $.ajax({ + url: url, + dataType: "json", + data: args, + success: function (data) + { + OpenLP.Remote.handleEvent(eventName, data); + }, + error: function (xhr, textStatus, errorThrown) + { + if (eventName == "remotes_poll_request") + { + OpenLP.Remote.handleEvent("remotes_poll_request"); + } + } + }); + }, + handleEvent: function (eventName, eventData) + { + switch (eventName) + { + case "servicemanager_list_request": + var table = $(""); + $.each(eventData, function (row, item) { + var trow = $("") + .attr("value", parseInt(row)) + .click(OpenLP.Remote.sendSetItem); + if (item["selected"]) + { + trow.addClass("selected"); + } + trow.append($("
").text(parseInt(row) + 1)); + trow.append($("").text(item["title"])); + trow.append($("").text(item["plugin"])); + trow.append($("").text("Notes: " + item["notes"])); + table.append(trow); + }); + $("#service").html(table); + break; + case "slidecontroller_live_text_request": + var table = $(""); + $.each(eventData, function (row, item) { + var trow = $("") + .attr("value", parseInt(row)) + .click(OpenLP.Remote.sendLiveSet); + if (item["selected"]) + { + trow.addClass("selected"); + } + trow.append($("
").text(item["tag"])); + trow.append($("").text(item["text"] ? item["text"].replace(/\\n/g, '
') : "")); + table.append(trow); + }); + $("#current-item").html(table); + break; + case "remotes_poll_request": + OpenLP.Remote.sendEvent("remotes_poll_request"); + OpenLP.Remote.sendEvent("servicemanager_list_request"); + OpenLP.Remote.sendEvent("slidecontroller_live_text_request"); + break; + } + }, + sendLiveSet: function (e) + { + var id = OpenLP.Events.getElement(e).parent().attr("value"); + OpenLP.Remote.sendEvent("slidecontroller_live_set", id); + return false; + }, + sendSetItem: function (e) + { + var id = OpenLP.Events.getElement(e).parent().attr("value"); + OpenLP.Remote.sendEvent("servicemanager_set_item", id); + return false; + }, + sendAlert: function (e) + { + var alert_text = $("#alert-text").val(); + OpenLP.Remote.sendEvent("alerts_text", alert_text); + return false; + }, + buttonClick: function (e) + { + var id = OpenLP.Events.getElement(e).attr("id"); + OpenLP.Remote.sendEvent(id); return false; } -}); \ No newline at end of file +}); + +OpenLP.Events.bindLoad(function () { + OpenLP.Events.bindClick("input[type=button][id!=alert-send]", OpenLP.Remote.buttonClick); + OpenLP.Events.bindClick("#alert-send", OpenLP.Remote.sendAlert); + OpenLP.Remote.sendEvent("servicemanager_list_request"); + OpenLP.Remote.sendEvent("slidecontroller_live_text_request"); + OpenLP.Remote.sendEvent("remotes_poll_request"); +}); diff --git a/openlp/plugins/remotes/html/style.css b/openlp/plugins/remotes/html/style.css new file mode 100644 index 000000000..8ccad1c9a --- /dev/null +++ b/openlp/plugins/remotes/html/style.css @@ -0,0 +1,26 @@ +body +{ + font-family: Lucida Grande, Lucida Sans, Arial, Helvetica, sans-serif; + font-size: 80%; +} + +fieldset +{ + border: 1px solid #ccc; +} + +td +{ + cursor: pointer; +} + +tr:hover +{ + background-color: #7397dd; +} + +.selected +{ + background-color: #4f7ed9; + font-weight: bold; +} diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index 2c12eac76..c7dd2e5d5 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -245,7 +245,7 @@ class HttpConnection(object): Receiver.send_message(event, params) else: Receiver.send_message(event) - return u'OK' + return json.dumps([u'OK']) def process_request(self, event, params): """ From 07d402ee59a0bba39443b28c4f757c488ad29b5d Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 31 May 2010 22:07:27 +0200 Subject: [PATCH 004/120] Fix the alerts not being sent. --- openlp/plugins/remotes/html/openlp.js | 2 +- openlp/plugins/remotes/lib/httpserver.py | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/openlp/plugins/remotes/html/openlp.js b/openlp/plugins/remotes/html/openlp.js index 24c7cec2e..5ace417b1 100644 --- a/openlp/plugins/remotes/html/openlp.js +++ b/openlp/plugins/remotes/html/openlp.js @@ -140,7 +140,7 @@ OpenLP.Namespace.create("OpenLP.Remote", { var args = {}; if (eventData != null && eventData != "") { - args.q = $.parseJSON(eventData); + args.q = escape(eventData); } $.ajax({ url: url, diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index c7dd2e5d5..7836bda8a 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -250,13 +250,19 @@ class HttpConnection(object): def process_request(self, event, params): """ Client has requested data. Send the signal and parameters for openlp - to handle, then listen out for a corresponding _request signal + to handle, then listen out for a corresponding ``_request`` signal which will have the data to return. - For most event timeout after 10 seconds (i.e. incase the signal - recipient isn't listening) - remotes_poll_request is a special case, this is a ajax long poll which - is just waiting for slide change/song change activity. This can wait - longer (one minute) + + For most events, timeout after 10 seconds (i.e. in case the signal + recipient isn't listening). ``remotes_poll_request`` is a special case + however, this is a ajax long poll which is just waiting for slide + change/song change activity. This can wait longer (one minute). + + ``event`` + The event from the web page. + + ``params`` + Parameters sent with the event. """ log.debug(u'Processing request %s' % event) if not event.endswith(u'_request'): From 54736fdac0875905f512df2239afc1d6d3c70315 Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Sat, 21 Aug 2010 17:33:31 +0200 Subject: [PATCH 005/120] Implementation of SongSelect file import --- openlp/plugins/songs/lib/__init__.py | 1 + openlp/plugins/songs/songsplugin.py | 31 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) mode change 100644 => 100755 openlp/plugins/songs/songsplugin.py diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index b8f4d9a05..0e5b0bfa8 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -144,6 +144,7 @@ from mediaitem import SongMediaItem from songimport import SongImport from opensongimport import OpenSongImport from olpimport import OpenLPSongImport +from songselectfileimport import SongSelectFileImport try: from sofimport import SofImport from oooimport import OooImport diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py old mode 100644 new mode 100755 index c09e7a1bb..80a459a80 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -41,6 +41,8 @@ except ImportError: from openlp.plugins.songs.lib import OpenSongImport +from openlp.plugins.songs.lib import SongSelectFileImport + log = logging.getLogger(__name__) class SongsPlugin(Plugin): @@ -169,6 +171,19 @@ class SongsPlugin(Plugin): import_menu.addAction(self.ImportOpenLPSongItem) QtCore.QObject.connect(self.ImportOpenLPSongItem, QtCore.SIGNAL(u'triggered()'), self.onImportOpenLPSongItemClick) + # SongSelect file import menu item + # an import wizard + self.ImportSongSelectSongItem = QtGui.QAction(import_menu) + self.ImportSongSelectSongItem.setObjectName(u'ImportSongSelectSongItem') + self.ImportSongSelectSongItem.setText(translate('SongsPlugin', + 'SongSelect File (temporary)')) + self.ImportSongSelectSongItem.setToolTip(translate('SongsPlugin', + 'Import a SongSelect song file')) + self.ImportSongSelectSongItem.setStatusTip(translate('SongsPlugin', + 'Import a SongSelect song file')) + import_menu.addAction(self.ImportSongSelectSongItem) + QtCore.QObject.connect(self.ImportSongSelectSongItem, + QtCore.SIGNAL(u'triggered()'), self.onImportSongSelectSongItemClick) def addExportMenuItem(self, export_menu): """ @@ -248,6 +263,22 @@ class SongsPlugin(Plugin): oooimport.import_docs(filenames) Receiver.send_message(u'songs_load_list') + def onImportSongSelectSongItemClick(self): + filenames = QtGui.QFileDialog.getOpenFileNames( + None, translate('SongsPlugin', + 'Open SongSelect file'), + u'', u'SongSelect files (*.usr *.txt)') + try: + for filename in filenames: + importer = SongSelectFileImport(self.manager) + importer.do_import(unicode(filename)) + except: + log.exception('Could not import SongSelect file') + QtGui.QMessageBox.critical(None, + translate('SongsPlugin', 'Import Error'), + translate('SongsPlugin', 'Error importing SongSelect file')) + Receiver.send_message(u'songs_load_list') + def about(self): about_text = translate('SongsPlugin', 'Songs Plugin' '
The songs plugin provides the ability to display and ' From 8b79abdfe6981fbfbd97c55f80c7878b357a3bfc Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 22 Aug 2010 23:36:11 +0100 Subject: [PATCH 006/120] sof wizard --- openlp/plugins/songs/lib/oooimport.py | 26 +++++++++++++++++++++----- openlp/plugins/songs/lib/sofimport.py | 24 ++++++++++++++++++------ 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 76b4b6c0d..7bc602f99 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -28,6 +28,7 @@ import os from PyQt4 import QtCore +from openlp.core.lib import Receiver from songimport import SongImport if os.name == u'nt': @@ -43,23 +44,30 @@ else: except ImportError: pass -class OooImport(object): +class OooImport(SongImport): """ Import songs from Impress/Powerpoint docs using Impress """ - def __init__(self, songmanager): + def __init__(self, master_manager, **kwargs): """ Initialise the class. Requires a songmanager class which is passed to SongImport for writing song to disk """ self.song = None - self.manager = songmanager + self.master_manager = master_manager self.document = None self.process_started = False + self.filenames = kwargs[u'filenames'] + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_stop_song_import'), self.stop_import) - def import_docs(self, filenames): + def do_import(self): + self.abort = False self.start_ooo() - for filename in filenames: + for filename in self.filenames: + if self.abort: + self.wizard.incrementProgressBar(u'Import cancelled') + return filename = unicode(filename) if os.path.isfile(filename): self.open_ooo_file(filename) @@ -73,6 +81,9 @@ class OooImport(object): self.close_ooo_file() self.close_ooo() + def stop_import(self): + self.abort = True + def start_ooo(self): """ Start OpenOffice.org process @@ -135,6 +146,8 @@ class OooImport(object): "com.sun.star.presentation.PresentationDocument") and not \ self.document.supportsService("com.sun.star.text.TextDocument"): self.close_ooo_file() + else: + self.wizard.incrementProgressBar(u'Processing file ' + filepath) except: pass return @@ -161,6 +174,9 @@ class OooImport(object): slides = doc.getDrawPages() text = u'' for slide_no in range(slides.getCount()): + if self.abort: + self.wizard.incrementProgressBar(u'Import cancelled') + return slide = slides.getByIndex(slide_no) slidetext = u'' for idx in range(slide.getCount()): diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 54cfd07ac..b2374d672 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -68,18 +68,26 @@ class SofImport(OooImport): It attempts to detect italiced verses, and treats these as choruses in the verse ordering. Again not perfect, but a start. """ - def __init__(self, songmanager): + def __init__(self, master_manager, **kwargs): """ Initialise the class. Requires a songmanager class which is passed to SongImport for writing song to disk """ - OooImport.__init__(self, songmanager) + OooImport.__init__(self,master_manager, **kwargs) - def import_sof(self, filename): + def do_import(self): + self.abort = False self.start_ooo() - self.open_ooo_file(filename) - self.process_sof_file() - self.close_ooo_file() + for filename in self.filenames: + if self.abort: + self.wizard.incrementProgressBar(u'Import cancelled') + return + filename = unicode(filename) + if os.path.isfile(filename): + self.open_ooo_file(filename) + if self.document: + self.process_sof_file() + self.close_ooo_file() self.close_ooo() def process_sof_file(self): @@ -90,6 +98,9 @@ class SofImport(OooImport): self.new_song() paragraphs = self.document.getText().createEnumeration() while paragraphs.hasMoreElements(): + if self.abort: + self.wizard.incrementProgressBar(u'Import cancelled') + return paragraph = paragraphs.nextElement() if paragraph.supportsService("com.sun.star.text.Paragraph"): self.process_paragraph(paragraph) @@ -244,6 +255,7 @@ class SofImport(OooImport): if title.endswith(u','): title = title[:-1] self.song.title = title + self.wizard.incrementProgressBar(u'Processing song ' + title) def add_author(self, text): """ From 0f7fb002b47c7e8022ba83dc783281c60f0648d9 Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Mon, 23 Aug 2010 19:42:59 +0200 Subject: [PATCH 007/120] Added SongSelectFileImport to source control --- openlp/plugins/songs/.directory | 3 + openlp/plugins/songs/lib/.directory | 3 + .../plugins/songs/lib/songselectfileimport.py | 251 ++++++++++++++++++ resources/songs/.directory | 3 + 4 files changed, 260 insertions(+) create mode 100644 openlp/plugins/songs/.directory create mode 100644 openlp/plugins/songs/lib/.directory create mode 100755 openlp/plugins/songs/lib/songselectfileimport.py create mode 100644 resources/songs/.directory diff --git a/openlp/plugins/songs/.directory b/openlp/plugins/songs/.directory new file mode 100644 index 000000000..802164a81 --- /dev/null +++ b/openlp/plugins/songs/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2010,8,20,16,22,57 +ViewMode=1 diff --git a/openlp/plugins/songs/lib/.directory b/openlp/plugins/songs/lib/.directory new file mode 100644 index 000000000..d9f9a4e00 --- /dev/null +++ b/openlp/plugins/songs/lib/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2010,8,21,15,53,23 +ViewMode=1 diff --git a/openlp/plugins/songs/lib/songselectfileimport.py b/openlp/plugins/songs/lib/songselectfileimport.py new file mode 100755 index 000000000..de84b8a79 --- /dev/null +++ b/openlp/plugins/songs/lib/songselectfileimport.py @@ -0,0 +1,251 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund, Derek Scotney # +# --------------------------------------------------------------------------- # +# This program 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; version 2 of the License. # +# # +# This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +import logging +import os +import chardet +import codecs + +from songimport import SongImport + +log = logging.getLogger(__name__) + +class SongSelectFileImportError(Exception): + pass + +class SongSelectFileImport(object): + """ + Import songs from CCLI SongSelect files in both .txt and .usr formats + http://www.ccli.com + + The format of the .txt format is: + ========== + Song Title + <> + Description of following text (Verse/Chorus) and number + + <> + <> + Next text block description (etc) + + <> + <> + CCLI Number (e.g.CCLI-Liednummer: 2672885) + Copyright "|" delimited (e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing) + Authors "|" delimited (e.g. Lenny LeBlanc | Paul Baloche) + Licencing info (e.g. For use solely with the SongSelect Terms of Use. All rights Reserved. www.ccli.com) + CCLI Licence number (e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14) + ========== + + The format of the .usr format is: + ========== + [File] + Type=SongSelect Import File + Version=3.0 + [S A2672885] + Title=Above All + Author=LeBlanc, Lenny | Baloche, Paul + Copyright=1999 Integrity's Hosanna! Music | LenSongs Publishing (Verwaltet von Gerth Medien Musikverlag) | (Verwaltet von Gerth Medien Musikverlag) + Admin=Gerth Medien Musikverlag + Themes=Cross/tKingship/tMajesty/tRedeemer + Keys=A + Fields=Vers 1/tVers 2/tChorus 1/tAndere 1 + Words=Above all powers.... [/n = CR, /n/t = CRLF] + ========== + + """ + + def __init__(self, songmanager): + """ + Initialise the class. Requires a songmanager class which + is passed to SongImport for writing song to disk + """ + self.songmanager = songmanager + self.song = None + + def do_import(self, filename, commit=True): + """ + Import either a .usr or a .txt SongSelect file + If the commit parameter is set False, + the import will not be committed to the database + (useful for test scripts) + """ + self.song_import = SongImport(self.songmanager) + + lines = [] + filename = unicode(filename) + if os.path.isfile(filename): + detect_file = open(filename, u'r') + details = chardet.detect(detect_file.read(2048)) + detect_file.close() + infile = codecs.open(filename, u'r', details['encoding']) + lines = infile.readlines() + + ext = os.path.splitext(filename)[1] + if ext.lower() == ".usr": + log.info('SongSelect .usr format file found %s', filename) + self.do_import_usr_file(lines) + if commit: + self.finish() + elif ext.lower() == ".txt": + log.info('SongSelect .txt format file found %s', filename) + self.do_import_txt_file(lines) + if commit: + self.finish() + else: + log.info(u'Extension %s is not valid', filename) + pass + + + def do_import_usr_file(self, textList): + """ + Process the USR file - pass in a list of lines + """ + + n = 0 # line number + lyrics = [] + + for line in textList: + n += 1 + if line.startswith(u'Title='): + sname = line[6:].strip() + elif line.startswith(u'Author='): + sauthor = line[7:].strip() + elif line.startswith(u'Copyright='): + scopyright = line[10:].strip() + elif line.startswith(u'[S A'): + sccli = line[4:-3].strip() + elif line.startswith(u'Fields='): + #Fields contain single line indicating verse, chorus, etc, + #/t delimited, same as with words field. store seperately + #and process at end. + sfields = line[7:].strip() + elif line.startswith(u'Words='): + swords = line[6:].strip() + #Unhandled usr keywords:Type, Version, Admin, Themes, Keys + + #Process Fields and words sections + fieldlst = sfields.split(u'/t') + wordslst = swords.split(u'/t') + for i in range(0, len(fieldlst)): + if fieldlst[i].startswith(u'Ver'): #Verse + vtype = u'V' + elif fieldlst[i].startswith(u'Ch'): #Chorus + vtype = u'C' + elif fieldlst[i].startswith(u'Br'): #Bridge + vtype = u'B' + else: #Other + vtype = u'O' + vcontent = unicode(wordslst[i]) + vcontent = vcontent.replace("/n", "\n") + self.song_import.add_verse(vcontent, vtype); + + #Handle multiple authors + lst = sauthor.split(u'/') + if len(lst) < 2: + lst = sauthor.split(u'|') + for author in lst: + seperated = author.split(u',') + self.song_import.add_author(seperated[1].strip() + " " + seperated[0].strip()) + + self.song_import.title = sname + self.song_import.copyright = scopyright + self.song_import.ccli_number = sccli + + + def do_import_txt_file(self, textList): + """ + Process the TXT file - pass in a list of lines + """ + + n = 0 + vcontent = u'' + scomments = u'' + scopyright = u''; + verse_start = False + + for line in textList: + ln = line.strip() + if (len(ln)== 0): + if (n==0): + continue + elif (verse_start == True): + self.song_import.add_verse(vcontent, vtype) + vcontent = '' + verse_start = False + else: + if (n==0): #n=0, song title + sname = ln + n += 1 + elif (n==1): #n=1, verses + if ln.startswith(u'CCLI'): #n=1, ccli number, first line after verses + n += 1 + cparts = ln.split(' ') + sccli = cparts[len(cparts)-1] + elif (verse_start == False): + # We have the verse descriptor + parts = ln.split(' ') + if (len(parts) == 2): + if parts[0].startswith(u'Ver'): #Verse + vtype = u'V' + elif parts[0].startswith(u'Ch'): #Chorus + vtype = u'C' + elif parts[0].startswith(u'Br'): #Bridge + vtype = u'B' + else: + vtype = u'O' + vnumber = parts[1] + else: + vtype = u'O' + vnumber = 1 + verse_start = True + else: + # We have verse content or the start of the last part + # Add l so as to keep the CRLF + vcontent = vcontent + line + else: + if (n==2): #n=2, copyright + n += 1 + scopyright = ln + elif (n==3): #n=3, authors + n += 1 + sauthor = ln + elif (n==4) and (not ln.startswith(u'CCL')): #n=4, comments lines before last line + scomments = scomments + ln + # split on known separators + alist = sauthor.split(u'/') + if len(alist) < 2: + alist = sauthor.split(u'|') + self.song_import.authors = alist + self.song_import.title = sname + self.song_import.copyright = scopyright + self.song_import.ccli_number = sccli + self.song_import.comments = scomments + + + def finish(self): + """ Separate function, allows test suite to not pollute database""" + self.song_import.finish() diff --git a/resources/songs/.directory b/resources/songs/.directory new file mode 100644 index 000000000..077f3daf2 --- /dev/null +++ b/resources/songs/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2010,8,21,16,21,36 +ViewMode=1 From 0066edecbb091ce181d98cd320777b06d44be47c Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Tue, 24 Aug 2010 13:50:26 +0100 Subject: [PATCH 008/120] Remove comments --- openlp/plugins/songs/lib/oooimport.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index da4bd6f3e..d07d50271 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -65,9 +65,6 @@ class OooImport(SongImport): def do_import(self): self.abort = False self.start_ooo() - # Note this doesn't work, because kwargs[u'filenames'] doesn't appear - # to be anything sensible like an array of strings. No idea what it is - # though, I'm meant to guess for filename in self.filenames: if self.abort: self.wizard.incrementProgressBar(u'Import cancelled') From dfe8bbae9c9b018c30479659c2f294fe9a4c627f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 26 Aug 2010 22:52:54 +0200 Subject: [PATCH 009/120] Some minor syntactic sugar. --- openlp/plugins/songs/lib/olpimport.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index a4c15718e..63f99dc7b 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -75,18 +75,18 @@ class OpenLPSongImport(SongImport): The :class:`OpenLPSongImport` class provides OpenLP with the ability to import song databases from other installations of OpenLP. """ - def __init__(self, master_manager, **kwargs): + def __init__(self, manager, **kwargs): """ Initialise the import. - ``master_manager`` + ``manager`` The song manager for the running OpenLP installation. ``source_db`` The database providing the data to import. """ - SongImport.__init__(self, master_manager) - self.master_manager = master_manager + SongImport.__init__(self, manager) + #self.master_manager = master_manager self.import_source = u'sqlite:///%s' % kwargs[u'filename'] log.debug(self.import_source) self.source_session = None @@ -167,7 +167,7 @@ class OpenLPSongImport(SongImport): new_song.ccli_number = song.ccli_number if song.authors: for author in song.authors: - existing_author = self.master_manager.get_object_filtered( + existing_author = self.manager.get_object_filtered( Author, Author.display_name == author.display_name) if existing_author: new_song.authors.append(existing_author) @@ -177,7 +177,7 @@ class OpenLPSongImport(SongImport): last_name=author.last_name, display_name=author.display_name)) else: - au = self.master_manager.get_object_filtered(Author, + au = self.manager.get_object_filtered(Author, Author.display_name == u'Author Unknown') if au: new_song.authors.append(au) @@ -185,7 +185,7 @@ class OpenLPSongImport(SongImport): new_song.authors.append(Author.populate( display_name=u'Author Unknown')) if song.book: - existing_song_book = self.master_manager.get_object_filtered( + existing_song_book = self.manager.get_object_filtered( Book, Book.name == song.book.name) if existing_song_book: new_song.book = existing_song_book @@ -194,7 +194,7 @@ class OpenLPSongImport(SongImport): publisher=song.book.publisher) if song.topics: for topic in song.topics: - existing_topic = self.master_manager.get_object_filtered( + existing_topic = self.manager.get_object_filtered( Topic, Topic.name == topic.name) if existing_topic: new_song.topics.append(existing_topic) @@ -204,12 +204,12 @@ class OpenLPSongImport(SongImport): # if song.media_files: # for media_file in song.media_files: # existing_media_file = \ -# self.master_manager.get_object_filtered(MediaFile, +# self.manager.get_object_filtered(MediaFile, # MediaFile.file_name == media_file.file_name) # if existing_media_file: # new_song.media_files.append(existing_media_file) # else: # new_song.media_files.append(MediaFile.populate( # file_name=media_file.file_name)) - self.master_manager.save_object(new_song) + self.manager.save_object(new_song) engine.dispose() From 3d60cc894de45caa7c037f4bfc0fc19cd2fea0be Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 26 Aug 2010 22:53:24 +0200 Subject: [PATCH 010/120] Added the initial openlp.org 1.x importer. --- openlp/plugins/songs/lib/olp1import.py | 131 +++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 openlp/plugins/songs/lib/olp1import.py diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py new file mode 100644 index 000000000..1625bfff2 --- /dev/null +++ b/openlp/plugins/songs/lib/olp1import.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program 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; version 2 of the License. # +# # +# This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +""" +The :mod:`olp1import` module provides the functionality for importing +openlp.org 1.x song databases into the current installation database. +""" +import logging +import sqlite + +#from openlp.core.lib.db import BaseModel +from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile +from songimport import SongImport + +log = logging.getLogger(__name__) + +class OpenLP1SongImport(SongImport): + """ + The :class:`OpenLP1SongImport` class provides OpenLP with the ability to + import song databases from installations of openlp.org 1.x. + """ + def __init__(self, manager, **kwargs): + """ + Initialise the import. + + ``manager`` + The song manager for the running OpenLP installation. + + ``filename`` + The database providing the data to import. + """ + SongImport.__init__(self, manager) + self.manager = manager + self.import_source = kwargs[u'filename'] + + def do_import(self): + """ + Run the import for an openlp.org 1.x song database. + """ + connection = sqlite.connect(self.import_source) + cursor = connection.cursor() + +# for song in source_songs: +# new_song = Song() +# new_song.title = song.title +# if has_media_files: +# new_song.alternate_title = song.alternate_title +# else: +# old_titles = song.search_title.split(u'@') +# if len(old_titles) > 1: +# new_song.alternate_title = old_titles[1] +# else: +# new_song.alternate_title = u'' +# new_song.search_title = song.search_title +# new_song.song_number = song.song_number +# new_song.lyrics = song.lyrics +# new_song.search_lyrics = song.search_lyrics +# new_song.verse_order = song.verse_order +# new_song.copyright = song.copyright +# new_song.comments = song.comments +# new_song.theme_name = song.theme_name +# new_song.ccli_number = song.ccli_number +# if song.authors: +# for author in song.authors: +# existing_author = self.master_manager.get_object_filtered( +# Author, Author.display_name == author.display_name) +# if existing_author: +# new_song.authors.append(existing_author) +# else: +# new_song.authors.append(Author.populate( +# first_name=author.first_name, +# last_name=author.last_name, +# display_name=author.display_name)) +# else: +# au = self.master_manager.get_object_filtered(Author, +# Author.display_name == u'Author Unknown') +# if au: +# new_song.authors.append(au) +# else: +# new_song.authors.append(Author.populate( +# display_name=u'Author Unknown')) +# if song.book: +# existing_song_book = self.master_manager.get_object_filtered( +# Book, Book.name == song.book.name) +# if existing_song_book: +# new_song.book = existing_song_book +# else: +# new_song.book = Book.populate(name=song.book.name, +# publisher=song.book.publisher) +# if song.topics: +# for topic in song.topics: +# existing_topic = self.master_manager.get_object_filtered( +# Topic, Topic.name == topic.name) +# if existing_topic: +# new_song.topics.append(existing_topic) +# else: +# new_song.topics.append(Topic.populate(name=topic.name)) +## if has_media_files: +## if song.media_files: +## for media_file in song.media_files: +## existing_media_file = \ +## self.master_manager.get_object_filtered(MediaFile, +## MediaFile.file_name == media_file.file_name) +## if existing_media_file: +## new_song.media_files.append(existing_media_file) +## else: +## new_song.media_files.append(MediaFile.populate( +## file_name=media_file.file_name)) +# self.master_manager.save_object(new_song) From f717dc10d4a0e29f20e5d9e40f87d69578d87b4e Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 26 Aug 2010 23:08:09 +0100 Subject: [PATCH 011/120] Bring up to date --- openlp/plugins/songs/lib/oooimport.py | 11 ++++++----- openlp/plugins/songs/lib/sofimport.py | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 6c9141157..9a3be2843 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -59,16 +59,16 @@ class OooImport(SongImport): self.document = None self.process_started = False self.filenames = kwargs[u'filenames'] - self.import_wizard.importProgressBar.setMaximum(0) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'openlp_stop_song_import'), self.stop_import) + QtCore.SIGNAL(u'song_stop_import'), self.stop_import) def do_import(self): self.abort = False + self.import_wizard.importProgressBar.setMaximum(0) self.start_ooo() for filename in self.filenames: if self.abort: - self.import_wizard.incrementProgressBar(u'Import cancelled') + self.import_wizard.incrementProgressBar(u'Import cancelled', 0) return filename = unicode(filename) if os.path.isfile(filename): @@ -149,7 +149,8 @@ class OooImport(SongImport): self.document.supportsService("com.sun.star.text.TextDocument"): self.close_ooo_file() else: - self.import_wizard.incrementProgressBar(u'Processing file ' + filepath) + self.import_wizard.incrementProgressBar( + u'Processing file ' + filepath, 0) except: pass return @@ -177,7 +178,7 @@ class OooImport(SongImport): text = u'' for slide_no in range(slides.getCount()): if self.abort: - self.import_wizard.incrementProgressBar(u'Import cancelled') + self.import_wizard.incrementProgressBar(u'Import cancelled', 0) return slide = slides.getByIndex(slide_no) slidetext = u'' diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index af968fafe..0d7c085de 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -80,7 +80,7 @@ class SofImport(OooImport): self.start_ooo() for filename in self.filenames: if self.abort: - self.import_wizard.incrementProgressBar(u'Import cancelled') + self.import_wizard.incrementProgressBar(u'Import cancelled', 0) return filename = unicode(filename) if os.path.isfile(filename): @@ -99,7 +99,7 @@ class SofImport(OooImport): paragraphs = self.document.getText().createEnumeration() while paragraphs.hasMoreElements(): if self.abort: - self.import_wizard.incrementProgressBar(u'Import cancelled') + self.import_wizard.incrementProgressBar(u'Import cancelled', 0) return paragraph = paragraphs.nextElement() if paragraph.supportsService("com.sun.star.text.Paragraph"): @@ -255,7 +255,7 @@ class SofImport(OooImport): if title.endswith(u','): title = title[:-1] self.song.title = title - self.import_wizard.incrementProgressBar(u'Processing song ' + title) + self.import_wizard.incrementProgressBar(u'Processing song ' + title, 0) def add_author(self, text): """ From 6b6da86c54cbd64b6044a2b30df7aaaa5ed6efc1 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Fri, 27 Aug 2010 20:53:22 +0100 Subject: [PATCH 012/120] wow_import implemented in to import wizard bug fix in wizzard, so that it starts from the first page if used previously bux fix in importer, so that it resets the defualts after commiting a song to the db --- openlp/plugins/songs/forms/songimportform.py | 3 ++- openlp/plugins/songs/lib/importer.py | 3 +++ openlp/plugins/songs/lib/songimport.py | 16 +++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 68bba299d..6fb6b38a0 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -160,7 +160,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.openSongAddButton.setFocus() return False elif source_format == SongFormat.WordsOfWorship: - if self.wordsOfWorshipListWidget.count() == 0: + if self.wordsOfWorshipFileListWidget.count() == 0: QtGui.QMessageBox.critical(self, translate('SongsPlugin.ImportWizardForm', 'No Words of Worship Files Selected'), @@ -315,6 +315,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): pass def setDefaults(self): + self.restart() self.formatComboBox.setCurrentIndex(0) self.openLP2FilenameEdit.setText(u'') self.openLP1FilenameEdit.setText(u'') diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 7410a5184..ae18f4389 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -29,6 +29,7 @@ from olpimport import OpenLPSongImport try: from sofimport import SofImport from oooimport import OooImport + from wowimport import WowImport except ImportError: pass @@ -63,6 +64,8 @@ class SongFormat(object): return OpenSongImport elif format == SongFormat.SongsOfFellowship: return SofImport + elif format == SongFormat.WordsOfWorship: + return WowImport elif format == SongFormat.Generic: return OooImport # else: diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 2ffb0beda..84f0ffd93 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -52,6 +52,13 @@ class SongImport(QtCore.QObject): """ self.manager = manager self.stop_import_flag = False + self.copyright_string = unicode(translate( + 'SongsPlugin.SongImport', 'copyright')) + self.copyright_symbol = unicode(translate( + 'SongsPlugin.SongImport', '\xa9')) + self.setDefaults() + + def setDefaults(self): self.title = u'' self.song_number = u'' self.alternate_title = u'' @@ -67,13 +74,7 @@ class SongImport(QtCore.QObject): self.verses = [] self.versecount = 0 self.choruscount = 0 - self.copyright_string = unicode(translate( - 'SongsPlugin.SongImport', 'copyright')) - self.copyright_symbol = unicode(translate( - 'SongsPlugin.SongImport', '\xa9')) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) - + def stop_import(self): """ Sets the flag for importers to stop their import @@ -298,6 +299,7 @@ class SongImport(QtCore.QObject): topic = Topic.populate(name=topictext) song.topics.append(topic) self.manager.save_object(song) + self.setDefaults() def print_song(self): """ From 4e059f8cc5dc81e0886ac79907b3d2ea6460d07c Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Fri, 27 Aug 2010 21:02:59 +0100 Subject: [PATCH 013/120] Forgot to add the wowimport.py file --- openlp/plugins/songs/lib/wowimport.py | 170 ++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 openlp/plugins/songs/lib/wowimport.py diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py new file mode 100644 index 000000000..78a9aed5a --- /dev/null +++ b/openlp/plugins/songs/lib/wowimport.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program 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; version 2 of the License. # +# # +# This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +""" +The :mod:`wowimport` module provides the functionality for importing Words of +Worship songs into the OpenLP database. +""" +import os +import logging + +from openlp.plugins.songs.lib.songimport import SongImport + +BLOCK_TYPES = (u'V', u'C', u'B') + +log = logging.getLogger(__name__) + +class WowImport(SongImport): + """ + The :class:`WowImport` class provides the ability to import song files from + Words of Worship. + + Words Of Worship Song File Format + ````````````````````````````````` + + The Words Of Worship song file format is as follows: + + * The song title is the file name minus the extension. + * The song has a header, a number of blocks, followed by footer containing + the author and the copyright. + * A block can be a verse, chorus or bridge. + + File Header: + Bytes are counted from one, i.e. the first byte is byte 1. These bytes, + up to the 56 byte, can change but no real meaning has been found. The + 56th byte specifies how many blocks there are. The first block starts + with byte 83 after the "CSongDoc::CBlock" declaration. + + Blocks: + Each block has a starting header, some lines of text, and an ending + footer. Each block starts with 4 bytes, the first byte specifies how + many lines are in that block, the next three bytes are null bytes. + + Each block ends with 4 bytes, the first of which defines what type of + block it is, and the rest which are null bytes: + + * ``NUL`` (\x00) - Verse + * ``SOH`` (\x01) - Chorus + * ``STX`` (\x02) - Bridge + + Blocks are seperated by two bytes. The first byte is ``SOH`` (\x01), + and the second byte is ``€`` (\x80). + + Lines: + Each line starts with a byte which specifies how long that line is, + the line text, and ends with a null byte. + + + Footer: + The footer follows on after the last block, the first byte specifies + the length of the author text, followed by the author text, if + this byte is null, then there is no author text. The byte after the + author text specifies the length of the copyright text, followed + by the copyright text. + + The file is ended with four null bytes. + + Valid extensions for a Words of Worship song file are: + + * .wsg + * .wow-song + """ + + def __init__(self, master_manager, **kwargs): + """ + Initialise the import. + + ``master_manager`` + The song manager for the running OpenLP installation. + """ + SongImport.__init__(self, master_manager) + self.master_manager = master_manager + if kwargs.has_key(u'filename'): + self.import_source = kwargs[u'filename'] + if kwargs.has_key(u'filenames'): + self.import_source = kwargs[u'filenames'] + log.debug(self.import_source) + + def do_import(self): + """ + Recieve a single file, or a list of files to import. + """ + + if isinstance(self.import_source, list): + self.import_wizard.importProgressBar.setMaximum( + len(self.import_source)) + for file in self.import_source: + # TODO: check that it is a valid words of worship file (could check + # header for WoW File Song Word) + self.author = u'' + self.copyright= u'' + # Get the song title + self.file_name = os.path.split(file)[1] + self.import_wizard.incrementProgressBar("Importing %s" % (self.file_name), 0) + self.title = self.file_name.rpartition(u'.')[0] + self.songData = open(file, 'rb') + # Seek to byte which stores number of blocks in the song + self.songData.seek(56) + self.no_of_blocks = ord(self.songData.read(1)) + # Seek to the beging of the first block + self.songData.seek(82) + for block in range(self.no_of_blocks): + self.lines_to_read = ord(self.songData.read(1)) + # Skip 3 nulls to the beginnig of the 1st line + self.songData.seek(3, os.SEEK_CUR) + self.block_text = u'' + while self.lines_to_read: + self.length_of_line = ord(self.songData.read(1)) + self.line_text = unicode( + self.songData.read(self.length_of_line), u'cp1252') + self.songData.seek(1, os.SEEK_CUR) + if self.block_text != u'': + self.block_text += u'\n' + self.block_text += self.line_text + self.lines_to_read -= 1 + self.block_type = BLOCK_TYPES[ord(self.songData.read(1))] + # Skip 3 nulls at the end of the block + self.songData.seek(3, os.SEEK_CUR) + # Blocks are seperated by 2 bytes, skip them, but not if + # this is the last block! + if (block + 1) < self.no_of_blocks: + self.songData.seek(2, os.SEEK_CUR) + self.add_verse(self.block_text, self.block_type) + # Now to extact the author + self.author_length = ord(self.songData.read(1)) + if self.author_length != 0: + self.author = unicode(self.songData.read(self.author_length), + u'cp1252') + # Finally the copyright + self.copyright_length = ord(self.songData.read(1)) + if self.copyright_length != 0: + self.copyright = unicode(self.songData.read(self.copyright_length), + u'cp1252') + self.parse_author(self.author) + self.add_copyright(self.copyright) + self.songData.close() + self.finish() + self.import_wizard.incrementProgressBar("Importing %s" % (self.file_name)) + return True From e4f4626f046b2f5e8a7f88a83aba0ee174256d56 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Fri, 27 Aug 2010 21:14:23 +0100 Subject: [PATCH 014/120] shortened some long lines. --- openlp/plugins/songs/lib/wowimport.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index 78a9aed5a..cb4ebf9ae 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -116,13 +116,14 @@ class WowImport(SongImport): self.import_wizard.importProgressBar.setMaximum( len(self.import_source)) for file in self.import_source: - # TODO: check that it is a valid words of worship file (could check - # header for WoW File Song Word) + # TODO: check that it is a valid words of worship file (could + # check header for WoW File Song Word) self.author = u'' self.copyright= u'' # Get the song title self.file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar("Importing %s" % (self.file_name), 0) + self.import_wizard.incrementProgressBar( + "Importing %s" % (self.file_name), 0) self.title = self.file_name.rpartition(u'.')[0] self.songData = open(file, 'rb') # Seek to byte which stores number of blocks in the song @@ -155,16 +156,17 @@ class WowImport(SongImport): # Now to extact the author self.author_length = ord(self.songData.read(1)) if self.author_length != 0: - self.author = unicode(self.songData.read(self.author_length), - u'cp1252') + self.author = unicode( + self.songData.read(self.author_length), u'cp1252') # Finally the copyright self.copyright_length = ord(self.songData.read(1)) if self.copyright_length != 0: - self.copyright = unicode(self.songData.read(self.copyright_length), - u'cp1252') + self.copyright = unicode( + self.songData.read(self.copyright_length), u'cp1252') self.parse_author(self.author) self.add_copyright(self.copyright) self.songData.close() self.finish() - self.import_wizard.incrementProgressBar("Importing %s" % (self.file_name)) + self.import_wizard.incrementProgressBar( + "Importing %s" % (self.file_name)) return True From 1611251ec24746edb4572383514c294c4ddbabbe Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Fri, 27 Aug 2010 21:18:48 +0100 Subject: [PATCH 015/120] and an empty line at the end --- openlp/plugins/songs/lib/wowimport.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index cb4ebf9ae..dd09034d1 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -170,3 +170,4 @@ class WowImport(SongImport): self.import_wizard.incrementProgressBar( "Importing %s" % (self.file_name)) return True + From f712ccca50f645728df54728fa49bc9d53d4af5a Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 28 Aug 2010 03:51:29 +0100 Subject: [PATCH 016/120] Signal fix as mentioned by Meths --- openlp/plugins/songs/lib/songimport.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 84f0ffd93..e270ee09d 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -56,6 +56,8 @@ class SongImport(QtCore.QObject): 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( 'SongsPlugin.SongImport', '\xa9')) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) self.setDefaults() def setDefaults(self): From 676cc9305ce0fd2ca36c0e9d7a430e5026d1578a Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Sat, 28 Aug 2010 15:17:27 +0200 Subject: [PATCH 017/120] Changes to CCLI file importer to work with import wizard --- ...gselectfileimport.py => cclifileimport.py} | 118 ++++++++++-------- 1 file changed, 66 insertions(+), 52 deletions(-) rename openlp/plugins/songs/lib/{songselectfileimport.py => cclifileimport.py} (73%) diff --git a/openlp/plugins/songs/lib/songselectfileimport.py b/openlp/plugins/songs/lib/cclifileimport.py similarity index 73% rename from openlp/plugins/songs/lib/songselectfileimport.py rename to openlp/plugins/songs/lib/cclifileimport.py index de84b8a79..d4314a7e0 100755 --- a/openlp/plugins/songs/lib/songselectfileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -33,10 +33,10 @@ from songimport import SongImport log = logging.getLogger(__name__) -class SongSelectFileImportError(Exception): +class CCLIFileImportError(Exception): pass -class SongSelectFileImport(object): +class CCLIFileImport(SongImport): """ Import songs from CCLI SongSelect files in both .txt and .usr formats http://www.ccli.com @@ -77,47 +77,55 @@ class SongSelectFileImport(object): ========== """ - - def __init__(self, songmanager): + + def __init__(self, master_manager, **kwargs): """ Initialise the class. Requires a songmanager class which is passed to SongImport for writing song to disk """ - self.songmanager = songmanager - self.song = None + SongImport.__init__(self, master_manager) + self.master_manager = master_manager + if u'filenames' in kwargs: + self.filenames = kwargs[u'filenames'] + log.debug(self.filenames) - def do_import(self, filename, commit=True): + def do_import(self): """ Import either a .usr or a .txt SongSelect file - If the commit parameter is set False, - the import will not be committed to the database - (useful for test scripts) """ - self.song_import = SongImport(self.songmanager) + + log.debug('Starting CCLI File Import') + song_total = len(self.filenames) + self.import_wizard.importProgressBar.setMaximum(song_total) + song_count = 1 + for filename in self.filenames: + self.import_wizard.incrementProgressBar( + u'Importing song %s of %s' % (song_count, song_total)) + filename = unicode(filename) + log.debug('Importing CCLI File: %s', filename) + lines = [] + if os.path.isfile(filename): + detect_file = open(filename, u'r') + details = chardet.detect(detect_file.read(2048)) + detect_file.close() + infile = codecs.open(filename, u'r', details['encoding']) + lines = infile.readlines() - lines = [] - filename = unicode(filename) - if os.path.isfile(filename): - detect_file = open(filename, u'r') - details = chardet.detect(detect_file.read(2048)) - detect_file.close() - infile = codecs.open(filename, u'r', details['encoding']) - lines = infile.readlines() - - ext = os.path.splitext(filename)[1] - if ext.lower() == ".usr": - log.info('SongSelect .usr format file found %s', filename) - self.do_import_usr_file(lines) - if commit: - self.finish() - elif ext.lower() == ".txt": - log.info('SongSelect .txt format file found %s', filename) - self.do_import_txt_file(lines) - if commit: - self.finish() - else: - log.info(u'Extension %s is not valid', filename) - pass + ext = os.path.splitext(filename)[1] + if ext.lower() == ".usr": + log.info('SongSelect .usr format file found %s: ' , filename) + self.do_import_usr_file(lines) + elif ext.lower() == ".txt": + log.info('SongSelect .txt format file found %s: ', filename) + self.do_import_txt_file(lines) + else: + log.info(u'Extension %s is not valid', filename) + pass + song_count += 1 + if self.stop_import_flag: + return False + + return True def do_import_usr_file(self, textList): @@ -125,9 +133,13 @@ class SongSelectFileImport(object): Process the USR file - pass in a list of lines """ + log.debug('USR file text: %s', textList) + n = 0 # line number lyrics = [] + new_song = SongImport(self.master_manager) + for line in textList: n += 1 if line.startswith(u'Title='): @@ -161,7 +173,8 @@ class SongSelectFileImport(object): vtype = u'O' vcontent = unicode(wordslst[i]) vcontent = vcontent.replace("/n", "\n") - self.song_import.add_verse(vcontent, vtype); + if (len(vcontent) > 0): + new_song.add_verse(vcontent, vtype); #Handle multiple authors lst = sauthor.split(u'/') @@ -169,11 +182,12 @@ class SongSelectFileImport(object): lst = sauthor.split(u'|') for author in lst: seperated = author.split(u',') - self.song_import.add_author(seperated[1].strip() + " " + seperated[0].strip()) + new_song.add_author(seperated[1].strip() + " " + seperated[0].strip()) - self.song_import.title = sname - self.song_import.copyright = scopyright - self.song_import.ccli_number = sccli + new_song.title = sname + new_song.copyright = scopyright + new_song.ccli_number = sccli + new_song.finish() def do_import_txt_file(self, textList): @@ -181,6 +195,9 @@ class SongSelectFileImport(object): Process the TXT file - pass in a list of lines """ + log.debug('TXT file text: %s', textList) + + new_song = SongImport(self.master_manager) n = 0 vcontent = u'' scomments = u'' @@ -193,9 +210,10 @@ class SongSelectFileImport(object): if (n==0): continue elif (verse_start == True): - self.song_import.add_verse(vcontent, vtype) - vcontent = '' - verse_start = False + if (len(vcontent) > 0): + new_song.add_verse(vcontent, vtype) + vcontent = '' + verse_start = False else: if (n==0): #n=0, song title sname = ln @@ -239,13 +257,9 @@ class SongSelectFileImport(object): alist = sauthor.split(u'/') if len(alist) < 2: alist = sauthor.split(u'|') - self.song_import.authors = alist - self.song_import.title = sname - self.song_import.copyright = scopyright - self.song_import.ccli_number = sccli - self.song_import.comments = scomments - - - def finish(self): - """ Separate function, allows test suite to not pollute database""" - self.song_import.finish() + new_song.authors = alist + new_song.title = sname + new_song.copyright = scopyright + new_song.ccli_number = sccli + new_song.comments = scomments + new_song.finish() From 81b53ee21b8ec0dbc2a878f604b7bd12dd0d5785 Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Sat, 28 Aug 2010 15:27:17 +0200 Subject: [PATCH 018/120] Changs to comment formatting --- openlp/plugins/songs/lib/cclifileimport.py | 93 ++++++++++++---------- 1 file changed, 52 insertions(+), 41 deletions(-) diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index d4314a7e0..46fab1863 100755 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -38,50 +38,20 @@ class CCLIFileImportError(Exception): class CCLIFileImport(SongImport): """ - Import songs from CCLI SongSelect files in both .txt and .usr formats - http://www.ccli.com - - The format of the .txt format is: - ========== - Song Title - <> - Description of following text (Verse/Chorus) and number - - <> - <> - Next text block description (etc) - - <> - <> - CCLI Number (e.g.CCLI-Liednummer: 2672885) - Copyright "|" delimited (e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing) - Authors "|" delimited (e.g. Lenny LeBlanc | Paul Baloche) - Licencing info (e.g. For use solely with the SongSelect Terms of Use. All rights Reserved. www.ccli.com) - CCLI Licence number (e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14) - ========== - - The format of the .usr format is: - ========== - [File] - Type=SongSelect Import File - Version=3.0 - [S A2672885] - Title=Above All - Author=LeBlanc, Lenny | Baloche, Paul - Copyright=1999 Integrity's Hosanna! Music | LenSongs Publishing (Verwaltet von Gerth Medien Musikverlag) | (Verwaltet von Gerth Medien Musikverlag) - Admin=Gerth Medien Musikverlag - Themes=Cross/tKingship/tMajesty/tRedeemer - Keys=A - Fields=Vers 1/tVers 2/tChorus 1/tAndere 1 - Words=Above all powers.... [/n = CR, /n/t = CRLF] - ========== - + The :class:`CCLIFileImport` class provides OpenLP with the ability to + import CCLI SongSelect song files in both .txt and .usr formats + see http://www.ccli.com """ def __init__(self, master_manager, **kwargs): """ - Initialise the class. Requires a songmanager class which - is passed to SongImport for writing song to disk + Initialise the import. + + ``manager`` + The song manager for the running OpenLP installation. +``filenames`` + The files to be imported. + """ SongImport.__init__(self, master_manager) self.master_manager = master_manager @@ -130,7 +100,26 @@ class CCLIFileImport(SongImport): def do_import_usr_file(self, textList): """ - Process the USR file - pass in a list of lines + Process the USR file + + ``textList`` + An array of strings containing the usr file content. + + The format of the .usr format is: + ========== + [File] + Type=SongSelect Import File + Version=3.0 + [S A2672885] + Title=Above All + Author=LeBlanc, Lenny | Baloche, Paul + Copyright=1999 Integrity's Hosanna! Music | LenSongs Publishing (Verwaltet von Gerth Medien Musikverlag) | (Verwaltet von Gerth Medien Musikverlag) + Admin=Gerth Medien Musikverlag + Themes=Cross/tKingship/tMajesty/tRedeemer + Keys=A + Fields=Vers 1/tVers 2/tChorus 1/tAndere 1 + Words=Above all powers.... [/n = CR, /n/t = CRLF] + ========== """ log.debug('USR file text: %s', textList) @@ -193,6 +182,28 @@ class CCLIFileImport(SongImport): def do_import_txt_file(self, textList): """ Process the TXT file - pass in a list of lines + + ``textList`` + An array of strings containing the txt file content. + + The format of the .txt format is: + ========== + Song Title + <> + Description of following text (Verse/Chorus) and number + + <> + <> + Next text block description (etc) + + <> + <> + CCLI Number (e.g.CCLI-Liednummer: 2672885) + Copyright "|" delimited (e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing) + Authors "|" delimited (e.g. Lenny LeBlanc | Paul Baloche) + Licencing info (e.g. For use solely with the SongSelect Terms of Use. All rights Reserved. www.ccli.com) + CCLI Licence number (e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14) + ========== """ log.debug('TXT file text: %s', textList) From 10aa9432d69179f053093163c132de0248738708 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 28 Aug 2010 19:44:49 +0100 Subject: [PATCH 020/120] Fix font sizes and performance of previews --- openlp/core/lib/htmlbuilder.py | 10 +++++----- openlp/core/ui/maindisplay.py | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 2fa7b0df0..b6a1a9130 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -290,7 +290,7 @@ Therefore one table for text, one for outline and one for shadow. """ -def build_html(item, screen, alert): +def build_html(item, screen, alert, islive): """ Build the full web paged structure for display @@ -312,7 +312,7 @@ def build_html(item, screen, alert): build_alert(alert, width), build_footer(item), build_lyrics(item), - u'true' if theme and theme.display_slideTransition \ + u'true' if theme and theme.display_slideTransition and islive\ else u'false', image) return html @@ -343,7 +343,7 @@ def build_lyrics(item): shadow = u'display: none;' if theme: lyricscommon = u'width: %spx; height: %spx; word-wrap: break-word; ' \ - u'font-family: %s; font-size: %spx; color: %s; line-height: %d%%;' % \ + u'font-family: %s; font-size: %spt; color: %s; line-height: %d%%;' % \ (item.main.width(), item.main.height(), theme.font_main_name, theme.font_main_proportion, theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) @@ -398,7 +398,7 @@ def build_footer(item): width: %spx; height: %spx; font-family: %s; - font-size: %spx; + font-size: %spt; color: %s; text-align: %s; """ @@ -427,7 +427,7 @@ def build_alert(alertTab, width): width: %s; vertical-align: %s; font-family: %s; - font-size: %spx; + font-size: %spt; color: %s; background-color: %s; """ diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 98b7a84ec..6f7a6f74f 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -153,7 +153,7 @@ class MainDisplay(DisplayWidget): serviceItem = ServiceItem() serviceItem.bg_frame = initialFrame self.webView.setHtml(build_html(serviceItem, self.screen, \ - self.parent.alertTab)) + self.parent.alertTab, self.isLive)) self.initialFrame = True self.show() # To display or not to display? @@ -297,13 +297,14 @@ class MainDisplay(DisplayWidget): Generates a preview of the image displayed. """ log.debug(u'preview for %s', self.isLive) - # Wait for the fade to finish before geting the preview. - # Important otherwise preview will have incorrect text if at all ! - if self.serviceItem.themedata and \ - self.serviceItem.themedata.display_slideTransition: - while self.frame.evaluateJavaScript(u'show_text_complete()') \ - .toString() == u'false': - Receiver.send_message(u'openlp_process_events') + if self.isLive: + # Wait for the fade to finish before geting the preview. + # Important otherwise preview will have incorrect text if at all ! + if self.serviceItem.themedata and \ + self.serviceItem.themedata.display_slideTransition: + while self.frame.evaluateJavaScript(u'show_text_complete()') \ + .toString() == u'false': + Receiver.send_message(u'openlp_process_events') # Wait for the webview to update before geting the preview. # Important otherwise first preview will miss the background ! while not self.loaded: @@ -332,7 +333,8 @@ class MainDisplay(DisplayWidget): self.loaded = False self.initialFrame = False self.serviceItem = serviceItem - html = build_html(self.serviceItem, self.screen, self.parent.alertTab) + html = build_html(self.serviceItem, self.screen, self.parent.alertTab,\ + self.isLive) self.webView.setHtml(html) if serviceItem.foot_text and serviceItem.foot_text: self.footer(serviceItem.foot_text) From 271bbe22b25b5d3ce89ae738833a93425192e63b Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 28 Aug 2010 21:46:03 +0100 Subject: [PATCH 021/120] Made the constants more like constants! --- openlp/plugins/songs/lib/songimport.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index e270ee09d..dd83c679d 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -43,6 +43,12 @@ class SongImport(QtCore.QObject): whether the authors etc already exist and add them or refer to them as necessary """ + + COPYRIGHT_STRING = unicode(translate( + 'SongsPlugin.SongImport', 'copyright')) + COPYRIGHT_SYMBOL = unicode(translate( + 'SongsPlugin.SongImport', '\xa9')) + def __init__(self, manager): """ Initialise and create defaults for properties @@ -52,10 +58,6 @@ class SongImport(QtCore.QObject): """ self.manager = manager self.stop_import_flag = False - self.copyright_string = unicode(translate( - 'SongsPlugin.SongImport', 'copyright')) - self.copyright_symbol = unicode(translate( - 'SongsPlugin.SongImport', '\xa9')) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) self.setDefaults() @@ -129,13 +131,13 @@ class SongImport(QtCore.QObject): def process_verse_text(self, text): lines = text.split(u'\n') - if text.lower().find(self.copyright_string) >= 0 \ - or text.lower().find(self.copyright_symbol) >= 0: + if text.lower().find(COPYRIGHT_STRING) >= 0 \ + or text.lower().find(COPYRIGHT_SYMBOL) >= 0: copyright_found = False for line in lines: if (copyright_found or - line.lower().find(self.copyright_string) >= 0 or - line.lower().find(self.copyright_symbol) >= 0): + line.lower().find(COPYRIGHT_STRING) >= 0 or + line.lower().find(COPYRIGHT_SYMBOL) >= 0): copyright_found = True self.add_copyright(line) else: From 59d2e2dab644d33eba211f441c7da94d03979836 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 29 Aug 2010 01:09:05 +0200 Subject: [PATCH 022/120] Fixed up the OpenSong importer. --- openlp/plugins/songs/lib/opensongimport.py | 194 ++++++++++++--------- openlp/plugins/songs/lib/songimport.py | 2 +- 2 files changed, 110 insertions(+), 86 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index e1d683000..ccf8479bf 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -36,119 +36,148 @@ log = logging.getLogger(__name__) class OpenSongImportError(Exception): pass -class OpenSongImport(object): +class OpenSongImport(SongImport): """ - Import songs exported from OpenSong - the format is described loosly here: - http://www.opensong.org/d/manual/song_file_format_specification + Import songs exported from OpenSong - However, it doesn't describe the section, so here's an attempt: + The format is described loosly on the `OpenSong File Format Specification + `_ page on + the OpenSong web site. However, it doesn't describe the section, + so here's an attempt: - Verses can be expressed in one of 2 ways: - - [v1]List of words - Another Line + Verses can be expressed in one of 2 ways, either in complete verses, or by + line grouping, i.e. grouping all line 1's of a verse together, all line 2's + of a verse together, and so on. - [v2]Some words for the 2nd verse - etc... - + An example of complete verses:: - The 'v' can be left out - it is implied - or: - - [V] - 1List of words - 2Some words for the 2nd Verse + + [v1] + List of words + Another Line - 1Another Line - 2etc... - + [v2] + Some words for the 2nd verse + etc... + - Either or both forms can be used in one song. The Number does not - necessarily appear at the start of the line + The 'v' in the verse specifiers above can be left out, it is implied. + + An example of line grouping:: + + + [V] + 1List of words + 2Some words for the 2nd Verse + + 1Another Line + 2etc... + + + Either or both forms can be used in one song. The number does not + necessarily appear at the start of the line. Additionally, the [v1] labels + can have either upper or lower case Vs. - The [v1] labels can have either upper or lower case Vs Other labels can be used also: - C - Chorus - B - Bridge - Guitar chords can be provided 'above' the lyrics (the line is - preceeded by a'.') and _s can be used to signify long-drawn-out - words: + C + Chorus - . A7 Bm - 1 Some____ Words + B + Bridge - Chords and _s are removed by this importer. + All verses are imported and tagged appropriately. - The verses etc. are imported and tagged appropriately. + Guitar chords can be provided "above" the lyrics (the line is preceeded by + a period "."), and one or more "_" can be used to signify long-drawn-out + words. Chords and "_" are removed by this importer. For example:: - The tag is used to populate the OpenLP verse - display order field. The Author and Copyright tags are also - imported to the appropriate places. + . A7 Bm + 1 Some____ Words + + The tag is used to populate the OpenLP verse display order + field. The Author and Copyright tags are also imported to the appropriate + places. """ - def __init__(self, songmanager): + def __init__(self, manager, **kwargs): """ - Initialise the class. Requires a songmanager class which - is passed to SongImport for writing song to disk + Initialise the class. """ - self.songmanager = songmanager + SongImport.__init__(self, manager) + self.filenames = kwargs[u'filenames'] self.song = None + self.commit = True - def do_import(self, filename, commit=True): + def do_import(self): """ - Import either a single opensong file, or a zipfile - containing multiple opensong files If the commit parameter is - set False, the import will not be committed to the database - (useful for test scripts) + Import either a single opensong file, or a zipfile containing multiple + opensong files. If `self.commit` is set False, the import will not be + committed to the database (useful for test scripts). """ - ext = os.path.splitext(filename)[1] - if ext.lower() == ".zip": - log.info('Zipfile found %s', filename) - z = ZipFile(filename, u'r') - for song in z.infolist(): - parts = os.path.split(song.filename) - if parts[-1] == u'': - #No final part => directory - continue - songfile = z.open(song) - self.do_import_file(songfile) - if commit: + success = False + self.import_wizard.importProgressBar.setMaximum(len(self.filenames)) + for filename in self.filenames: + if self.stop_import_flag: + break + ext = os.path.splitext(filename)[1] + if ext.lower() == u'.zip': + log.debug(u'Zipfile found %s', filename) + z = ZipFile(filename, u'r') + for song in z.infolist(): + if self.stop_import_flag: + break + parts = os.path.split(song.filename) + if parts[-1] == u'': + #No final part => directory + continue + self.import_wizard.incrementProgressBar(u'Importing %s...' \ + % parts[-1]) + songfile = z.open(song) + self.do_import_file(songfile) + if self.commit: + self.finish() + if self.stop_import_flag: + break + else: + log.info('Direct import %s', filename) + self.import_wizard.incrementProgressBar(u'Importing %s...' \ + % os.path.split(filename)[-1]) + file = open(filename) + self.do_import_file(file) + if self.commit: self.finish() - else: - log.info('Direct import %s', filename) - file = open(filename) - self.do_import_file(file) - if commit: - self.finish() + if not self.commit: + self.finish() + - def do_import_file(self, file): """ Process the OpenSong file - pass in a file-like object, not a filename - """ - self.song_import = SongImport(self.songmanager) + """ tree = objectify.parse(file) root = tree.getroot() fields = dir(root) - decode = {u'copyright':self.song_import.add_copyright, - u'ccli':u'ccli_number', - u'author':self.song_import.parse_author, - u'title':u'title', - u'aka':u'alternate_title', - u'hymn_number':u'song_number'} + decode = { + u'copyright': self.add_copyright, + u'ccli': u'ccli_number', + u'author': self.parse_author, + u'title': u'title', + u'aka': u'alternate_title', + u'hymn_number': u'song_number' + } for (attr, fn_or_string) in decode.items(): if attr in fields: ustring = unicode(root.__getattr__(attr)) if type(fn_or_string) == type(u''): - self.song_import.__setattr__(fn_or_string, ustring) + self.__setattr__(fn_or_string, ustring) else: fn_or_string(ustring) - if u'theme' in fields: - self.song_import.topics.append(unicode(root.theme)) - if u'alttheme' in fields: - self.song_import.topics.append(unicode(root.alttheme)) + if u'theme' in fields and unicode(root.theme) not in self.topics: + self.topics.append(unicode(root.theme)) + if u'alttheme' in fields and unicode(root.alttheme) not in self.topics: + self.topics.append(unicode(root.alttheme)) # data storage while importing verses = {} lyrics = unicode(root.lyrics) @@ -158,6 +187,7 @@ class OpenSongImport(object): # in the absence of any other indication, verses are the default, # erm, versetype! versetype = u'V' + versenum = None for thisline in lyrics.split(u'\n'): # remove comments semicolon = thisline.find(u';') @@ -170,7 +200,6 @@ class OpenSongImport(object): if thisline[0] == u'.' or thisline.startswith(u'---') \ or thisline.startswith(u'-!!'): continue - # verse/chorus/etc. marker if thisline[0] == u'[': versetype = thisline[1].upper() @@ -186,7 +215,6 @@ class OpenSongImport(object): versenum = u'1' continue words = None - # number at start of line.. it's verse number if thisline[0].isdigit(): versenum = thisline[0] @@ -207,7 +235,7 @@ class OpenSongImport(object): our_verse_order.append(versetag) if words: # Tidy text and remove the ____s from extended words - words = self.song_import.tidy_text(words) + words = self.tidy_text(words) words = words.replace('_', '') verses[versetype][versenum].append(words) # done parsing @@ -220,7 +248,7 @@ class OpenSongImport(object): for num in versenums: versetag = u'%s%s' % (versetype, num) lines = u'\n'.join(verses[versetype][num]) - self.song_import.verses.append([versetag, lines]) + self.verses.append([versetag, lines]) # Keep track of what we have for error checking later versetags[versetag] = 1 # now figure out the presentation order @@ -236,8 +264,4 @@ class OpenSongImport(object): if not versetags.has_key(tag): log.warn(u'Got order %s but not in versetags, skipping', tag) else: - self.song_import.verse_order_list.append(tag) - - def finish(self): - """ Separate function, allows test suite to not pollute database""" - self.song_import.finish() + self.verse_order_list.append(tag) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 2ffb0beda..0bfebba47 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -236,7 +236,7 @@ class SongImport(QtCore.QObject): """ All fields have been set to this song. Write it away """ - if len(self.authors) == 0: + if not self.authors: self.authors.append(u'Author unknown') self.commit_song() From 4379004f0eedcb32c8e4c4010744375624182fd9 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 29 Aug 2010 15:27:51 +0100 Subject: [PATCH 023/120] rename theme suffix --- openlp/core/ui/thememanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 5cd989a2a..11130293c 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -295,7 +295,7 @@ class ThemeManager(QtGui.QWidget): path = unicode(path) if path: SettingsManager.set_last_dir(self.settingsSection, path, 1) - themePath = os.path.join(path, theme + u'.thz') + themePath = os.path.join(path, theme + u'.otz') zip = None try: zip = zipfile.ZipFile(themePath, u'w') From 93c87c396bd2f22d851a7775799a4fb61d73023d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 29 Aug 2010 15:42:47 +0100 Subject: [PATCH 024/120] add space --- openlp/core/lib/htmlbuilder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index ab88da3a5..332d23844 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -312,7 +312,7 @@ def build_html(item, screen, alert, islive): build_alert(alert, width), build_footer(item), build_lyrics(item), - u'true' if theme and theme.display_slideTransition and islive\ + u'true' if theme and theme.display_slideTransition and islive \ else u'false', image) return html From 002b5de1c323831550ca9d59498d88197e88acb7 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 29 Aug 2010 15:44:14 +0100 Subject: [PATCH 025/120] remove slash --- openlp/core/ui/maindisplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 6f7a6f74f..be6116c9e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -152,7 +152,7 @@ class MainDisplay(DisplayWidget): splash_image) serviceItem = ServiceItem() serviceItem.bg_frame = initialFrame - self.webView.setHtml(build_html(serviceItem, self.screen, \ + self.webView.setHtml(build_html(serviceItem, self.screen, self.parent.alertTab, self.isLive)) self.initialFrame = True self.show() From 90ac6da8392b049345a97c2b67f40e35b6f4f3b7 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 29 Aug 2010 20:12:36 +0200 Subject: [PATCH 026/120] Don't show the display on startup if there's only one monitor. --- openlp/core/ui/maindisplay.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 98b7a84ec..085ebd97d 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -155,9 +155,10 @@ class MainDisplay(DisplayWidget): self.webView.setHtml(build_html(serviceItem, self.screen, \ self.parent.alertTab)) self.initialFrame = True - self.show() + #self.show() # To display or not to display? if not self.screen[u'primary']: + self.show() self.primary = False else: self.primary = True From d3ee43965f048a4ebbfe87cd2a084665e41a5c5b Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Sun, 29 Aug 2010 20:24:09 +0200 Subject: [PATCH 027/120] Change comments to reStructuredText format --- openlp/plugins/songs/lib/cclifileimport.py | 111 ++++++++++++++------- 1 file changed, 74 insertions(+), 37 deletions(-) diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 46fab1863..65de4bd9f 100755 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -49,7 +49,7 @@ class CCLIFileImport(SongImport): ``manager`` The song manager for the running OpenLP installation. -``filenames`` + ``filenames`` The files to be imported. """ @@ -100,26 +100,46 @@ class CCLIFileImport(SongImport): def do_import_usr_file(self, textList): """ - Process the USR file + The :method:`do_import_usr_file` method provides OpenLP with the ability to + import CCLI SongSelect songs in *USR* file format ``textList`` An array of strings containing the usr file content. - The format of the .usr format is: - ========== - [File] - Type=SongSelect Import File - Version=3.0 - [S A2672885] - Title=Above All - Author=LeBlanc, Lenny | Baloche, Paul - Copyright=1999 Integrity's Hosanna! Music | LenSongs Publishing (Verwaltet von Gerth Medien Musikverlag) | (Verwaltet von Gerth Medien Musikverlag) - Admin=Gerth Medien Musikverlag - Themes=Cross/tKingship/tMajesty/tRedeemer - Keys=A - Fields=Vers 1/tVers 2/tChorus 1/tAndere 1 - Words=Above all powers.... [/n = CR, /n/t = CRLF] - ========== + **SongSelect .usr file format** + ``[File]`` + USR file format first line + ``Type=`` + Indicates the file type + e.g. *Type=SongSelect Import File* + ``Version=3.0`` + File format version + ``[S A2672885]`` + Contains the CCLI Song number e.g. *2672885* + ``Title=`` + Contains the song title (e.g. *Title=Above All*) + ``Author=`` + Contains a | delimited list of the song authors + e.g. *Author=LeBlanc, Lenny | Baloche, Paul* + ``Copyright=`` + Contains a | delimited list of the song copyrights + e.g. Copyright=1999 Integrity's Hosanna! Music | LenSongs Publishing (Verwaltet von Gerth Medien Musikverlag) | (Verwaltet von Gerth Medien Musikverlag) + ``Admin=`` + Contains the song administrator + e.g. *Admin=Gerth Medien Musikverlag* + ``Themes=`` + Contains a /t delimited list of the song themes + e.g. *Themes=Cross/tKingship/tMajesty/tRedeemer* + ``Keys=`` + Contains the keys in which the music is played?? + e.g. *Keys=A* + ``Fields=`` + Contains a list of the songs fields in order /t delimited + e.g. *Fields=Vers 1/tVers 2/tChorus 1/tAndere 1* + ``Words=`` + Contains the songs various lyrics in order as shown by the + *Fields* description + e.g. *Words=Above all powers....* [/n = CR, /n/t = CRLF] """ log.debug('USR file text: %s', textList) @@ -181,29 +201,46 @@ class CCLIFileImport(SongImport): def do_import_txt_file(self, textList): """ - Process the TXT file - pass in a list of lines + The :method:`do_import_txt_file` method provides OpenLP with the ability to + import CCLI SongSelect songs in *TXT* file format ``textList`` An array of strings containing the txt file content. - - The format of the .txt format is: - ========== - Song Title - <> - Description of following text (Verse/Chorus) and number - - <> - <> - Next text block description (etc) - - <> - <> - CCLI Number (e.g.CCLI-Liednummer: 2672885) - Copyright "|" delimited (e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing) - Authors "|" delimited (e.g. Lenny LeBlanc | Paul Baloche) - Licencing info (e.g. For use solely with the SongSelect Terms of Use. All rights Reserved. www.ccli.com) - CCLI Licence number (e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14) - ========== + + **SongSelect .txt file format** + + ``Song Title`` + Contains the song title + + + + ``Title of following verse/chorus and number`` + e.g. Verse 1, Chorus 1 + + ``Verse/Chorus lyrics`` + + + + + + ``Title of next verse/chorus (repeats)`` + + ``Verse/Chorus lyrics`` + + + + + + ``Song CCLI Number`` + e.g. CCLI Number (e.g.CCLI-Liednummer: 2672885) + ``Song Copyright`` + e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing + ``Song Authors`` + e.g. Lenny LeBlanc | Paul Baloche + ``Licencing info`` + e.g. For use solely with the SongSelect Terms of Use. All rights Reserved. www.ccli.com + ``CCLI Licence number of user`` + e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14 """ log.debug('TXT file text: %s', textList) From 75d64a165c3e339c7802a984e5277a0b10b80004 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 29 Aug 2010 21:16:17 +0200 Subject: [PATCH 028/120] Removed the commented out line, since this works. --- openlp/core/ui/maindisplay.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 085ebd97d..9e9b9ad4e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -155,7 +155,6 @@ class MainDisplay(DisplayWidget): self.webView.setHtml(build_html(serviceItem, self.screen, \ self.parent.alertTab)) self.initialFrame = True - #self.show() # To display or not to display? if not self.screen[u'primary']: self.show() From 2d9b39986a513e651e144ca50b726f26bf9dd0bc Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 29 Aug 2010 22:05:36 +0200 Subject: [PATCH 029/120] Some more fixes for the OpenSong import. --- openlp/plugins/songs/lib/opensongimport.py | 21 +++++++++++++++------ openlp/plugins/songs/lib/songimport.py | 3 +-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index ccf8479bf..d51ff5b49 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -28,6 +28,7 @@ import logging import os from zipfile import ZipFile from lxml import objectify +from lxml.etree import Error, LxmlError from openlp.plugins.songs.lib.songimport import SongImport @@ -156,7 +157,12 @@ class OpenSongImport(SongImport): Process the OpenSong file - pass in a file-like object, not a filename """ - tree = objectify.parse(file) + self.authors = [] + try: + tree = objectify.parse(file) + except Error, LxmlError: + log.exception(u'Error parsing XML') + return root = tree.getroot() fields = dir(root) decode = { @@ -167,11 +173,11 @@ class OpenSongImport(SongImport): u'aka': u'alternate_title', u'hymn_number': u'song_number' } - for (attr, fn_or_string) in decode.items(): + for attr, fn_or_string in decode.items(): if attr in fields: ustring = unicode(root.__getattr__(attr)) - if type(fn_or_string) == type(u''): - self.__setattr__(fn_or_string, ustring) + if isinstance(fn_or_string, basestring): + setattr(self, fn_or_string, ustring) else: fn_or_string(ustring) if u'theme' in fields and unicode(root.theme) not in self.topics: @@ -252,12 +258,15 @@ class OpenSongImport(SongImport): # Keep track of what we have for error checking later versetags[versetag] = 1 # now figure out the presentation order + order = [] if u'presentation' in fields and root.presentation != u'': order = unicode(root.presentation) order = order.split() else: - assert len(our_verse_order)>0 - order = our_verse_order + if len(our_verse_order) > 0: + order = our_verse_order + else: + log.warn(u'No verse order available for %s, skipping.', self.title) for tag in order: if len(tag) == 1: tag = tag + u'1' # Assume it's no.1 if it's not there diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 0bfebba47..5889a3774 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -158,8 +158,7 @@ class SongImport(QtCore.QObject): def parse_author(self, text): """ Add the author. OpenLP stores them individually so split by 'and', '&' - and comma. - However need to check for 'Mr and Mrs Smith' and turn it to + and comma. However need to check for 'Mr and Mrs Smith' and turn it to 'Mr Smith' and 'Mrs Smith'. """ for author in text.split(u','): From 590aef4a87e3c87d28ef08121b7aa3232d4ecdf8 Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Mon, 30 Aug 2010 20:32:00 +0200 Subject: [PATCH 030/120] Corrected docstring lengths --- openlp/plugins/songs/.directory | 3 --- openlp/plugins/songs/lib/cclifileimport.py | 14 ++++++++------ resources/songs/.directory | 3 --- 3 files changed, 8 insertions(+), 12 deletions(-) delete mode 100644 openlp/plugins/songs/.directory delete mode 100644 resources/songs/.directory diff --git a/openlp/plugins/songs/.directory b/openlp/plugins/songs/.directory deleted file mode 100644 index 802164a81..000000000 --- a/openlp/plugins/songs/.directory +++ /dev/null @@ -1,3 +0,0 @@ -[Dolphin] -Timestamp=2010,8,20,16,22,57 -ViewMode=1 diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 65de4bd9f..cd69c4a86 100755 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -100,8 +100,8 @@ class CCLIFileImport(SongImport): def do_import_usr_file(self, textList): """ - The :method:`do_import_usr_file` method provides OpenLP with the ability to - import CCLI SongSelect songs in *USR* file format + The :method:`do_import_usr_file` method provides OpenLP with + the ability to import CCLI SongSelect songs in *USR* file format ``textList`` An array of strings containing the usr file content. @@ -123,7 +123,8 @@ class CCLIFileImport(SongImport): e.g. *Author=LeBlanc, Lenny | Baloche, Paul* ``Copyright=`` Contains a | delimited list of the song copyrights - e.g. Copyright=1999 Integrity's Hosanna! Music | LenSongs Publishing (Verwaltet von Gerth Medien Musikverlag) | (Verwaltet von Gerth Medien Musikverlag) + e.g. Copyright=1999 Integrity's Hosanna! Music | LenSongs + Publishing (Verwaltet von Gerth Medien Musikverlag) ``Admin=`` Contains the song administrator e.g. *Admin=Gerth Medien Musikverlag* @@ -201,8 +202,8 @@ class CCLIFileImport(SongImport): def do_import_txt_file(self, textList): """ - The :method:`do_import_txt_file` method provides OpenLP with the ability to - import CCLI SongSelect songs in *TXT* file format + The :method:`do_import_txt_file` method provides OpenLP with + the ability to import CCLI SongSelect songs in *TXT* file format ``textList`` An array of strings containing the txt file content. @@ -238,7 +239,8 @@ class CCLIFileImport(SongImport): ``Song Authors`` e.g. Lenny LeBlanc | Paul Baloche ``Licencing info`` - e.g. For use solely with the SongSelect Terms of Use. All rights Reserved. www.ccli.com + e.g. For use solely with the SongSelect Terms of Use. + All rights Reserved. www.ccli.com ``CCLI Licence number of user`` e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14 """ diff --git a/resources/songs/.directory b/resources/songs/.directory deleted file mode 100644 index 077f3daf2..000000000 --- a/resources/songs/.directory +++ /dev/null @@ -1,3 +0,0 @@ -[Dolphin] -Timestamp=2010,8,21,16,21,36 -ViewMode=1 From 83c5ee34505286a7fd8baa3e84488599c0058285 Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Mon, 30 Aug 2010 22:42:07 +0200 Subject: [PATCH 031/120] Removed openlp/plugins/songs/lib/.directory --- openlp/plugins/songs/lib/.directory | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 openlp/plugins/songs/lib/.directory diff --git a/openlp/plugins/songs/lib/.directory b/openlp/plugins/songs/lib/.directory deleted file mode 100644 index d9f9a4e00..000000000 --- a/openlp/plugins/songs/lib/.directory +++ /dev/null @@ -1,3 +0,0 @@ -[Dolphin] -Timestamp=2010,8,21,15,53,23 -ViewMode=1 From 305610ed8eb5a42f95754664c0ddcd69112056d1 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 30 Aug 2010 21:57:59 +0100 Subject: [PATCH 032/120] fixes --- openlp/core/lib/htmlbuilder.py | 54 +++++++++++++++------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 07b9f46ad..0c4a6821c 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -58,20 +58,18 @@ body { position: absolute; left: 0px; top: 0px; - z-index:10; - %s + z-index:10;%s } #footer { position: absolute; - z-index:5; - %s + z-index:5;%s } /* lyric css */ %s - @@ -221,22 +229,13 @@ co-operating in qwebkit. https://bugs.webkit.org/show_bug.cgi?id=43187 Therefore one table for text, one for outline and one for shadow. --> - +
- +
- -
- - -
- - -
- - +
@@ -268,11 +267,13 @@ def build_html(item, screen, alert, islive): html = HTMLSRC % (width, height, build_alert(alert, width), build_footer(item), - build_lyrics(item, islive), + build_lyrics(item), + u'true' if theme and theme.display_slideTransition and islive \ + else u'false', image) return html -def build_lyrics(item, islive): +def build_lyrics(item): """ Build the video display div @@ -280,15 +281,13 @@ def build_lyrics(item, islive): Service Item containing theme and location information """ style = """ -.lyricscommon { position: absolute; %s } -.lyricstable { z-index:4; %s } -.lyricsoutlinetable { z-index:3; %s } -.lyricsshadowtable { z-index:2; %s } -.lyrics { %s } -.lyricsoutline { %s } -.lyricsshadow { %s } -td { opacity: 1; %s } -td.fadeout { opacity: 0; } + .lyricscommon { position: absolute; %s } + .lyricstable { z-index:4; %s } + .lyricsoutlinetable { z-index:3; %s } + .lyricsshadowtable { z-index:2; %s } + .lyrics { %s } + .lyricsoutline { %s } + .lyricsshadow { %s } """ theme = item.themedata lyricscommon = u'' @@ -298,7 +297,6 @@ td.fadeout { opacity: 0; } lyrics = u'' outline = u'display: none;' shadow = u'display: none;' - transition = u'' if theme: lyricscommon = u'width: %spx; height: %spx; word-wrap: break-word; ' \ u'font-family: %s; font-size: %spt; color: %s; line-height: %d%%;' \ @@ -313,8 +311,6 @@ td.fadeout { opacity: 0; } (item.main.x() + float(theme.display_shadow_size), item.main.y() + float(theme.display_shadow_size)) align = u'' - if theme.display_slideTransition and islive: - transition = u'-webkit-transition: opacity 1s linear;' if theme.display_horizontalAlign == 2: align = u'text-align:center;' elif theme.display_horizontalAlign == 1: @@ -342,7 +338,7 @@ td.fadeout { opacity: 0; } if theme.display_shadow: shadow = u'color: %s;' % (theme.display_shadow_color) lyrics_html = style % (lyricscommon, lyricstable, outlinetable, - shadowtable, lyrics, outline, shadow, transition) + shadowtable, lyrics, outline, shadow) return lyrics_html def build_footer(item): From ad57ee09271585132997d16a6ce78446cb2816fb Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 1 Sep 2010 08:19:45 +0200 Subject: [PATCH 040/120] Removed an unnecessary space. --- openlp/core/ui/thememanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 11130293c..3ad6b5c8d 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -576,7 +576,7 @@ class ThemeManager(QtGui.QWidget): translate('OpenLP.ThemeManager', 'Theme Exists'), translate('OpenLP.ThemeManager', 'A theme with this name already ' - 'exists. Would you like to overwrite it?'), + 'exists. Would you like to overwrite it?'), (QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No) if self.saveThemeName != u'': From 40efcbfb8ed8fb1b59e82a1dd154e85226c65415 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 1 Sep 2010 08:32:59 +0200 Subject: [PATCH 041/120] Update translation files. --- resources/i18n/openlp_af.ts | 20 ++-- resources/i18n/openlp_de.ts | 28 ++--- resources/i18n/openlp_en.ts | 16 +-- resources/i18n/openlp_en_GB.ts | 20 ++-- resources/i18n/openlp_en_ZA.ts | 200 +++++++++++++++++---------------- resources/i18n/openlp_es.ts | 20 ++-- resources/i18n/openlp_et.ts | 26 ++--- resources/i18n/openlp_hu.ts | 20 ++-- resources/i18n/openlp_ko.ts | 16 +-- resources/i18n/openlp_nb.ts | 20 ++-- resources/i18n/openlp_pt_BR.ts | 22 ++-- resources/i18n/openlp_sv.ts | 20 ++-- 12 files changed, 216 insertions(+), 212 deletions(-) diff --git a/resources/i18n/openlp_af.ts b/resources/i18n/openlp_af.ts index bdcb68f09..78a29d279 100644 --- a/resources/i18n/openlp_af.ts +++ b/resources/i18n/openlp_af.ts @@ -2520,8 +2520,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Redigeer en sien weer 'n voorskou van die Lied + Edit and re-preview song + @@ -2550,8 +2550,8 @@ The content encoding is not UTF-8. - Go to Verse - Gaan na Vers + Go To + @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... Invoer begin... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Invoer voltooi. - + Your song import failed. diff --git a/resources/i18n/openlp_de.ts b/resources/i18n/openlp_de.ts index e2222d6db..0ed5de23a 100644 --- a/resources/i18n/openlp_de.ts +++ b/resources/i18n/openlp_de.ts @@ -2518,11 +2518,6 @@ The content encoding is not UTF-8. Move to live Verschieben zur Live Ansicht - - - Edit and re-preview Song - Lied bearbeiten und wieder anzeigen - Start continuous loop @@ -2548,10 +2543,15 @@ The content encoding is not UTF-8. Start playing media Abspielen + + + Edit and re-preview song + + - Go to Verse - Springe zu + Go To + @@ -2742,8 +2742,8 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? - + A theme with this name already exists. Would you like to overwrite it? + @@ -3343,7 +3343,7 @@ The content encoding is not UTF-8. - + Starting import... Starte import ... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Importvorgang abgeschlossen. - + Your song import failed. diff --git a/resources/i18n/openlp_en.ts b/resources/i18n/openlp_en.ts index 76e7b89dd..c0ab459bc 100644 --- a/resources/i18n/openlp_en.ts +++ b/resources/i18n/openlp_en.ts @@ -2520,7 +2520,7 @@ The content encoding is not UTF-8. - Edit and re-preview Song + Edit and re-preview song @@ -2550,7 +2550,7 @@ The content encoding is not UTF-8. - Go to Verse + Go To @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. - + Your song import failed. diff --git a/resources/i18n/openlp_en_GB.ts b/resources/i18n/openlp_en_GB.ts index 091b8c6c6..11225bda1 100644 --- a/resources/i18n/openlp_en_GB.ts +++ b/resources/i18n/openlp_en_GB.ts @@ -2520,8 +2520,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Edit and re-preview Song + Edit and re-preview song + @@ -2550,8 +2550,8 @@ The content encoding is not UTF-8. - Go to Verse - Go to Verse + Go To + @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... Starting import... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Finished import. - + Your song import failed. diff --git a/resources/i18n/openlp_en_ZA.ts b/resources/i18n/openlp_en_ZA.ts index a3c4ba050..3fcd45621 100644 --- a/resources/i18n/openlp_en_ZA.ts +++ b/resources/i18n/openlp_en_ZA.ts @@ -119,7 +119,7 @@ pt - pt + pt @@ -134,7 +134,7 @@ Location: - Location: + Location: @@ -154,7 +154,7 @@ Middle - Middle + Middle @@ -222,17 +222,17 @@ Book Chapter:Verse-Chapter:Verse Bibles - Bibles + Bibles Verse Display - Verse Display + Verse Display Only show new chapter numbers - Only show new chapter numbers + Only show new chapter numbers @@ -911,7 +911,7 @@ Changes do not affect verses already in the service. Reset Live Background - + Reset Live Background @@ -2236,7 +2236,9 @@ Built With Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + Version %s of OpenLP is now available for download (you are currently running version %s). + +You can download the latest version from http://openlp.org/. @@ -2563,93 +2565,94 @@ You can download the latest version from http://openlp.org/. Delete the selected item from the service. - + Delete the selected item from the service. &Add New Item - + &Add New Item &Add to Selected Item - + &Add to Selected Item &Edit Item - + &Edit Item &Reorder Item - + &Reorder Item &Notes - + &Notes &Preview Verse - + &Preview Verse &Live Verse - &Live Verse + &Live Verse &Change Item Theme - &Change Item Theme + &Change Item Theme Save Changes to Service? - Save Changes to Service? + Save Changes to Service? Your service is unsaved, do you want to save those changes before creating a new one? - + Your service is unsaved, do you want to save those changes before creating a new one? OpenLP Service Files (*.osz) - + OpenLP Service Files (*.osz) Your current service is unsaved, do you want to save the changes before opening a new one? - + Your current service is unsaved, do you want to save the changes before opening a new one? Error - Error + Error File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. +The content encoding is not UTF-8. File is not a valid service. - + File is not a valid service. Missing Display Handler - + Missing Display Handler Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as there is no handler to display it @@ -2657,7 +2660,7 @@ The content encoding is not UTF-8. Service Item Notes - Service Item Notes + Service Item Notes @@ -2665,7 +2668,7 @@ The content encoding is not UTF-8. Configure OpenLP - + Configure OpenLP @@ -2673,67 +2676,67 @@ The content encoding is not UTF-8. Live - Live + Live Preview - Preview + Preview Move to previous - Move to previous + Move to previous Move to next - Move to next slide. + Move to next Hide - + Hide Move to live - Move to live - - - - Edit and re-preview Song - Edit and re-preview Song. + Move to live Start continuous loop - Start continuous loop + Start continuous loop Stop continuous loop - + Stop continuous loop s - s + s Delay between slides in seconds - Delay between slides in seconds. + Delay between slides in seconds Start playing media - Start playing media + Start playing media + + + + Edit and re-preview song + - Go to Verse - Go to Verse + Go To + @@ -2741,12 +2744,12 @@ The content encoding is not UTF-8. Spelling Suggestions - + Spelling Suggestions Formatting Tags - + Formatting Tags @@ -2754,177 +2757,178 @@ The content encoding is not UTF-8. New Theme - + New Theme Create a new theme. - + Create a new theme. Edit Theme - Edit Theme + Edit Theme Edit a theme. - + Edit a theme. Delete Theme - Delete Theme + Delete Theme Delete a theme. - + Delete a theme. Import Theme - Import Theme + Import Theme Import a theme. - + Import a theme. Export Theme - Export Theme + Export Theme Export a theme. - + Export a theme. &Edit Theme - + &Edit Theme &Delete Theme - + &Delete Theme Set As &Global Default - + Set As &Global Default E&xport Theme - + E&xport Theme %s (default) - + %s (default) You must select a theme to edit. - + You must select a theme to edit. You must select a theme to delete. - + You must select a theme to delete. Delete Confirmation - + Delete Confirmation Delete theme? - + Delete theme? Error - Error + Error You are unable to delete the default theme. - + You are unable to delete the default theme. Theme %s is use in %s plugin. - + Theme %s is use in %s plugin. Theme %s is use by the service manager. - + Theme %s is use by the service manager. You have not selected a theme. - + You have not selected a theme. Save Theme - (%s) - Save Theme - (%s) + Save Theme - (%s) Theme Exported - + Theme Exported Your theme has been successfully exported. - + Your theme has been successfully exported. Theme Export Failed - + Theme Export Failed Your theme could not be exported due to an error. - + Your theme could not be exported due to an error. Select Theme Import File - + Select Theme Import File Theme (*.*) - + Theme (*.*) File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. +The content encoding is not UTF-8. File is not a valid theme. - + File is not a valid theme. Theme Exists - Theme Exists + Theme Exists - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -2933,47 +2937,47 @@ The content encoding is not UTF-8. Themes - Themes + Themes Global Theme - + Global Theme Theme Level - + Theme Level S&ong Level - + S&ong Level Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. &Service Level - + &Service Level Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. &Global Level - + &Global Level Use the global theme, overriding any themes associated with either the service or the songs. - Use the global theme, overriding any themes associated with either the service or the songs. + Use the global theme, overriding any themes associated with either the service or the songs. @@ -2981,7 +2985,7 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - + <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. @@ -3525,7 +3529,7 @@ The content encoding is not UTF-8. - + Starting import... Starting import... @@ -3839,12 +3843,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3852,12 +3856,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Finished import. - + Your song import failed. diff --git a/resources/i18n/openlp_es.ts b/resources/i18n/openlp_es.ts index 000c2e18c..7eed8bc64 100644 --- a/resources/i18n/openlp_es.ts +++ b/resources/i18n/openlp_es.ts @@ -2520,8 +2520,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Editar y re-visualizar Canción + Edit and re-preview song + @@ -2550,8 +2550,8 @@ The content encoding is not UTF-8. - Go to Verse - Ir al Verso + Go To + @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... Iniciando importación... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Importación finalizada. - + Your song import failed. diff --git a/resources/i18n/openlp_et.ts b/resources/i18n/openlp_et.ts index fa40aa33d..bec3ed7a4 100644 --- a/resources/i18n/openlp_et.ts +++ b/resources/i18n/openlp_et.ts @@ -2524,11 +2524,6 @@ The content encoding is not UTF-8. Move to live Tõsta ekraanile - - - Edit and re-preview Song - Muuda ja kuva laulu eelvaade uuesti - Start continuous loop @@ -2554,10 +2549,15 @@ The content encoding is not UTF-8. Start playing media Meediaesituse alustamine + + + Edit and re-preview song + + - Go to Verse - Liikumine salmile + Go To + @@ -2748,7 +2748,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3429,7 +3429,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -3663,12 +3663,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3676,12 +3676,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. - + Your song import failed. diff --git a/resources/i18n/openlp_hu.ts b/resources/i18n/openlp_hu.ts index 1c75f31e3..5fa7ba974 100644 --- a/resources/i18n/openlp_hu.ts +++ b/resources/i18n/openlp_hu.ts @@ -2653,8 +2653,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Dal szerkesztése, majd újra az előnézet megnyitása + Edit and re-preview song + @@ -2683,8 +2683,8 @@ The content encoding is not UTF-8. - Go to Verse - Ugrás versszakra + Go To + @@ -2875,7 +2875,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3561,7 +3561,7 @@ The content encoding is not UTF-8. - + Starting import... Importálás indítása... @@ -3790,12 +3790,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3803,12 +3803,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Az importálás befejeződött. - + Your song import failed. diff --git a/resources/i18n/openlp_ko.ts b/resources/i18n/openlp_ko.ts index 685f0a7a8..4ab79d607 100644 --- a/resources/i18n/openlp_ko.ts +++ b/resources/i18n/openlp_ko.ts @@ -2520,7 +2520,7 @@ The content encoding is not UTF-8. - Edit and re-preview Song + Edit and re-preview song @@ -2550,7 +2550,7 @@ The content encoding is not UTF-8. - Go to Verse + Go To @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. - + Your song import failed. diff --git a/resources/i18n/openlp_nb.ts b/resources/i18n/openlp_nb.ts index 9d94a44c4..f2a7393d4 100644 --- a/resources/i18n/openlp_nb.ts +++ b/resources/i18n/openlp_nb.ts @@ -2520,8 +2520,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Endre og forhåndsvis sang + Edit and re-preview song + @@ -2550,8 +2550,8 @@ The content encoding is not UTF-8. - Go to Verse - Gå til vers + Go To + @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Import fullført. - + Your song import failed. diff --git a/resources/i18n/openlp_pt_BR.ts b/resources/i18n/openlp_pt_BR.ts index 4d25aa1bc..0e6ff05a7 100644 --- a/resources/i18n/openlp_pt_BR.ts +++ b/resources/i18n/openlp_pt_BR.ts @@ -2557,8 +2557,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Editar e pré-visualizar Música novamente + Edit and re-preview song + @@ -2587,8 +2587,8 @@ The content encoding is not UTF-8. - Go to Verse - Ir ao Versículo + Go To + @@ -2780,8 +2780,8 @@ A codificação do conteúdo não é UTF-8. - A theme with this name already exists. Would you like to overwrite it? - Já existe um tema com este nome. Deseja sobreescrevê-lo? + A theme with this name already exists. Would you like to overwrite it? + @@ -3466,7 +3466,7 @@ A codificação do conteúdo não é UTF-8. - + Starting import... Iniciando importação... @@ -3695,12 +3695,12 @@ A codificação do conteúdo não é UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3708,12 +3708,12 @@ A codificação do conteúdo não é UTF-8. SongsPlugin.SongImportForm - + Finished import. Importação Finalizada. - + Your song import failed. diff --git a/resources/i18n/openlp_sv.ts b/resources/i18n/openlp_sv.ts index db15f9534..d3322e9f9 100644 --- a/resources/i18n/openlp_sv.ts +++ b/resources/i18n/openlp_sv.ts @@ -2520,8 +2520,8 @@ The content encoding is not UTF-8. - Edit and re-preview Song - Ändra och åter-förhandsgranska sång + Edit and re-preview song + @@ -2550,8 +2550,8 @@ The content encoding is not UTF-8. - Go to Verse - Hoppa till vers + Go To + @@ -2742,7 +2742,7 @@ The content encoding is not UTF-8. - A theme with this name already exists. Would you like to overwrite it? + A theme with this name already exists. Would you like to overwrite it? @@ -3428,7 +3428,7 @@ The content encoding is not UTF-8. - + Starting import... Påbörjar import... @@ -3657,12 +3657,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImport - + copyright - + © @@ -3670,12 +3670,12 @@ The content encoding is not UTF-8. SongsPlugin.SongImportForm - + Finished import. Importen är färdig. - + Your song import failed. From b24467d32c4d7dd61e3be3ad719a92f6b3bdf06c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 1 Sep 2010 20:20:40 +0100 Subject: [PATCH 042/120] cleanup --- openlp/core/lib/renderer.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 5776874cc..aad686564 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -47,26 +47,13 @@ class Renderer(object): Initialise the renderer. """ self._rect = None - self._debug = False - self._display_shadow_size_footer = 0 - self._display_outline_size_footer = 0 self.theme_name = None self._theme = None self._bg_image_filename = None self.frame = None - self.frame_opaque = None self.bg_frame = None self.bg_image = None - def set_debug(self, debug): - """ - Set the debug mode of the renderer. - - ``debug`` - The debug mode. - """ - self._debug = debug - def set_theme(self, theme): """ Set the theme to be used. From ce73d86e0a4c97914d93efdc05d1b53ecb4b71d1 Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Wed, 1 Sep 2010 21:27:45 +0200 Subject: [PATCH 043/120] More code convention corrections --- openlp/plugins/songs/lib/cclifileimport.py | 174 +++++++++++---------- openlp/plugins/songs/lib/songimport.py | 12 +- 2 files changed, 96 insertions(+), 90 deletions(-) diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 28cfbc595..98f03d247 100755 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -142,51 +142,52 @@ class CCLIFileImport(SongImport): """ log.debug(u'USR file text: %s', textList) lyrics = [] - new_song = SongImport(self.manager) +# new_song = SongImport(self.manager) + self.set_defaults() for line in textList: if line.startswith(u'Title='): - sname = line[6:].strip() + song_name = line[6:].strip() elif line.startswith(u'Author='): - sauthor = line[7:].strip() + song_author = line[7:].strip() elif line.startswith(u'Copyright='): - scopyright = line[10:].strip() + song_copyright = line[10:].strip() elif line.startswith(u'[S A'): - sccli = line[4:-3].strip() + song_ccli = line[4:-3].strip() elif line.startswith(u'Fields='): #Fields contain single line indicating verse, chorus, etc, #/t delimited, same as with words field. store seperately #and process at end. - sfields = line[7:].strip() + song_fields = line[7:].strip() elif line.startswith(u'Words='): - swords = line[6:].strip() + song_words = line[6:].strip() #Unhandled usr keywords:Type,Version,Admin,Themes,Keys #Process Fields and words sections - fieldlst = sfields.split(u'/t') - wordslst = swords.split(u'/t') - for counter in range(0, len(fieldlst)): - if fieldlst[counter].startswith(u'Ver'): - vtype = u'V' - elif fieldlst[counter].startswith(u'Ch'): - vtype = u'C' - elif fieldlst[counter].startswith(u'Br'): - vtype = u'B' + field_list = song_fields.split(u'/t') + words_list = song_words.split(u'/t') + for counter in range(0, len(field_list)): + if field_list[counter].startswith(u'Ver'): + verse_type = u'V' + elif field_list[counter].startswith(u'Ch'): + verse_type = u'C' + elif field_list[counter].startswith(u'Br'): + verse_type = u'B' else: #Other - vtype = u'O' - vcontent = unicode(wordslst[counter]) - vcontent = vcontent.replace("/n", "\n") - if (len(vcontent) > 0): - new_song.add_verse(vcontent, vtype); + verse_type = u'O' + verse_text = unicode(words_list[counter]) + verse_text = verse_text.replace("/n", "\n") + if len(verse_text) > 0: + self.add_verse(verse_text, verse_type); #Handle multiple authors - lst = sauthor.split(u'/') - if len(lst) < 2: - lst = sauthor.split(u'|') - for author in lst: + author_list = song_author.split(u'/') + if len(author_list) < 2: + author_list = song_author.split(u'|') + for author in author_list: seperated = author.split(u',') - new_song.add_author(seperated[1].strip() + " " + seperated[0].strip()) - new_song.title = sname - new_song.copyright = scopyright - new_song.ccli_number = sccli - new_song.finish() + self.add_author(seperated[1].strip() + " " + seperated[0].strip()) + self.title = song_name + self.copyright = song_copyright + self.ccli_number = song_ccli + self.finish() def do_import_txt_file(self, textList): """ @@ -234,75 +235,78 @@ class CCLIFileImport(SongImport): e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14 """ log.debug(u'TXT file text: %s', textList) - new_song = SongImport(self.manager) - lnum = 0 - vcontent = u'' - scomments = u'' - scopyright = u''; +# new_song = SongImport(self.manager) + self.set_defaults() + line_number = 0 + verse_text = u'' + song_comments = u'' + song_copyright = u''; verse_start = False for line in textList: - line = line.strip() - if not line: - if (lnum==0): + clean_line = line.strip() + if not clean_line: + if line_number==0: continue elif verse_start: - if vcontent: - new_song.add_verse(vcontent, vtype) - vcontent = '' + if verse_text: + self.add_verse(verse_text, verse_type) + verse_text = '' verse_start = False else: - #lnum=0, song title - if (lnum==0): - sname = line - lnum += 1 - #lnum=1, verses - elif (lnum==1): - #lnum=1, ccli number, first line after verses - if line.startswith(u'CCLI'): - lnum += 1 - cparts = line.split(' ') - sccli = cparts[len(cparts)-1] - elif (verse_start == False): + #line_number=0, song title + if line_number==0: + song_name = clean_line + line_number += 1 + #line_number=1, verses + elif line_number==1: + #line_number=1, ccli number, first line after verses + if clean_line.startswith(u'CCLI'): + line_number += 1 + ccli_parts = clean_line.split(' ') + song_ccli = ccli_parts[len(ccli_parts)-1] + elif not verse_start: # We have the verse descriptor - parts = line.split(' ') - if (len(parts) == 2): - if parts[0].startswith(u'Ver'): - vtype = u'V' - elif parts[0].startswith(u'Ch'): - vtype = u'C' - elif parts[0].startswith(u'Br'): - vtype = u'B' + verse_desc_parts = clean_line.split(' ') + if len(verse_desc_parts) == 2: + if verse_desc_parts[0].startswith(u'Ver'): + verse_type = u'V' + elif verse_desc_parts[0].startswith(u'Ch'): + verse_type = u'C' + elif verse_desc_parts[0].startswith(u'Br'): + verse_type = u'B' else: - vtype = u'O' - vnumber = parts[1] + verse_type = u'O' + verse_number = verse_desc_parts[1] else: - vtype = u'O' - vnumber = 1 + verse_type = u'O' + verse_number = 1 verse_start = True else: # We have verse content or the start of the # last part. Add l so as to keep the CRLF - vcontent = vcontent + line + verse_text = verse_text + line else: - #lnum=2, copyright - if (lnum==2): - lnum += 1 - scopyright = line + #line_number=2, copyright + if line_number==2: + line_number += 1 + song_copyright = clean_line #n=3, authors - elif (lnum==3): - lnum += 1 - sauthor = line - #lnum=4, comments lines before last line - elif (lnum==4) and (not line.startswith(u'CCL')): - scomments = scomments + line + elif line_number==3: + line_number += 1 + song_author = clean_line + #line_number=4, comments lines before last line + elif (line_number==4) and (not clean_line.startswith(u'CCL')): + song_comments = song_comments + clean_line # split on known separators - alist = sauthor.split(u'/') - if len(alist) < 2: - alist = sauthor.split(u'|') - new_song.authors = alist - new_song.title = sname - new_song.copyright = scopyright - new_song.ccli_number = sccli - new_song.comments = scomments - new_song.finish() + author_list = song_author.split(u'/') + if len(author_list) < 2: + author_list = song_author.split(u'|') + #Clean spaces before and after author names + for author_name in author_list: + self.add_author(author_name.strip()) + self.title = song_name + self.copyright = song_copyright + self.ccli_number = song_ccli + self.comments = song_comments + self.finish() diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 2ffb0beda..60cdfd969 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -52,6 +52,11 @@ class SongImport(QtCore.QObject): """ self.manager = manager self.stop_import_flag = False + self.set_defaults() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) + + def set_defaults(self): self.title = u'' self.song_number = u'' self.alternate_title = u'' @@ -71,8 +76,6 @@ class SongImport(QtCore.QObject): 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( 'SongsPlugin.SongImport', '\xa9')) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) def stop_import(self): """ @@ -158,8 +161,7 @@ class SongImport(QtCore.QObject): def parse_author(self, text): """ Add the author. OpenLP stores them individually so split by 'and', '&' - and comma. - However need to check for 'Mr and Mrs Smith' and turn it to + and comma. However need to check for 'Mr and Mrs Smith' and turn it to 'Mr Smith' and 'Mrs Smith'. """ for author in text.split(u','): @@ -236,7 +238,7 @@ class SongImport(QtCore.QObject): """ All fields have been set to this song. Write it away """ - if len(self.authors) == 0: + if not self.authors: self.authors.append(u'Author unknown') self.commit_song() From 9ed0df5023bac7cd1ea96082ea1c2e5b855fd18f Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Wed, 1 Sep 2010 21:31:16 +0200 Subject: [PATCH 044/120] Removed unnecessary commented out lines --- openlp/plugins/songs/lib/cclifileimport.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 98f03d247..08bccef79 100755 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -142,7 +142,6 @@ class CCLIFileImport(SongImport): """ log.debug(u'USR file text: %s', textList) lyrics = [] -# new_song = SongImport(self.manager) self.set_defaults() for line in textList: if line.startswith(u'Title='): @@ -235,7 +234,6 @@ class CCLIFileImport(SongImport): e.g. CCL-Liedlizenznummer: 14 / CCLI License No. 14 """ log.debug(u'TXT file text: %s', textList) -# new_song = SongImport(self.manager) self.set_defaults() line_number = 0 verse_text = u'' From a9281e4cb9447f71d208a5840ae186bd424cea76 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 1 Sep 2010 22:36:02 +0100 Subject: [PATCH 045/120] replace evil-tables(tm) with div's --- openlp/core/lib/htmlbuilder.py | 44 ++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index db5b84efb..c5b5088c4 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -195,22 +195,23 @@ body { function text_fade(id, newtext){ var text = document.getElementById(id); if(!transition){ - text.innerHTML = newtext; - return; + text.innerHTML = newtext; + return; } if(text.style.opacity=='') text.style.opacity = 1; if(newtext==text.innerHTML){ text.style.opacity = parseFloat(text.style.opacity) + 0.3; } else { text.style.opacity -= 0.3; - if(text.style.opacity<=0.1) + if(text.style.opacity<=0.1){ text.innerHTML = newtext; + } } } function text_opacity(){ var text = document.getElementById('lyricsmain'); - return window.getComputedStyle(text, '').opacity; + return getComputedStyle(text, '').opacity; } function show_text_complete(){ return (text_opacity()==1); @@ -219,24 +220,25 @@ body { - - -
- - -
- - -
+
+
+
+
+
+
+
+
+
@@ -298,7 +300,7 @@ def build_lyrics(item): outline = u'display: none;' shadow = u'display: none;' if theme: - lyricscommon = u'width: %spx; height: %spx; word-wrap: break-word; ' \ + lyricscommon = u'display: table; width: %spx; height: %spx; word-wrap: break-word; ' \ u'font-family: %s; font-size: %spt; color: %s; line-height: %d%%;' \ % (item.main.width(), item.main.height(), theme.font_main_name, theme.font_main_proportion, theme.font_main_color, @@ -323,7 +325,7 @@ def build_lyrics(item): valign = u'vertical-align:middle;' else: valign = u'vertical-align:top;' - lyrics = u'%s %s' % (align, valign) + lyrics = u'display:table-cell; %s %s' % (align, valign) if theme.display_outline: lyricscommon += u' letter-spacing: 1px;' outline = u'-webkit-text-stroke: %sem %s; ' % \ From d4ce60534ad3a78866e2e7ca6412f2de98ba8a1f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 2 Sep 2010 10:59:21 +0200 Subject: [PATCH 046/120] Reworked the translation script. Renamed the translation files to just their language codes for easier integration into translation tools. --- resources/i18n/{openlp_af.ts => af.ts} | 0 resources/i18n/{openlp_de.ts => de.ts} | 0 resources/i18n/{openlp_en.ts => en.ts} | 0 resources/i18n/{openlp_en_GB.ts => en_GB.ts} | 0 resources/i18n/{openlp_en_ZA.ts => en_ZA.ts} | 2 +- resources/i18n/{openlp_es.ts => es.ts} | 0 resources/i18n/{openlp_et.ts => et.ts} | 0 resources/i18n/{openlp_hu.ts => hu.ts} | 0 resources/i18n/{openlp_ko.ts => ko.ts} | 0 resources/i18n/{openlp_nb.ts => nb.ts} | 0 resources/i18n/{openlp_pt_BR.ts => pt_BR.ts} | 0 resources/i18n/{openlp_sv.ts => sv.ts} | 0 scripts/translation_utils.py | 444 +++++++++++-------- 13 files changed, 270 insertions(+), 176 deletions(-) rename resources/i18n/{openlp_af.ts => af.ts} (100%) rename resources/i18n/{openlp_de.ts => de.ts} (100%) rename resources/i18n/{openlp_en.ts => en.ts} (100%) rename resources/i18n/{openlp_en_GB.ts => en_GB.ts} (100%) rename resources/i18n/{openlp_en_ZA.ts => en_ZA.ts} (99%) rename resources/i18n/{openlp_es.ts => es.ts} (100%) rename resources/i18n/{openlp_et.ts => et.ts} (100%) rename resources/i18n/{openlp_hu.ts => hu.ts} (100%) rename resources/i18n/{openlp_ko.ts => ko.ts} (100%) rename resources/i18n/{openlp_nb.ts => nb.ts} (100%) rename resources/i18n/{openlp_pt_BR.ts => pt_BR.ts} (100%) rename resources/i18n/{openlp_sv.ts => sv.ts} (100%) diff --git a/resources/i18n/openlp_af.ts b/resources/i18n/af.ts similarity index 100% rename from resources/i18n/openlp_af.ts rename to resources/i18n/af.ts diff --git a/resources/i18n/openlp_de.ts b/resources/i18n/de.ts similarity index 100% rename from resources/i18n/openlp_de.ts rename to resources/i18n/de.ts diff --git a/resources/i18n/openlp_en.ts b/resources/i18n/en.ts similarity index 100% rename from resources/i18n/openlp_en.ts rename to resources/i18n/en.ts diff --git a/resources/i18n/openlp_en_GB.ts b/resources/i18n/en_GB.ts similarity index 100% rename from resources/i18n/openlp_en_GB.ts rename to resources/i18n/en_GB.ts diff --git a/resources/i18n/openlp_en_ZA.ts b/resources/i18n/en_ZA.ts similarity index 99% rename from resources/i18n/openlp_en_ZA.ts rename to resources/i18n/en_ZA.ts index 3fcd45621..ebfc86a2e 100644 --- a/resources/i18n/openlp_en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -2993,7 +2993,7 @@ The content encoding is not UTF-8. Presentation - Presentation + Presentation diff --git a/resources/i18n/openlp_es.ts b/resources/i18n/es.ts similarity index 100% rename from resources/i18n/openlp_es.ts rename to resources/i18n/es.ts diff --git a/resources/i18n/openlp_et.ts b/resources/i18n/et.ts similarity index 100% rename from resources/i18n/openlp_et.ts rename to resources/i18n/et.ts diff --git a/resources/i18n/openlp_hu.ts b/resources/i18n/hu.ts similarity index 100% rename from resources/i18n/openlp_hu.ts rename to resources/i18n/hu.ts diff --git a/resources/i18n/openlp_ko.ts b/resources/i18n/ko.ts similarity index 100% rename from resources/i18n/openlp_ko.ts rename to resources/i18n/ko.ts diff --git a/resources/i18n/openlp_nb.ts b/resources/i18n/nb.ts similarity index 100% rename from resources/i18n/openlp_nb.ts rename to resources/i18n/nb.ts diff --git a/resources/i18n/openlp_pt_BR.ts b/resources/i18n/pt_BR.ts similarity index 100% rename from resources/i18n/openlp_pt_BR.ts rename to resources/i18n/pt_BR.ts diff --git a/resources/i18n/openlp_sv.ts b/resources/i18n/sv.ts similarity index 100% rename from resources/i18n/openlp_sv.ts rename to resources/i18n/sv.ts diff --git a/scripts/translation_utils.py b/scripts/translation_utils.py index 340cab11f..f52af4984 100755 --- a/scripts/translation_utils.py +++ b/scripts/translation_utils.py @@ -24,13 +24,31 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -# Short description -# Steps for creating languages: -# 1. make sure that the openlp_en.ts file exist -# 2. go to scripts folder and start: -# python translation_utils.py -a -############################################################################### +""" +This script is used to maintain the translation files in OpenLP. It downloads +the latest translation files from the Pootle translation server, updates the +local translation files from both the source code and the files from Pootle, +and can also generate the compiled translation files. + +Create New Language +------------------- + +To create a new language, simply run this script with the ``-a`` command line +option:: + + @:~$ ./translation_utils.py -a + +Update Translation Files +------------------------ + +The best way to update the translations is to download the files from Pootle, +and then update the local files using both the downloaded files and the source. +This is done easily via the ``-d``, ``-p`` and ``-u`` options:: + + @:~$ ./translation_utils.py -dpu + +""" import os import urllib import re @@ -39,201 +57,277 @@ from optparse import OptionParser from PyQt4 import QtCore from BeautifulSoup import BeautifulSoup -class TranslationUtils(object): +SERVER_URL = u'http://pootle.projecthq.biz/export/openlp/' +IGNORED_PATHS = [u'scripts'] +IGNORED_FILES = [u'setup.py'] + +verbose_mode = False + +class Command(object): + """ + Provide an enumeration of commands. + """ + Download = 1 + Create = 2 + Prepare = 3 + Update = 4 + Generate = 5 + +class CommandStack(object): + """ + This class provides an iterable stack. + """ def __init__(self): - self.ignore_paths = [u'./scripts'] - self.ignore_files = [u'setup.py'] - self.server_url = u'http://pootle.projecthq.biz/export/openlp/' - self.cmd_stack = [] - self.stack_count = 0 - self.verbose = False - + self.current_index = 0 + self.data = [] - def process_stack(self): - if len(self.cmd_stack) > 0: - if len(self.cmd_stack) == self.stack_count: - print u'Process %d commands' % self.stack_count - print u'%d. ' % (self.stack_count-len(self.cmd_stack)+1), - command = self.cmd_stack.pop(0) - if len(command) > 1: - command[0](command[1]) - else: - command[0]() + def __len__(self): + return len(self.data) + + def __getitem__(self, index): + if self.data[index].get(u'arguments'): + return self.data[index][u'command'], self.data[index][u'arguments'] else: - print "Finished all commands" + return self.data[index][u'command'] + + def __iter__(self): + return self + + def next(self): + if self.current_index == len(self.data): + raise StopIteration + else: + current_item = self.data[self.current_index][u'command'] + self.current_index += 1 + return current_item + + def append(self, command, **kwargs): + data = {u'command': command} + if u'arguments' in kwargs: + data[u'arguments'] = kwargs[u'arguments'] + self.data.append(data) + + def reset(self): + self.current_index = 0 - def downloadTranslations(self): - print 'Download Translation files from HQ-Server' - page = urllib.urlopen(u'%s' % (self.server_url)) - soup = BeautifulSoup(page) - languages = soup.findAll(text=re.compile(".*\.ts")) - for language in languages: - filename = os.path.join(u'..', u'resources', u'i18n', - u'openlp_%s' % language) - self.printVerbose(u'Get Translation File: %s' % filename) - self.get_and_write_file(language, filename) - print u' done' - self.process_stack() +def print_verbose(text): + """ + This method checks to see if we are in verbose mode, and if so prints + ``text`` out. - def get_and_write_file(self, language, filename): - page = urllib.urlopen(u'%s%s' % (self.server_url, language)) - content = page.read().decode('utf8') - page.close() - file = open(filename, u'w') - file.write(content.encode('utf8')) - file.close() - - def creation(self, language): - print "Create new Translation File" - """ - Use this option to create a new translation file - this function: - * create the new *.ts file - """ - filename = os.path.join(u'..', u'resources', u'i18n', - u'openlp_%s.ts' % language) - self.get_and_write_file(u'en.ts', filename) - self.printVerbose(""" - Please remind: For permanent providing this language: - this language name have to append to the global list - variable "translations" in this file - and this file have to be uploaded to the Pootle Server - Please contact the developers! - """) - print u' done' - self.process_stack() - - - def preparation(self): - print u'Generating the openlp.pro file' - stringlist = [] - start_dir = os.path.join(u'..') - for root, dirs, files in os.walk(start_dir): - for file in files: - path = u'%s' % root - path = path.replace('\\','/') - path = path.replace('..','.') - - if file.startswith(u'hook-') or file.startswith(u'test_'): - continue + ``text`` + The text to print. + """ + global verbose_mode + if verbose_mode: + print u' %s' % text - cond = False - for search in self.ignore_paths: - if path.startswith(search): - cond = True - if cond: - continue - cond = False - for search in self.ignore_files: - if search == file: - cond = True - if cond: - continue - - if file.endswith(u'.py'): +def run(command): + """ + This method runs an external application. + + ``command`` + The command to run. + """ + print_verbose(command) + process = QtCore.QProcess() + process.start(command) + while (process.waitForReadyRead()): + print_verbose(u'ReadyRead: %s' % QtCore.QString(process.readAll())) + print_verbose(u'Error(s):\n%s' % process.readAllStandardError()) + print_verbose(u'Output:\n%s' % process.readAllStandardOutput()) + print u' Done.' + +def download_file(source_filename, dest_filename): + """ + Download a file and save it to disk. + + ``source_filename`` + The file to download. + + ``dest_filename`` + The new local file name. + """ + print_verbose(u'Downloading from: %s' % (SERVER_URL + source_filename)) + page = urllib.urlopen(SERVER_URL + source_filename) + content = page.read().decode('utf8') + page.close() + file = open(dest_filename, u'w') + file.write(content.encode('utf8')) + file.close() + +def download_translations(): + """ + This method downloads the translation files from the Pootle server. + """ + print 'Download translation files from Pootle' + page = urllib.urlopen(SERVER_URL) + soup = BeautifulSoup(page) + languages = soup.findAll(text=re.compile(r'.*\.ts')) + for language in languages: + filename = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n', + language) + print_verbose(u'Get Translation File: %s' % filename) + download_file(language, filename) + print u' Done.' + +def prepare_project(): + """ + This method creates the project file needed to update the translation files + and compile them into .qm files. + """ + print u'Generating the openlp.pro file' + lines = [] + start_dir = os.path.abspath(u'..') + start_dir = start_dir + os.sep + print_verbose(u'Starting directory: %s' % start_dir) + for root, dirs, files in os.walk(start_dir): + for file in files: + path = root.replace(start_dir, u'').replace(u'\\', u'/') #.replace(u'..', u'.') + if file.startswith(u'hook-') or file.startswith(u'test_'): + continue + ignore = False + for ignored_path in IGNORED_PATHS: + if path.startswith(ignored_path): + ignore = True + break + if ignore: + continue + ignore = False + for ignored_file in IGNORED_FILES: + if file == ignored_file: + ignore = True + break + if ignore: + continue + if file.endswith(u'.py') or file.endswith(u'.pyw'): + if path: line = u'%s/%s' % (path, file) - self.printVerbose(u'Parsing "%s"' % line) - stringlist.append(u'SOURCES += %s' % line) - elif file.endswith(u'.pyw'): - line = u'%s/%s' % (path, file) - self.printVerbose(u'Parsing "%s"' % line) - stringlist.append(u'SOURCES += %s' % line) - elif file.endswith(u'.ts'): - line = u'%s/%s' % (path, file) - self.printVerbose(u'Parsing "%s"' % line) - stringlist.append(u'TRANSLATIONS += %s' % line) - - stringlist.sort() - self.write_file(os.path.join(start_dir, u'openlp.pro'), stringlist) - print u' done' - self.process_stack() + else: + line = file + print_verbose(u'Parsing "%s"' % line) + lines.append(u'SOURCES += %s' % line) + elif file.endswith(u'.ts'): + line = u'%s/%s' % (path, file) + print_verbose(u'Parsing "%s"' % line) + lines.append(u'TRANSLATIONS += %s' % line) + lines.sort() + file = open(os.path.join(start_dir, u'openlp.pro'), u'w') + file.write(u'\n'.join(lines).encode('utf8')) + file.close() + print u' Done.' - def update(self): - print u'Update the translation files' - cmd = u'pylupdate4 -verbose -noobsolete ../openlp.pro' - self.start_cmd(cmd) +def update_translations(): + print u'Update the translation files' + if not os.path.exists(os.path.join(os.path.abspath(u'..'), u'openlp.pro')): + print u'You have no generated a project file yet, please run this ' + \ + u'script with the -p option.' + return + else: + os.chdir(os.path.abspath(u'..')) + run(u'pylupdate4 -verbose -noobsolete openlp.pro') - def generate(self): - print u'Generate the related *.qm files' - cmd = u'lrelease ../openlp.pro' - self.start_cmd(cmd) - - def write_file(self, filename, stringlist): - content = u'' - for line in stringlist: - content = u'%s%s\n' % (content, line) - file = open(filename, u'w') - file.write(content.encode('utf8')) - file.close() +def generate_binaries(): + print u'Generate the related *.qm files' + if not os.path.exists(os.path.join(os.path.abspath(u'..'), u'openlp.pro')): + print u'You have no generated a project file yet, please run this ' + \ + u'script with the -p option. It is also recommended that you ' + \ + u'this script with the -u option to update the translation ' + \ + u'files as well.' + return + else: + os.chdir(os.path.abspath(u'..')) + run(u'lrelease openlp.pro') - def printVerbose(self, data): - if self.verbose: - print u' %s' % data +def create_translation(language): + """ + This method creates a new translation file. - def start_cmd(self, command): - self.printVerbose(command) - self.process = QtCore.QProcess() - self.process.start(command) - while (self.process.waitForReadyRead()): - self.printVerbose(u'ReadyRead: %s' % QtCore.QString(self.process.readAll())) - self.printVerbose(self.process.readAllStandardError()) - self.printVerbose(self.process.readAllStandardOutput()) - print u' done' - self.process_stack() - + ``language`` + The language file to create. + """ + print "Create new Translation File" + filename = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n', language) + download_file(u'en.ts', filename) + print u'\n** Please Note **\n' + print u'In order to get this file into OpenLP and onto the Pootle ' + \ + u'translation server you will need to subscribe to the OpenLP' + \ + u'Translators mailing list, and request that your language file ' + \ + u'be added to the project.\n' + print u' Done' + +def process_stack(command_stack): + """ + This method looks at the commands in the command stack, and processes them + in the order they are in the stack. + + ``command_stack`` + The command stack to process. + """ + if command_stack: + print u'Processing %d commands...' % len(command_stack) + for command in command_stack: + print u'%d.' % (command_stack.current_index), + if command == Command.Download: + download_translations() + elif command == Command.Prepare: + prepare_project() + elif command == Command.Update: + update_translations() + elif command == Command.Generate: + generate_binaries() + elif command == Command.Create: + command, arguments = command_stack[command_stack.current_index] + create_translation(*arguments) + print u'Finished processing commands.' + else: + print u'No commands to process.' def main(): - # start Main Class - Util = TranslationUtils() - + global verbose_mode # Set up command line options. - usage = u''' - This script handle the translation files for OpenLP. - Usage: %prog [options] - If no option will be used, options "-d -p -u -g" will be set automatically - ''' + usage = u'%prog [options]\nOptions are parsed in the order they are ' + \ + u'listed below. If no options are given, "-dpug" will be used.\n\n' + \ + u'This script is used to manage OpenLP\'s translation files.' parser = OptionParser(usage=usage) - parser.add_option('-d', '--download-ts', action='store_true', - dest='download', help='Load languages from Pootle Server') - parser.add_option('-c', '--create', metavar='lang', - help='creation of new translation file, Parameter: language (e.g. "en_GB"') - parser.add_option('-p', '--prepare', action='store_true', dest='prepare', - help='preparation (generate pro file)') + parser.add_option('-d', '--download-ts', dest='download', + action='store_true', help='download language files from Pootle') + parser.add_option('-c', '--create', dest=u'create', metavar='LANG', + help='create a new translation file for language LANG, e.g. "en_GB"') + parser.add_option('-p', '--prepare', dest='prepare', action='store_true', + help='generate a project file, used to update the translations') parser.add_option('-u', '--update', action='store_true', dest='update', - help='update translation files') - parser.add_option('-g', '--generate', action='store_true', dest='generate', - help='generate qm files') - parser.add_option('-v', '--verbose', action='store_true', dest='verbose', - help='Give more informations while processing') - + help='update translation files (needs a project file)') + parser.add_option('-g', '--generate', dest='generate', action='store_true', + help='compile .ts files into .qm files') + parser.add_option('-v', '--verbose', dest='verbose', action='store_true', + help='show extra information while processing translations') (options, args) = parser.parse_args() + # Create and populate the command stack + command_stack = CommandStack() if options.download: - Util.cmd_stack.append([Util.downloadTranslations]) + command_stack.append(Command.Download) if options.create: - Util.cmd_stack.append([Util.creation, u'%s' % options.create]) + command_stack.append(Command.Create, arguments=[options.create]) if options.prepare: - Util.cmd_stack.append([Util.preparation]) + command_stack.append(Command.Prepare) if options.update: - Util.cmd_stack.append([Util.update]) + command_stack.append(Command.Update) if options.generate: - Util.cmd_stack.append([Util.generate]) - if options.verbose: - Util.verbose = True + command_stack.append(Command.Generate) + verbose_mode = options.verbose + if not command_stack: + command_stack.append(Command.Download) + command_stack.append(Command.Prepare) + command_stack.append(Command.Update) + command_stack.append(Command.Generate) + # Process the commands + process_stack(command_stack) - if len(Util.cmd_stack) == 0: - Util.cmd_stack.append([Util.downloadTranslations]) - Util.cmd_stack.append([Util.preparation]) - Util.cmd_stack.append([Util.update]) - Util.cmd_stack.append([Util.generate]) - - Util.stack_count = len(Util.cmd_stack) - Util.process_stack() - - - if __name__ == u'__main__': if os.path.split(os.path.abspath(u'.'))[1] != u'scripts': print u'You need to run this script from the scripts directory.' else: main() + From df007a438e26284cb497be12b9b1e9793e6bd17a Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 2 Sep 2010 12:53:50 +0200 Subject: [PATCH 047/120] Fixed double-spacing --- openlp/plugins/bibles/lib/db.py | 2 +- openlp/plugins/bibles/lib/manager.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 51b6bb5fa..49bc82102 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -353,7 +353,7 @@ class BibleDB(QtCore.QObject, Manager): QtGui.QMessageBox.information(self.bible_plugin.mediaItem, translate('BiblesPlugin.BibleDB', 'Book not found'), translate('BiblesPlugin.BibleDB', 'The book you requested ' - 'could not be found in this bible. Please check your ' + 'could not be found in this bible. Please check your ' 'spelling and that this is a complete bible not just ' 'one testament.')) return verse_list diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index a0734aa98..4f35556f1 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -246,7 +246,7 @@ class BibleManager(object): translate('BiblesPlugin.BibleManager', 'Scripture Reference Error'), translate('BiblesPlugin.BibleManager', 'Your scripture ' - 'reference is either not supported by OpenLP or invalid. ' + 'reference is either not supported by OpenLP or invalid. ' 'Please make sure your reference conforms to one of the ' 'following patterns:\n\n' 'Book Chapter\n' From 081c66a1ed113a93ecc43912c4fdd11beaf3816f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 2 Sep 2010 13:00:08 +0200 Subject: [PATCH 048/120] More extra spaces removed. --- openlp/core/ui/aboutdialog.py | 83 ++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 3965b4ffc..84fc52958 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -199,18 +199,18 @@ class Ui_AboutDialog(object): 'Preamble\n' '\n' 'The licenses for most software are designed to take away your ' - 'freedom to share and change it. By contrast, the GNU General ' + 'freedom to share and change it. By contrast, the GNU General ' 'Public License is intended to guarantee your freedom to share ' 'and change free software--to make sure the software is free for ' - 'all its users. This General Public License applies to most of ' + 'all its users. This General Public License applies to most of ' 'the Free Software Foundation\'s software and to any other ' - 'program whose authors commit to using it. (Some other Free ' + 'program whose authors commit to using it. (Some other Free ' 'Software Foundation software is covered by the GNU Lesser ' - 'General Public License instead.) You can apply it to your ' + 'General Public License instead.) You can apply it to your ' 'programs, too.\n' '\n' 'When we speak of free software, we are referring to freedom, not ' - 'price. Our General Public Licenses are designed to make sure ' + 'price. Our General Public Licenses are designed to make sure ' 'that you have the freedom to distribute copies of free software ' '(and charge for this service if you wish), that you receive ' 'source code or can get it if you want it, that you can change ' @@ -225,8 +225,8 @@ class Ui_AboutDialog(object): '\n' 'For example, if you distribute copies of such a program, whether ' 'gratis or for a fee, you must give the recipients all the rights ' - 'that you have. You must make sure that they, too, receive or ' - 'can get the source code. And you must show them these terms so ' + 'that you have. You must make sure that they, too, receive or ' + 'can get the source code. And you must show them these terms so ' 'they know their rights.\n' '\n' 'We protect your rights with two steps: (1) copyright the ' @@ -235,15 +235,15 @@ class Ui_AboutDialog(object): '\n' 'Also, for each author\'s protection and ours, we want to make ' 'certain that everyone understands that there is no warranty for ' - 'this free software. If the software is modified by someone else ' + 'this free software. If the software is modified by someone else ' 'and passed on, we want its recipients to know that what they ' 'have is not the original, so that any problems introduced by ' 'others will not reflect on the original authors\' reputations.\n' '\n' 'Finally, any free program is threatened constantly by software ' - 'patents. We wish to avoid the danger that redistributors of a ' + 'patents. We wish to avoid the danger that redistributors of a ' 'free program will individually obtain patent licenses, in effect ' - 'making the program proprietary. To prevent this, we have made ' + 'making the program proprietary. To prevent this, we have made ' 'it clear that any patent must be licensed for everyone\'s free ' 'use or not licensed at all.\n' '\n' @@ -262,10 +262,10 @@ class Ui_AboutDialog(object): 'containing the Program or a portion of it, either verbatim or ' 'with modifications and/or translated into another language. ' '(Hereinafter, translation is included without limitation in the ' - 'term "modification".) Each licensee is addressed as "you".\n' + 'term "modification".) Each licensee is addressed as "you".\n' '\n' 'Activities other than copying, distribution and modification are ' - 'not covered by this License; they are outside its scope. The ' + 'not covered by this License; they are outside its scope. The ' 'act of running the Program is not restricted, and the output ' 'from the Program is covered only if its contents constitute a ' 'work based on the Program (independent of having been made by ' @@ -305,7 +305,7 @@ class Ui_AboutDialog(object): 'notice that there is no warranty (or else, saying that you ' 'provide a warranty) and that users may redistribute the program ' 'under these conditions, and telling the user how to view a copy ' - 'of this License. (Exception: if the Program itself is ' + 'of this License. (Exception: if the Program itself is ' 'interactive but does not normally print such an announcement, ' 'your work based on the Program is not required to print an ' 'announcement.)\n' @@ -315,7 +315,7 @@ class Ui_AboutDialog(object): 'Program, and can be reasonably considered independent and ' 'separate works in themselves, then this License, and its terms, ' 'do not apply to those sections when you distribute them as ' - 'separate works. But when you distribute the same sections as ' + 'separate works. But when you distribute the same sections as ' 'part of a whole which is a work based on the Program, the ' 'distribution of the whole must be on the terms of this License, ' 'whose permissions for other licensees extend to the entire ' @@ -350,17 +350,17 @@ class Ui_AboutDialog(object): 'medium customarily used for software interchange; or,\n' '\n' 'c) Accompany it with the information you received as to the ' - 'offer to distribute corresponding source code. (This ' + 'offer to distribute corresponding source code. (This ' 'alternative is allowed only for noncommercial distribution and ' 'only if you received the program in object code or executable ' 'form with such an offer, in accord with Subsection b above.)\n' '\n' 'The source code for a work means the preferred form of the work ' - 'for making modifications to it. For an executable work, ' + 'for making modifications to it. For an executable work, ' 'complete source code means all the source code for all modules ' 'it contains, plus any associated interface definition files, ' 'plus the scripts used to control compilation and installation of ' - 'the executable. However, as a special exception, the source ' + 'the executable. However, as a special exception, the source ' 'code distributed need not include anything that is normally ' 'distributed (in either source or binary form) with the major ' 'components (compiler, kernel, and so on) of the operating system ' @@ -374,7 +374,7 @@ class Ui_AboutDialog(object): 'not compelled to copy the source along with the object code.\n' '\n' '4. You may not copy, modify, sublicense, or distribute the ' - 'Program except as expressly provided under this License. Any ' + 'Program except as expressly provided under this License. Any ' 'attempt otherwise to copy, modify, sublicense or distribute the ' 'Program is void, and will automatically terminate your rights ' 'under this License. However, parties who have received copies, ' @@ -383,10 +383,10 @@ class Ui_AboutDialog(object): 'compliance.\n' '\n' '5. You are not required to accept this License, since you have ' - 'not signed it. However, nothing else grants you permission to ' - 'modify or distribute the Program or its derivative works. These ' + 'not signed it. However, nothing else grants you permission to ' + 'modify or distribute the Program or its derivative works. These ' 'actions are prohibited by law if you do not accept this ' - 'License. Therefore, by modifying or distributing the Program ' + 'License. Therefore, by modifying or distributing the Program ' '(or any work based on the Program), you indicate your acceptance ' 'of this License to do so, and all its terms and conditions for ' 'copying, distributing or modifying the Program or works based on ' @@ -395,7 +395,7 @@ class Ui_AboutDialog(object): '6. Each time you redistribute the Program (or any work based on ' 'the Program), the recipient automatically receives a license ' 'from the original licensor to copy, distribute or modify the ' - 'Program subject to these terms and conditions. You may not ' + 'Program subject to these terms and conditions. You may not ' 'impose any further restrictions on the recipients\' exercise of ' 'the rights granted herein. You are not responsible for enforcing ' 'compliance by third parties to this License.\n' @@ -405,10 +405,10 @@ class Ui_AboutDialog(object): 'patent issues), conditions are imposed on you (whether by court ' 'order, agreement or otherwise) that contradict the conditions of ' 'this License, they do not excuse you from the conditions of this ' - 'License. If you cannot distribute so as to satisfy ' + 'License. If you cannot distribute so as to satisfy ' 'simultaneously your obligations under this License and any other ' 'pertinent obligations, then as a consequence you may not ' - 'distribute the Program at all. For example, if a patent license ' + 'distribute the Program at all. For example, if a patent license ' 'would not permit royalty-free redistribution of the Program by ' 'all those who receive copies directly or indirectly through you, ' 'then the only way you could satisfy both it and this License ' @@ -423,7 +423,7 @@ class Ui_AboutDialog(object): 'any patents or other property right claims or to contest ' 'validity of any such claims; this section has the sole purpose ' 'of protecting the integrity of the free software distribution ' - 'system, which is implemented by public license practices. Many ' + 'system, which is implemented by public license practices. Many ' 'people have made generous contributions to the wide range of ' 'software distributed through that system in reliance on ' 'consistent application of that system; it is up to the ' @@ -439,29 +439,29 @@ class Ui_AboutDialog(object): 'interfaces, the original copyright holder who places the Program ' 'under this License may add an explicit geographical distribution ' 'limitation excluding those countries, so that distribution is ' - 'permitted only in or among countries not thus excluded. In such ' + 'permitted only in or among countries not thus excluded. In such ' 'case, this License incorporates the limitation as if written in ' 'the body of this License.\n' '\n' '9. The Free Software Foundation may publish revised and/or new ' - 'versions of the General Public License from time to time. Such ' + 'versions of the General Public License from time to time. Such ' 'new versions will be similar in spirit to the present version, ' 'but may differ in detail to address new problems or concerns.\n' '\n' - 'Each version is given a distinguishing version number. If the ' + 'Each version is given a distinguishing version number. If the ' 'Program specifies a version number of this License which applies ' - 'to it and \"any later version\', you have the option of ' + 'to it and "any later version", you have the option of ' 'following the terms and conditions either of that version or of ' - 'any later version published by the Free Software Foundation. If ' + 'any later version published by the Free Software Foundation. If ' 'the Program does not specify a version number of this License, ' 'you may choose any version ever published by the Free Software ' 'Foundation.\n' '\n' '10. If you wish to incorporate parts of the Program into other ' 'free programs whose distribution conditions are different, write ' - 'to the author to ask for permission. For software which is ' + 'to the author to ask for permission. For software which is ' 'copyrighted by the Free Software Foundation, write to the Free ' - 'Software Foundation; we sometimes make exceptions for this. Our ' + 'Software Foundation; we sometimes make exceptions for this. Our ' 'decision will be guided by the two goals of preserving the free ' 'status of all derivatives of our free software and of promoting ' 'the sharing and reuse of software generally.\n' @@ -470,12 +470,12 @@ class Ui_AboutDialog(object): '\n' '11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO ' 'WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE ' - 'LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ' + 'LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ' 'HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT ' 'WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, ' 'BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY ' - 'AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE ' - 'QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ' + 'AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE ' + 'QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ' 'PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY ' 'SERVICING, REPAIR OR CORRECTION.\n' '\n' @@ -499,7 +499,7 @@ class Ui_AboutDialog(object): 'this is to make it free software which everyone can redistribute ' 'and change under these terms.\n' '\n' - 'To do so, attach the following notices to the program. It is ' + 'To do so, attach the following notices to the program. It is ' 'safest to attach them to the start of each source file to most ' 'effectively convey the exclusion of warranty; and each file ' 'should have at least the "copyright" line and a pointer to where ' @@ -516,7 +516,7 @@ class Ui_AboutDialog(object): '\n' 'This program 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 ' + 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' 'GNU General Public License for more details.\n' '\n' 'You should have received a copy of the GNU General Public ' @@ -537,14 +537,14 @@ class Ui_AboutDialog(object): 'under certain conditions; type "show c" for details.\n' '\n' 'The hypothetical commands "show w" and "show c" should show ' - 'the appropriate parts of the General Public License. Of course, ' + 'the appropriate parts of the General Public License. Of course, ' 'the commands you use may be called something other than "show ' 'w" and "show c"; they could even be mouse-clicks or menu items--' 'whatever suits your program.\n' '\n' 'You should also get your employer (if you work as a programmer) ' 'or your school, if any, to sign a "copyright disclaimer" for the ' - 'program, if necessary. Here is a sample; alter the names:\n' + 'program, if necessary. Here is a sample; alter the names:\n' '\n' 'Yoyodyne, Inc., hereby disclaims all copyright interest in the ' 'program "Gnomovision" (which makes passes at compilers) written ' @@ -554,9 +554,9 @@ class Ui_AboutDialog(object): 'Ty Coon, President of Vice\n' '\n' 'This General Public License does not permit incorporating your ' - 'program into proprietary programs. If your program is a ' + 'program into proprietary programs. If your program is a ' 'subroutine library, you may consider it more useful to permit ' - 'linking proprietary applications with the library. If this is ' + 'linking proprietary applications with the library. If this is ' 'what you want to do, use the GNU Lesser General Public License ' 'instead of this License.')) self.aboutNotebook.setTabText( @@ -565,3 +565,4 @@ class Ui_AboutDialog(object): self.contributeButton.setText(translate('OpenLP.AboutForm', 'Contribute')) self.closeButton.setText(translate('OpenLP.AboutForm', 'Close')) + From 952dfca9fca2f6df936c3f1bde3becbc3bbd1adb Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 2 Sep 2010 13:05:48 +0200 Subject: [PATCH 049/120] Updated translation files, removed some more double-spaces --- openlp/core/ui/aboutdialog.py | 8 +- resources/i18n/af.ts | 56 ++--- resources/i18n/de.ts | 278 +++++++++++------------ resources/i18n/en.ts | 56 ++--- resources/i18n/en_GB.ts | 56 ++--- resources/i18n/en_ZA.ts | 416 ++++++++++++---------------------- resources/i18n/es.ts | 56 ++--- resources/i18n/et.ts | 274 +++++++++++----------- resources/i18n/hu.ts | 185 +++------------ resources/i18n/ko.ts | 56 ++--- resources/i18n/nb.ts | 56 ++--- resources/i18n/pt_BR.ts | 56 ++--- resources/i18n/sv.ts | 56 ++--- 13 files changed, 672 insertions(+), 937 deletions(-) diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 84fc52958..3b9190156 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -255,12 +255,12 @@ class Ui_AboutDialog(object): '\n' '0. This License applies to any program or other work which ' 'contains a notice placed by the copyright holder saying it may ' - 'be distributed under the terms of this General Public License. ' + 'be distributed under the terms of this General Public License. ' 'The "Program", below, refers to any such program or work, and a ' '"work based on the Program" means either the Program or any ' 'derivative work under copyright law: that is to say, a work ' 'containing the Program or a portion of it, either verbatim or ' - 'with modifications and/or translated into another language. ' + 'with modifications and/or translated into another language. ' '(Hereinafter, translation is included without limitation in the ' 'term "modification".) Each licensee is addressed as "you".\n' '\n' @@ -310,7 +310,7 @@ class Ui_AboutDialog(object): 'your work based on the Program is not required to print an ' 'announcement.)\n' '\n' - 'These requirements apply to the modified work as a whole. If ' + 'These requirements apply to the modified work as a whole. If ' 'identifiable sections of that work are not derived from the ' 'Program, and can be reasonably considered independent and ' 'separate works in themselves, then this License, and its terms, ' @@ -507,7 +507,7 @@ class Ui_AboutDialog(object): '\n' '\n' - 'Copyright (C) \n' + 'Copyright (C) \n' '\n' 'This program is free software; you can redistribute it and/or ' 'modify it under the terms of the GNU General Public License as ' diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index 78a29d279..3ca75ea47 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index 0ed5de23a..006e3f196 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -184,8 +184,8 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. - + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. +
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -206,7 +206,7 @@ Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + @@ -1019,141 +1019,6 @@ Built With Credits Credits - - - Copyright © 2004-2010 Raoul Snyman -Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard - -This program 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; version 2 of the License. - -This program 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 below for more details. - - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -This program 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 2 of the License, or (at your option) any later version. - -This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". -This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. - -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. - -<signature of Ty Coon>, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - - License @@ -1174,6 +1039,141 @@ This General Public License does not permit incorporating your program into prop build %s + + + Copyright © 2004-2010 Raoul Snyman +Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard + +This program 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; version 2 of the License. + +This program 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 below for more details. + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +<one line to give the program's name and a brief idea of what it does.> +Copyright (C) <year> <name of author> + +This program 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 2 of the License, or (at your option) any later version. + +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". +This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. + +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. + +<signature of Ty Coon>, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + + OpenLP.AdvancedTab diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index c0ab459bc..97f604a34 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. @@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 11225bda1..280d8f1a5 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index ebfc86a2e..cd62c00b3 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -184,8 +184,8 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. - The book you requested could not be found in this Bible. Please check your spelling and that this is a complete Bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. +
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -206,15 +206,7 @@ Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: - -Book Chapter -Book Chapter-Chapter -Book Chapter:Verse-Verse -Book Chapter:Verse-Verse,Verse-Verse -Book Chapter:Verse-Verse,Chapter:Verse-Verse -Book Chapter:Verse-Chapter:Verse - + @@ -992,271 +984,6 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr Credits Credits - - - Copyright © 2004-2010 Raoul Snyman -Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard - -This program 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; version 2 of the License. - -This program 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 below for more details. - - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -This program 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 2 of the License, or (at your option) any later version. - -This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". -This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. - -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. - -<signature of Ty Coon>, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - Copyright © 2004-2010 Raoul Snyman -Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard - -This program 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; version 2 of the License. - -This program 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 below for more details. - - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -This program 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 2 of the License, or (at your option) any later version. - -This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". -This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. - -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. - -<signature of Ty Coon>, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - License @@ -1356,6 +1083,141 @@ Built With Oxygen Icons: http://oxygen-icons.org/ + + + Copyright © 2004-2010 Raoul Snyman +Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard + +This program 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; version 2 of the License. + +This program 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 below for more details. + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +<one line to give the program's name and a brief idea of what it does.> +Copyright (C) <year> <name of author> + +This program 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 2 of the License, or (at your option) any later version. + +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". +This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. + +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. + +<signature of Ty Coon>, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + + OpenLP.AdvancedTab diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 7eed8bc64..17e2615a8 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. @@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index bec3ed7a4..fce37afcb 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -983,141 +983,6 @@ OpenLP on kirjutatud vabatahtlike poolt. Kui sulle meeldiks näha rohkem kristli Credits Autorid - - - Copyright © 2004-2010 Raoul Snyman -Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard - -This program 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; version 2 of the License. - -This program 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 below for more details. - - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -This program 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 2 of the License, or (at your option) any later version. - -This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". -This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. - -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. - -<signature of Ty Coon>, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - - License @@ -1180,6 +1045,141 @@ Built With + + + Copyright © 2004-2010 Raoul Snyman +Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard + +This program 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; version 2 of the License. + +This program 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 below for more details. + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +<one line to give the program's name and a brief idea of what it does.> +Copyright (C) <year> <name of author> + +This program 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 2 of the License, or (at your option) any later version. + +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". +This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. + +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. + +<signature of Ty Coon>, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + +
OpenLP.AdvancedTab diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 5fa7ba974..55cec3b93 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. @@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1042,28 +1042,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1075,9 +1075,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1089,37 +1089,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1129,14 +1129,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1148,144 +1148,17 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - Copyright © 2004-2010 Raoul Snyman -Részleges copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard - -Ez a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint. - -Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÁGRA vagy VALAMELY CÉLRA VALÓ ALKALMAZHATÓSÁGRA való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz. - - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Bárki terjesztheti, másolhatja a dokumentumot, de a módosítása nem megengedett. (A fordítás csak tájékoztató jellegű és jogi szempontból csakis az angol eredeti a mérvadó.) - -Előszó - -A legtöbb szoftver licencei azzal a szándékkal készültek, hogy minél kevesebb lehetőséget adjanak a szoftver megváltoztatására és terjesztésére. Ezzel szemben a GNU GPL célja, hogy garantálja a szabad szoftver másolásának és terjesztésének szabadságát, ezáltal biztosítva a szoftver szabad felhasználhatóságát minden felhasználó számára. A GPL szabályai vonatkoznak a Free Software Foundation legtöbb szoftverére, illetve minden olyan programra, melynek szerzője úgy dönt, hogy ezt használja a szerzői jog megjelölésekor. (A Free Software Foundation egyes szoftvereire a GNU LGPL érvényes.) Bárki használhatja a programjaiban a GPL-t a szerzői jogi megjegyzésnél. - -A szabad szoftver megjelölés nem jelenti azt, hogy a szoftvernek nem lehet ára. A GPL licencek célja, hogy garantálja a szabad szoftver másolatainak szabad terjesztését (és e szolgáltatásért akár díj felszámítását), a forráskód elérhetőségét, hogy bárki szabadon módosíthassa a szoftvert, vagy felhasználhassa a részeit új szabad programokban; és hogy mások megismerhessék ezt a lehetőséget. - -A szerző jogainak védelmében korlátozásokat kell hozni, amelyek megtiltják, hogy bárki megtagadhassa ezeket a jogokat másoktól, vagy ezekről való lemondásra kényszerítsen bárki mást. Ezek a megszorítások bizonyos felelősségeket jelentenek azok számára, akik a szoftver másolatait terjesztik vagy módosítják. - -Ha valaki például ilyen program másolatait terjeszti, akár ingyen vagy bizonyos összeg fejében, a szoftverre vonatkozó minden jogot tovább kell adnia a fogadó feleknek. Biztosítani kell továbbá, hogy megkapják vagy legalábbis megkaphassák a forráskódot is. És persze ezeket a licencfeltételeket is el kell juttatni, hogy tisztában legyenek a jogaikkal. - -A jogok védelme két lépésből áll: - -(1) a szoftver szerzői jogainak védelméből és - -(2) a jelen licenc biztosításából, amely jogalapot biztosít a szoftver másolására, terjesztésére és/vagy módosítására. - -Az egyes szerzők és a magunk védelmében biztosítani akarjuk, hogy mindenki megértse: a jelen szabad szoftverre nincs jótállás. Ha a szoftvert módosították és továbbadták, akkor mindenkinek, aki a módosított változatot kapja, tudnia kell, hogy az nem az eredeti, így a mások által okozott hibáknak nem lehet hatása az eredeti szerző hírnevére. - -Végül, a szabad szoftver létét állandóan fenyegetik a szoftverszabadalmak. El szeretnénk kerülni annak veszélyét, hogy a szabad program terjesztői szabadalmat jegyezhessenek be rá, ezáltal saját szellemi tulajdont képezővé tegyék a programot. Ennek megelőzéséhez tisztázni kívánjuk: szabadalom szabad szoftverrel kapcsolatban csak mindenki általi szabad használatra jegyezhető be, vagy egyáltalán nem jegyezhető be. - -A másolásra, terjesztésre, módosításra vonatkozó pontos szabályok és feltételek: -A MÁSOLÁSRA, TERJESZTÉSRE ÉS MÓDOSÍTÁSRA VONATKOZÓ FELTÉTELEK ÉS KIKÖTÉSEK - -0. Ez a licenc minden olyan programra vagy munkára vonatkozik, amelynek a szerzői jogi megjegyzésében a jog tulajdonosa a következő szöveget helyezte el: a GPL-ben foglaltak alapján terjeszthető. Az alábbiakban a Program kifejezés bármely ilyen programra vagy munkára vonatkozik, a Programon alapuló munka pedig magát a programot vagy egy szerzői joggal védett munkát jelenti: vagyis olyan munkát, amely tartalmazza a programot vagy annak egy részletét, módosítottan vagy módosítatlanul és/vagy más nyelvre fordítva. (Az alábbiakban a fordítás minden egyéb megkötés nélkül beletartozik a módosítás fogalmába.) Minden engedélyezés címzettje Ön. - -A jelen licenc a másoláson, terjesztésen és módosításon kívül más tevékenységre nem vonatkozik, azok a hatályán kívül esnek. A Program futtatása nincs korlátozva, illetve a Program kimenetére is csak abban az esetben vonatkozik ez a szabályozás, ha az tartalmazza a Programon alapuló munka egy részletét (függetlenül attól, hogy ez a Program futtatásával jött-e létre). Ez tehát a Program működésétől függ. - -1. A Program forráskódja módosítás nélkül másolható és bármely adathordozón terjeszthető, feltéve, hogy minden egyes példányon pontosan szerepel a megfelelő szerzői jogi megjegyzés, illetve a garanciavállalás elutasítása; érintetlenül kell hagyni minden erre a szabályozásra és a garancia teljes hiányára utaló szöveget és a jelen licencdokumentumot is el kell juttatni mindazokhoz, akik a Programot kapják. - -Felszámítható díj a másolat fizikai továbbítása fejében, illetve ellenszolgáltatás fejében a Programhoz garanciális támogatás is biztosítható. - -2. A Program vagy annak egy része módosítható, így a Programon alapuló munka jön létre. A módosítás ezután az 1. szakaszban adott feltételek szerint tovább terjeszthető, ha az alábbi feltételek is teljesülnek: - -a) A módosított fájlokat el kell látni olyan megjegyzéssel, amely feltünteti a módosítást végző nevét és a módosítások dátumát. - -b) Minden olyan munkát, amely részben vagy egészben tartalmazza a Programot vagy a Programon alapul, olyan szabályokkal kell kiadni vagy terjeszteni, hogy annak használati joga harmadik személy részére licencdíjmentesen hozzáférhető legyen, a jelen dokumentumban található feltételeknek megfelelően. - -c) Ha a módosított Program interaktívan olvassa a parancsokat futás közben, akkor úgy kell elkészíteni, hogy a megszokott módon történő indításkor megjelenítsen egy üzenetet a megfelelő szerzői jogi megjegyzéssel és a garancia hiányára utaló közléssel (vagy éppen azzal az információval, hogy miként juthat valaki garanciához), illetve azzal az információval, hogy bárki terjesztheti a Programot a jelen feltételeknek megfelelően, és arra is utalást kell tenni, hogy a felhasználó miként tekintheti meg a licenc egy példányát. (Kivétel: ha a Program interaktív ugyan, de nem jelenít meg hasonló üzenetet, akkor a Programon alapuló munkának sem kell ezt tennie.) - -Ezek a feltételek a módosított munkára, mint egészre vonatkoznak. Ha a munka azonosítható részei nem a Programon alapulnak és független munkákként elkülönülten azonosíthatók, akkor ez a szabályozás nem vonatkozik ezekre a részekre, ha azok külön munkaként kerülnek terjesztésre. Viszont, ha ugyanez a rész az egész részeként kerül terjesztésre, amely a Programon alapuló munka, akkor az egész terjesztése csak a jelen dokumentum alapján lehetséges, amely ebben az esetben a jogokat minden egyes felhasználó számára kiterjeszti az egészre tekintet nélkül arra, hogy melyik részt ki írta. - -E szövegrésznek tehát nem az a célja, hogy mások jogait elvegye vagy korlátozza a kizárólag saját maga által írt munkákra; a cél az, hogy a jogok gyakorlása szabályozva legyen a Programon alapuló illetve a gyűjteményes munkák terjesztése esetében. - -Ezenkívül más munkáknak, amelyek nem a Programon alapulnak, a Programmal (vagy a Programon alapuló munkával) közös adathordozón vagy adattárolón szerepeltetése nem jelenti a jelen szabályok érvényességét azokra is. - -3. A Program (vagy a Programon alapuló munka a 2. szakasznak megfelelően) másolható és terjeszthető tárgykódú vagy végrehajtható kódú formájában az 1. és 2. szakaszban foglaltak szerint, amennyiben az alábbi feltételek is teljesülnek: - -a) a teljes, gép által értelmezhető forráskód kíséri az anyagot, amelynek terjesztése az 1. és 2. szakaszban foglaltak szerint történik, jellemzően szoftverterjesztésre használt adathordozón; vagy, - -b) legalább három évre szólóan írásban vállalja, hogy bármely külső személynek rendelkezésre áll a teljes gép által értelmezhető forráskód, a fizikai továbbítást fedező összegnél nem nagyobb díjért az 1. és 2. szakaszban foglaltak szerint szoftverterjesztésre használt adathordozón; vagy, - -c) a megfelelő forráskód terjesztésére vonatkozóan megkapott tájékoztatás kíséri az anyagot. (Ez az alternatíva csak nem kereskedelmi terjesztés esetén alkalmazható abban az esetben, ha a terjesztő a Programhoz a tárgykódú vagy forráskódú formájában jutott hozzá az ajánlattal együtt a fenti b. cikkelynek megfelelően.) - -Egy munka forráskódja a munkának azt a formáját jelenti, amelyben a módosításokat elsődlegesen végezni szokás. Egy végrehajtható program esetében a teljes forráskód a tartalmazott összes modul forráskódját jelenti, továbbá a kapcsolódó felületdefiníciós fájlokat és a fordítást vezérlő parancsfájlokat. Egy speciális kivételként a forráskódnak nem kell tartalmaznia normál esetben a végrehajtható kód futtatására szolgáló operációs rendszer főbb részeiként (kernel, fordítóprogram stb.) terjesztett részeit (forrás vagy bináris formában), kivéve, ha a komponens maga a végrehajtható állományt kíséri. - -Ha a végrehajtható program vagy tárgykód terjesztése a forráskód hozzáférését egy megadott helyen biztosító írásban vállalja, akkor ez egyenértékű a forráskód terjesztésével, bár másoknak nem kell a forrást lemásolniuk a tárgykóddal együtt. - -4. A Programot csak a jelen Licencben leírtaknak megfelelően szabad lemásolni, terjeszteni, módosítani és allicencbe adni. Az egyéb módon történő másolás, módosítás, terjesztés és allicencbe adás érvénytelen, és azonnal érvényteleníti a dokumentumban megadott jogosultságokat. Mindazonáltal azok, akik a Licencet megszegőtől kaptak példányokat vagy jogokat, tovább gyakorolhatják a Licenc által meghatározott jogaikat mindaddig, amíg teljesen megfelelnek a Licenc feltételeinek. - -5. Önnek nem kötelező elfogadnia ezt a szabályozást, hiszen nem írta alá. Ezen kívül viszont semmi más nem ad jogokat a Program terjesztésére és módosítására. Ezeket a cselekedeteket a törvény bünteti, ha nem a jelen szerzői jogi szabályozás keretei között történnek. Mindezek miatt a Program (vagy a Programon alapuló munka) terjesztése vagy módosítása a jelen dokumentum szabályainak, és azon belül a Program vagy a munka módosítására, másolására vagy terjesztésére vonatkozó összes feltételének elfogadását jelenti. - -6. Minden alkalommal, amikor a Program (vagy az azon alapuló munka) továbbadása történik, a Programot megkapó személy automatikusan hozzájut az eredeti licenctulajdonostól származó licenchez, amely a jelen szabályok szerint biztosítja a jogot a Program másolására, terjesztésére és módosítására. Nem lehet semmilyen módon tovább korlátozni a fogadó félnek az itt megadott jogait. A Program továbbadója nem felelős harmadik személyekkel betartatni a jelen szabályokat. - -7. Ha bírósági határozat, szabadalomsértés vélelme, vagy egyéb (nem kizárólag szabadalmakkal kapcsolatos) okból olyan feltételeknek kell megfelelnie (akár bírósági határozat, akár megállapodás, akár bármi más eredményeképp), amelyek ellentétesek a jelen feltételekkel, az nem menti fel a terjesztőt a jelen feltételek figyelembevétele alól. Ha a terjesztés nem lehetséges a jelen Licenc és az egyéb feltételek kötelezettségeinek együttes betartásával, akkor tilos a Program terjesztése. Ha például egy szabadalmi szerződés nem engedi meg egy program jogdíj nélküli továbbterjesztését azok számára, akik közvetve vagy közvetlenül megkapják, akkor az egyetlen módja, hogy eleget tegyen valaki mindkét feltételnek az, hogy eláll a Program terjesztésétől. - -Ha ennek a szakasznak bármely része érvénytelen, vagy nem érvényesíthető valamely körülmény folytán, akkor a szakasz maradék részét kell alkalmazni, egyéb esetekben pedig a szakasz egésze alkalmazandó. - -Ennek a szakasznak nem az a célja, hogy a szabadalmak vagy egyéb hasonló jogok megsértésére ösztönözzön bárkit is; mindössze meg szeretné védeni a szabad szoftver terjesztési rendszerének egységét, amelyet a szabad közreadást szabályozó feltételrendszerek teremtenek meg. Sok ember nagymértékben járult hozzá az e rendszer keretében terjesztett, különféle szoftverekhez, és számít a rendszer következetes alkalmazására; azt a szerző/adományozó dönti el, hogy a szoftverét más rendszer szerint is közzé kívánja-e tenni, és a licencet kapók ezt nem befolyásolhatják. - -E szakasz célja, hogy pontosan tisztázza azt, ami elgondolásunk szerint a jelen licenc többi részének a következménye. - -8. Ha a Program terjesztése és/vagy használata egyes országokban nem lehetséges akár szabadalmak, akár szerzői jogokkal védett felületek miatt, akkor a Program szerzői jogainak eredeti tulajdonosa, aki a Programot ezen szabályozás alapján adja közre, egy explicit földrajzi megkötést adhat a terjesztésre, és egyes országokat kizárhat. Ebben az esetben úgy tekintendő, hogy a jelen licenc ezt a megkötést is tartalmazza, ugyanúgy mintha csak a fő szövegében lenne leírva. - -9. A Free Software Foundation időről időre kiadja a General Public License dokumentum felülvizsgált és/vagy újabb változatait. Ezek az újabb dokumentumok az előzőek szellemében készülnek, de részletekben különbözhetnek, hogy új problémákat vagy aggályokat is kezeljenek. - -A dokumentum minden változata egy megkülönböztető verziószámmal ellátva jelenik meg. Ha a Program szerzői jogi megjegyzésében egy bizonyos vagy annál újabb verzió van megjelölve, akkor lehetőség van akár a megjelölt, vagy a Free Software Foundation által kiadott későbbi verzióban leírt feltételek követésére. Ha nincs ilyen megjelölt verzió, akkor lehetőség van a Free Software Foundation által valaha kibocsátott bármelyik dokumentum alkalmazására. - -10. A Programot más szabad szoftverbe, amelynek szerzői jogi szabályozása különbözik, csak akkor építheti be, ha a szerzőtől erre engedélyt szerzett. Abban az esetben, ha a program szerzői jogainak tulajdonosa a Free Software Foundation, akkor a Free Software Foundation címére kell írni; néha kivételt teszünk. A döntés a következő két cél szem előtt tartásával fog történni: megmaradjon a szabad szoftveren alapuló munkák szabad állapota, valamint segítse elő a szoftver újrafelhasználását és megosztását. -GARANCIAVÁLLALÁS HIÁNYA - -11. MIVEL A JELEN PROGRAM HASZNÁLATI JOGA DÍJMENTES, AZ ALKALMAZHATÓ JOGSZABÁLYOK ÁLTAL BIZTOSÍTOTT MAXIMÁLIS MÉRTÉKBEN VISSZAUTASÍTJUK A PROGRAMHOZ A GARANCIA BIZTOSÍTÁSÁT. AMENNYIBEN A SZERZŐI JOGOK TULAJDONOSAI ÍRÁSBAN MÁSKÉNT NEM NYILATKOZNAK, A PROGRAM A "JELEN ÁLLAPOTÁBAN" KERÜL KIADÁSRA, MINDENFÉLE GARANCIAVÁLLALÁS NÉLKÜL, LEGYEN AZ KIFEJEZETT VAGY BELEÉRTETT, BELEÉRTVE, DE NEM KIZÁRÓLAGOSAN A FORGALOMBA HOZHATÓSÁGRA VAGY ALKALMAZHATÓSÁGRA VONATKOZÓ GARANCIÁKAT. A PROGRAM MINŐSÉGÉBŐL ÉS MŰKÖDÉSÉBŐL FAKADÓ ÖSSZES KOCKÁZAT A FELHASZNÁLÓT TERHELI. HA A PROGRAM HIBÁSAN MŰKÖDIK, A FELHASZNÁLÓNAK MAGÁNAK KELL VÁLLALNIA A JAVÍTÁSHOZ SZÜKSÉGES MINDEN KÖLTSÉGET. - -12. AMENNYIBEN A HATÁLYOS JOGSZABÁLYOK VAGY A SZERZŐI JOGOK TULAJDONOSAI ÍRÁSOS MEGÁLLAPODÁSBAN MÁSKÉNT NEM RENDELKEZNEK, SEM A PROGRAM SZERZŐJE, SEM MÁSOK, AKIK MÓDOSÍTOTTÁK ÉS/VAGY TERJESZTETTÉK A PROGRAMOT A FENTIEKNEK MEGFELELŐEN, NEM TEHETŐK FELELŐSSÉ A KÁROKÉRT, BELEÉRTVE MINDEN VÉLETLEN, VAGY KÖVETKEZMÉNYES KÁRT, AMELY A PROGRAM HASZNÁLATÁBÓL VAGY A HASZNÁLAT MEGAKADÁLYOZÁSÁBÓL SZÁRMAZIK (BELEÉRTVE, DE NEM KIZÁRÓLAGOSAN AZ ADATVESZTÉST ÉS A HELYTELEN ADATFELDOLGOZÁST, VALAMINT A MÁS PROGRAMOKKAL VALÓ HIBÁS EGYÜTTMŰKÖDÉST), MÉG AKKOR SEM, HA EZEN FELEK TUDATÁBAN VOLTAK, HOGY ILYEN KÁROK KELETKEZHETNEK. - -FELTÉTELEK ÉS SZABÁLYOK VÉGE -Hogyan alkalmazhatók ezek a szabályok egy új programra? -Ha valaki egy új programot készít és szeretné, hogy az bárki számára a lehető leginkább hasznos legyen, akkor a legjobb módszer, hogy azt szabad szoftverré teszi, megengedve mindenkinek a szabad másolást és módosítást a jelen feltételeknek megfelelően. - -Ehhez a következő megjegyzést kell csatolni a programhoz. A legbiztosabb ezt minden egyes forrásfájl elejére beírni, így közölve leghatásosabban a garancia visszautasítását; ezenkívül minden fájl kell, hogy tartalmazzon egy copyright sort és egy mutatót arra a helyre, ahol a teljes szöveg található. - -Egy sor, amely megadja a program nevét és funkcióját -Copyright (C) év; szerző neve; - -Ez a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint. - -Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÁGRA vagy VALAMELY CÉLRA VALÓ ALKALMAZHATÓSÁGRA való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz. - -A felhasználónak a programmal együtt meg kell kapnia a GNU General Public License egy példányát; ha mégsem kapta meg, akkor ezt a Free Software Foundationnak küldött levélben jelezze (cím: Free Software Foundation Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.) - -A programhoz csatolni kell azt is, hogy miként lehet kapcsolatba lépni a szerzővel, elektronikus vagy hagyományos levél küldésével. - -Ha a program interaktív, a következőhöz hasonló üzenettel lehet ezt megtenni a program indulásakor: - -Gnomovision version 69, Copyright (C) év, a szerző neve. -A Gnomovision programhoz SEMMILYEN GARANCIA NEM JÁR; részletekért írja be a 'show w' parancsot. Ez egy szabad szoftver, bizonyos feltételek mellett terjeszthető, illetve módosítható; részletekért írja be a 'show c' parancsot. - -A show w és show c képzeletbeli parancsok, és a GPL megfelelő részeit kell megjeleníteniük. Természetesen a valódi parancsok a show w és show c parancstól különbözhetnek; lehetnek akár egérkattintások vagy menüpontok is, ami a programnak megfelel. - -Ha szükséges, meg kell szerezni a munkáltatótól (ha a szerző programozóként dolgozik) vagy az iskolától a program szerzői jogairól való lemondás igazolását. Erre itt egy példa; változtassa meg a neveket: - -A Fiktív Bt. ezennel lemond minden szerzői jogi érdekeltségéről a „Gnomovision” programmal (amelyet több fázisban fordítanak le a fordítóprogramok) kapcsolatban, amelyet H. Ekker János írt. - -Aláírás: Tira Mihály, 1989. április 1. Tira Mihály ügyvezető - -A GNU General Public License nem engedi meg, hogy a program része legyen szellemi tulajdont képező programoknak. Ha a program egy szubrutinkönyvtár, akkor megfontolhatja, hogy nem célszerűbb-e megengedni, hogy szellemi tulajdont képező alkalmazásokkal is összefűzhető legyen a programkönyvtár. Ha ezt szeretné, akkor a GPL helyett a GNU LGPL-t kell használni. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 4ab79d607..8eab3b396 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index f2a7393d4..3e1842746 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index 0e6ff05a7..c4cabb41c 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1073,28 +1073,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1106,9 +1106,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1120,37 +1120,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1160,14 +1160,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1179,16 +1179,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index d3322e9f9..786f7a98b 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -184,7 +184,7 @@ - The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament.
@@ -197,7 +197,7 @@ - Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter Book Chapter-Chapter @@ -1036,28 +1036,28 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fif Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. @@ -1069,9 +1069,9 @@ a) You must cause the modified files to carry prominent notices stating that you b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1083,37 +1083,37 @@ a) Accompany it with the complete corresponding machine-readable source code, wh b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @@ -1123,14 +1123,14 @@ How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. -This program 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. +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -1142,16 +1142,16 @@ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. -The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. From 192010588f3660a4781be63b56e89cd9dbe112f4 Mon Sep 17 00:00:00 2001 From: Martin Thompson Date: Thu, 2 Sep 2010 20:43:28 +0100 Subject: [PATCH 050/120] Test for & in authors --- openlp/plugins/songs/lib/opensongimport.py | 2 +- openlp/plugins/songs/lib/test/test.opensong | 2 +- openlp/plugins/songs/lib/test/test_opensongimport.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index e22f6f34d..dae60a3b7 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -286,7 +286,7 @@ class OpenSongImport(SongImport): else: tag = u'V' + tag # Assume it's a verse if it has no prefix if not versetags.has_key(tag): - log.warn(u'Got order %s but not in versetags, dropping this item from presentation order', tag) + log.info(u'Got order %s but not in versetags, dropping this item from presentation order', tag) else: verse_order_list.append(tag) # now copy the data diff --git a/openlp/plugins/songs/lib/test/test.opensong b/openlp/plugins/songs/lib/test/test.opensong index 5d3bc5530..3633e7d62 100644 --- a/openlp/plugins/songs/lib/test/test.opensong +++ b/openlp/plugins/songs/lib/test/test.opensong @@ -1,7 +1,7 @@ Martins Test - MartiÑ Thómpson + MartiÑ & Martin2 Thómpson 2010 Martin Thompson 1 V1 C V2 C2 3 B1 V1 T U diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py index 3398595f7..6aa954b06 100644 --- a/openlp/plugins/songs/lib/test/test_opensongimport.py +++ b/openlp/plugins/songs/lib/test/test_opensongimport.py @@ -53,7 +53,7 @@ def test(): o.do_import() o.print_song() assert o.copyright == u'2010 Martin Thompson' - assert o.authors == [u'MartiÑ Thómpson'] + assert o.authors == [u'MartiÑ Thómpson', u'Martin2 Thómpson'] assert o.title == u'Martins Test' assert o.alternate_title == u'' assert o.song_number == u'1' From 11a9d3d8f52ac806122705e5b8196c1e292056f2 Mon Sep 17 00:00:00 2001 From: Martin Thompson Date: Thu, 2 Sep 2010 21:21:31 +0100 Subject: [PATCH 051/120] Handles versetypes like 'V3a' --- openlp/plugins/songs/lib/opensongimport.py | 43 +++++++++++-------- openlp/plugins/songs/lib/test/test.opensong | 4 +- .../songs/lib/test/test_opensongimport.py | 4 +- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index dae60a3b7..6a8daae54 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -29,6 +29,7 @@ import os from zipfile import ZipFile from lxml import objectify from lxml.etree import Error, LxmlError +import re from openlp.plugins.songs.lib.songimport import SongImport @@ -190,9 +191,9 @@ class OpenSongImport(SongImport): topics.append(unicode(root.theme)) if u'alttheme' in fields and unicode(root.alttheme) not in topics: topics.append(unicode(root.alttheme)) + lyrics = unicode(root.lyrics) # data storage while importing verses = {} - lyrics = unicode(root.lyrics) # keep track of a "default" verse order, in case none is specified our_verse_order = [] verses_seen = {} @@ -214,24 +215,28 @@ class OpenSongImport(SongImport): continue # verse/chorus/etc. marker if thisline[0] == u'[': - versetype = thisline[1].upper() - if versetype.isdigit(): - versenum = versetype - versetype = u'' - elif thisline[2] != u']': - # there's a number to go with it - extract that as well - right_bracket = thisline.find(u']') - versenum = thisline[2:right_bracket] + # drop the square brackets + right_bracket = thisline.find(u']') + content = thisline[1:right_bracket].upper() + print '"', content, '"' + # have we got any digits? If so, versenumber is everything from the digits + # to the end (even if there are some alpha chars on the end) + match = re.match(u'(.*)(\d+.*)', content) + if match is not None: + print "Got digits" + versetype = match.group(1) + versenum = match.group(2) + # otherwise we assume number 1 and take the whole prefix as versetype else: - # if there's no number, assume it's no.1 + versetype = content versenum = u'1' + print versetype, versenum continue words = None # number at start of line.. it's verse number if thisline[0].isdigit(): versenum = thisline[0] words = thisline[1:].strip() - if words is None:# and \ #versenum is not None and \ #versetype is not None: @@ -248,6 +253,7 @@ class OpenSongImport(SongImport): if not verses_seen.has_key(versetag): verses_seen[versetag] = 1 our_verse_order.append(versetag) + print ">>", (versetype,), (versenum,), versetag, words if words: # Tidy text and remove the ____s from extended words words = self.tidy_text(words) @@ -273,18 +279,21 @@ class OpenSongImport(SongImport): order = [] if u'presentation' in fields and root.presentation != u'': order = unicode(root.presentation) - order = order.split() + # We make all the tags in the lyrics upper case, so match that here + # and then split into a list on the whitespace + order = order.upper().split() else: if len(our_verse_order) > 0: order = our_verse_order else: log.warn(u'No verse order available (either explicit or inferred) for %s, skipping.', self.title) for tag in order: - if len(tag) == 1: - if not tag.isdigit(): - tag = tag + u'1' # Assume it's no.1 if it's not there - else: - tag = u'V' + tag # Assume it's a verse if it has no prefix + print tag + if tag[0].isdigit(): + tag = u'V' + tag # Assume it's a verse if it has no prefix + elif not re.search('\d+', tag): + tag = tag + u'1' # Assume it's no.1 if there's no digits + print tag if not versetags.has_key(tag): log.info(u'Got order %s but not in versetags, dropping this item from presentation order', tag) else: diff --git a/openlp/plugins/songs/lib/test/test.opensong b/openlp/plugins/songs/lib/test/test.opensong index 3633e7d62..0390f99b2 100644 --- a/openlp/plugins/songs/lib/test/test.opensong +++ b/openlp/plugins/songs/lib/test/test.opensong @@ -4,7 +4,7 @@ MartiÑ & Martin2 Thómpson 2010 Martin Thompson 1 - V1 C V2 C2 3 B1 V1 T U + V1 C V2 C2 3a B1 V1 T U Blah @@ -17,7 +17,7 @@ TestAltTheme - [3] + [3a] . G A B V3 Line 1 . G A B diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py index 6aa954b06..c994d8685 100644 --- a/openlp/plugins/songs/lib/test/test_opensongimport.py +++ b/openlp/plugins/songs/lib/test/test_opensongimport.py @@ -63,9 +63,9 @@ def test(): assert [u'B1', u'Bridge 1\nBridge 1 line 2'] in o.verses assert [u'V1', u'v1 Line 1\nV1 Line 2'] in o.verses assert [u'V2', u'v2 Line 1\nV2 Line 2'] in o.verses - assert [u'V3', u'V3 Line 1\nV3 Line 2'] in o.verses + assert [u'V3A', u'V3 Line 1\nV3 Line 2'] in o.verses assert [u'X1', u'Unreferenced verse line 1'] in o.verses - assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3', u'B1', u'V1', u'T1'] + assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3A', u'B1', u'V1', u'T1'] assert o.ccli_number == u'Blah' assert o.topics == [u'TestTheme', u'TestAltTheme'] From 84bff09d039a94d5455199d629278673425dc049 Mon Sep 17 00:00:00 2001 From: Martin Thompson Date: Thu, 2 Sep 2010 21:30:01 +0100 Subject: [PATCH 052/120] REmoved prints --- openlp/plugins/songs/lib/opensongimport.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 6a8daae54..1f495013c 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -218,19 +218,16 @@ class OpenSongImport(SongImport): # drop the square brackets right_bracket = thisline.find(u']') content = thisline[1:right_bracket].upper() - print '"', content, '"' # have we got any digits? If so, versenumber is everything from the digits # to the end (even if there are some alpha chars on the end) match = re.match(u'(.*)(\d+.*)', content) if match is not None: - print "Got digits" versetype = match.group(1) versenum = match.group(2) # otherwise we assume number 1 and take the whole prefix as versetype else: versetype = content versenum = u'1' - print versetype, versenum continue words = None # number at start of line.. it's verse number @@ -253,7 +250,6 @@ class OpenSongImport(SongImport): if not verses_seen.has_key(versetag): verses_seen[versetag] = 1 our_verse_order.append(versetag) - print ">>", (versetype,), (versenum,), versetag, words if words: # Tidy text and remove the ____s from extended words words = self.tidy_text(words) @@ -288,12 +284,10 @@ class OpenSongImport(SongImport): else: log.warn(u'No verse order available (either explicit or inferred) for %s, skipping.', self.title) for tag in order: - print tag if tag[0].isdigit(): tag = u'V' + tag # Assume it's a verse if it has no prefix elif not re.search('\d+', tag): tag = tag + u'1' # Assume it's no.1 if there's no digits - print tag if not versetags.has_key(tag): log.info(u'Got order %s but not in versetags, dropping this item from presentation order', tag) else: From 96737c0bc0f936daa2183c40db9dbba1d93d8ad1 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 2 Sep 2010 21:41:24 +0100 Subject: [PATCH 053/120] Use QtGraphicsWebview. Reduce div count where possible --- openlp/core/lib/htmlbuilder.py | 223 +++++++++++++++++++++------------ openlp/core/ui/maindisplay.py | 7 +- 2 files changed, 150 insertions(+), 80 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index c5b5088c4..7d283ae8c 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -24,6 +24,8 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +from PyQt4 import QtWebKit + from openlp.core.lib import image_to_byte HTMLSRC = u""" @@ -39,7 +41,7 @@ HTMLSRC = u""" body { background-color: black; } -.dim { +.size { position: absolute; left: 0px; top: 0px; @@ -51,6 +53,9 @@ body { background-color: black; display: none; } +#image { + z-index:1; +} #video { z-index:2; } @@ -136,8 +141,12 @@ body { } document.getElementById('black').style.display = black; document.getElementById('lyricsmain').style.visibility = lyrics; - document.getElementById('lyricsoutline').style.visibility = lyrics; - document.getElementById('lyricsshadow').style.visibility = lyrics; + outline = document.getElementById('lyricsoutline') + if(outline) + outline.style.visibility = lyrics; + shadow = document.getElementById('lyricsshadow') + if(shadow) + shadow.style.visibility = lyrics; document.getElementById('footer').style.visibility = lyrics; var vid = document.getElementById('video'); if(vid.src != ''){ @@ -193,7 +202,17 @@ body { } function text_fade(id, newtext){ + /* + Using -webkit-transition: opacity 1s linear; would have been preferred + but it isn't currently quick enough when animating multiple layers of + large areas of large text. Therefore do it manually as best we can. + Hopefully in the future we can revisit and do more interesting + transitions using -webkit-transition and -webkit-transform. + However we need to ensure interrupted transitions (quickly change 2 + slides) still looks pretty and is zippy. + */ var text = document.getElementById(id); + if(text==null) return; if(!transition){ text.innerHTML = newtext; return; @@ -213,37 +232,19 @@ body { var text = document.getElementById('lyricsmain'); return getComputedStyle(text, '').opacity; } + function show_text_complete(){ return (text_opacity()==1); } - -
-
-
-
-
-
-
-
-
- + + +%s - -
- +
+ """ @@ -258,7 +259,13 @@ def build_html(item, screen, alert, islive): Current display information `alert` Alert display display information + `islive` + Item is going live, rather than preview/theme building """ + try: + webkitvers = float(QtWebKit.qWebKitVersion()) + except AttributeError: + webkitvers = 0 width = screen[u'size'].width() height = screen[u'size'].height() theme = item.themedata @@ -267,83 +274,143 @@ def build_html(item, screen, alert, islive): else: image = u'' html = HTMLSRC % (width, height, - build_alert(alert, width), - build_footer(item), - build_lyrics(item), + build_alert_css(alert, width), + build_footer_css(item), + build_lyrics_css(item, webkitvers), u'true' if theme and theme.display_slideTransition and islive \ else u'false', - image) + image, + build_lyrics_html(item, webkitvers)) return html -def build_lyrics(item): +def build_lyrics_css(item, webkitvers): """ - Build the video display div + Build the video display css `item` Service Item containing theme and location information + + `webkitvers` + The version of qtwebkit we're using + """ style = """ - .lyricscommon { position: absolute; %s } - .lyricstable { z-index:4; %s } - .lyricsoutlinetable { z-index:3; %s } - .lyricsshadowtable { z-index:2; %s } - .lyrics { %s } - .lyricsoutline { %s } - .lyricsshadow { %s } +.lyricstable { + z-index:4; + position: absolute; + display: table; + %s +} +.lyricscell { + display:table-cell; + word-wrap: break-word; + %s +} +.lyricsmain { +%s +} +.lyricsoutline { +%s +} +.lyricsshadow { +%s +} """ theme = item.themedata - lyricscommon = u'' lyricstable = u'' - outlinetable = u'' - shadowtable = u'' lyrics = u'' - outline = u'display: none;' - shadow = u'display: none;' + lyricsmain = u'' + outline = u'' + shadow = u'' if theme: - lyricscommon = u'display: table; width: %spx; height: %spx; word-wrap: break-word; ' \ - u'font-family: %s; font-size: %spt; color: %s; line-height: %d%%;' \ - % (item.main.width(), item.main.height(), theme.font_main_name, - theme.font_main_proportion, theme.font_main_color, - 100 + int(theme.font_main_line_adjustment)) lyricstable = u'left: %spx; top: %spx;' % \ (item.main.x(), item.main.y()) - outlinetable = u'left: %spx; top: %spx;' % \ - (item.main.x(), item.main.y()) - shadowtable = u'left: %spx; top: %spx;' % \ - (item.main.x() + float(theme.display_shadow_size), - item.main.y() + float(theme.display_shadow_size)) - align = u'' if theme.display_horizontalAlign == 2: - align = u'text-align:center;' + align = u'center' elif theme.display_horizontalAlign == 1: - align = u'text-align:right;' + align = u'right' else: - align = u'text-align:left;' + align = u'left' if theme.display_verticalAlign == 2: - valign = u'vertical-align:bottom;' + valign = u'bottom' elif theme.display_verticalAlign == 1: - valign = u'vertical-align:middle;' + valign = u'middle' else: - valign = u'vertical-align:top;' - lyrics = u'display:table-cell; %s %s' % (align, valign) + valign = u'top' + lyrics = u'width: %spx; height: %spx; text-align: %s; ' \ + 'vertical-align: %s; font-family: %s; font-size: %spt; ' \ + 'color: %s; line-height: %d%%;' % \ + (item.main.width(), item.main.height(), align, valign, + theme.font_main_name, theme.font_main_proportion, + theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) + # For performance reasons we want to show as few DIV's as possible, + # especially when animating/transitions. + # However some bugs in older versions of qtwebkit mean we need to + # perform workarounds and add extra divs. Only do these when needed. + # + # Before 533.3 the webkit-text-fill colour wasn't displayed, only the + # stroke (outline) color. So put stroke layer underneath the main text. + # + # Before 534.4 the webkit-text-stroke was sometimes out of alignment + # with the fill, or normal text. letter-spacing=1 is workaround + # https://bugs.webkit.org/show_bug.cgi?id=44403 + # + # Before 534.4 the text-shadow didn't get displayed when + # webkit-text-stroke was used. So use an offset text layer underneath. + # https://bugs.webkit.org/show_bug.cgi?id=19728 if theme.display_outline: - lyricscommon += u' letter-spacing: 1px;' - outline = u'-webkit-text-stroke: %sem %s; ' % \ + if webkitvers < 534.3: + lyrics += u' letter-spacing: 1px;' + outline = u' -webkit-text-stroke: %sem %s; ' \ + '-webkit-text-fill-color: %s; ' % \ (float(theme.display_outline_size) / 16, - theme.display_outline_color) - if theme.display_shadow: + theme.display_outline_color, theme.font_main_color) + if webkitvers >= 533.3: + lyricsmain += outline + if theme.display_shadow and webkitvers < 534.3: shadow = u'-webkit-text-stroke: %sem %s; ' \ - u'-webkit-text-fill-color: %s; ' % \ + u'-webkit-text-fill-color: %s; ' \ + u' padding-left: %spx; padding-top: %spx' % \ (float(theme.display_outline_size) / 16, - theme.display_shadow_color, theme.display_shadow_color) - else: - if theme.display_shadow: - shadow = u'color: %s;' % (theme.display_shadow_color) - lyrics_html = style % (lyricscommon, lyricstable, outlinetable, - shadowtable, lyrics, outline, shadow) - return lyrics_html + theme.display_shadow_color, theme.display_shadow_color, + theme.display_shadow_size, theme.display_shadow_size) + if theme.display_shadow and \ + (not theme.display_outline or webkitvers >= 534.3): + lyricsmain += u' text-shadow: %s %spx %spx;' % \ + (theme.display_shadow_color, theme.display_shadow_size, + theme.display_shadow_size) + lyrics_css = style % (lyricstable, lyrics, lyricsmain, outline, shadow) + return lyrics_css + +def build_lyrics_html(item, webkitvers): + """ + Build the HTML required to show the lyrics -def build_footer(item): + `item` + Service Item containing theme and location information + + `webkitvers` + The version of qtwebkit we're using + """ + # Bugs in some versions of QtWebKit mean we sometimes need additional + # divs for outline and shadow, since the CSS doesn't work. + # To support vertical alignment middle and bottom, nested div's using + # display:table/display:table-cell are required for each lyric block. + lyrics = u'' + theme = item.themedata + if webkitvers < 534.4 and theme and theme.display_outline: + lyrics += u'
' \ + u'
' \ + u'
' + if webkitvers < 533.3: + lyrics += u'
' \ + u'
' \ + u'
' + lyrics += u'
' \ + u'
' + return lyrics + +def build_footer_css(item): """ Build the display of the item footer @@ -374,7 +441,7 @@ def build_footer(item): theme.font_footer_proportion, theme.font_footer_color, align) return lyrics_html -def build_alert(alertTab, width): +def build_alert_css(alertTab, width): """ Build the display of the footer @@ -382,7 +449,7 @@ def build_alert(alertTab, width): Details from the Alert tab for fonts etc """ style = """ - width: %s; + width: %spx; vertical-align: %s; font-family: %s; font-size: %spt; diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index c985434c1..4f2ea6df6 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -115,8 +115,11 @@ class MainDisplay(DisplayWidget): self.screen = self.screens.current self.setVisible(False) self.setGeometry(self.screen[u'size']) - self.webView = QtWebKit.QWebView(self) - self.webView.setGeometry(0, 0, self.screen[u'size'].width(), \ + self.scene = QtGui.QGraphicsScene() + self.setScene(self.scene) + self.webView = QtWebKit.QGraphicsWebView() + self.scene.addItem(self.webView) + self.webView.resize(self.screen[u'size'].width(), \ self.screen[u'size'].height()) self.page = self.webView.page() self.frame = self.page.mainFrame() From 8be66a0e6f1420613ece8c887835eec2a00f68fe Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 2 Sep 2010 22:24:44 +0100 Subject: [PATCH 054/120] A bit of python crept into the javascript --- openlp/core/lib/htmlbuilder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 7d283ae8c..dffa5deec 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -142,10 +142,10 @@ body { document.getElementById('black').style.display = black; document.getElementById('lyricsmain').style.visibility = lyrics; outline = document.getElementById('lyricsoutline') - if(outline) + if(outline!=null) outline.style.visibility = lyrics; shadow = document.getElementById('lyricsshadow') - if(shadow) + if(shadow!=null) shadow.style.visibility = lyrics; document.getElementById('footer').style.visibility = lyrics; var vid = document.getElementById('video'); From da658e88508413d5f1274124f199d6ee81beb133 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 3 Sep 2010 00:20:35 +0100 Subject: [PATCH 055/120] Silly space --- openlp/plugins/songs/lib/wowimport.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index dd09034d1..474a9b19d 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -119,7 +119,7 @@ class WowImport(SongImport): # TODO: check that it is a valid words of worship file (could # check header for WoW File Song Word) self.author = u'' - self.copyright= u'' + self.copyright = u'' # Get the song title self.file_name = os.path.split(file)[1] self.import_wizard.incrementProgressBar( From a37fafa72287c222356ef65c1dfa6e15b45d791d Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 3 Sep 2010 07:33:03 +0200 Subject: [PATCH 056/120] Fix the name of the keyword argument. --- openlp/plugins/bibles/lib/csvbible.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index 7c0ba6b2b..cc981059c 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -51,9 +51,9 @@ class CSVBible(BibleDB): if u'booksfile' not in kwargs: raise KeyError(u'You have to supply a file to import books from.') self.booksfile = kwargs[u'booksfile'] - if u'versesfile' not in kwargs: + if u'versefile' not in kwargs: raise KeyError(u'You have to supply a file to import verses from.') - self.versesfile = kwargs[u'versesfile'] + self.versesfile = kwargs[u'versefile'] QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'bibles_stop_import'), self.stop_import) From da8899054976e1e8b0a0a978e3ad6cd74b87d890 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 3 Sep 2010 19:24:11 +0100 Subject: [PATCH 057/120] Bug 625997 --- openlp/core/lib/renderer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index aad686564..9b6011c78 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -136,6 +136,7 @@ class Renderer(object): line_end = u'' if line_break: line_end = u'
' + print words words = words.replace(u'\r\n', u'\n') verses_text = words.split(u'\n') text = [] @@ -175,10 +176,11 @@ class Renderer(object): # Text too long so gone to next mage if layout.pageCount() != 1: formatted.append(shell % old_html_text) - temp_text = line + temp_text = line + line_end old_html_text = temp_text formatted.append(shell % old_html_text) log.debug(u'format_slide - End') + print formatted return formatted def _generate_background_frame(self): From e292748b838c1cb44f2b14297cd152c7c65de8f5 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 3 Sep 2010 19:30:56 +0100 Subject: [PATCH 058/120] Colour and poss blank verse fix? --- openlp/core/lib/__init__.py | 36 +++++++++++++++++----------------- openlp/core/lib/htmlbuilder.py | 16 ++++++++------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index b76179c2c..721b6ae23 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -39,40 +39,40 @@ log = logging.getLogger(__name__) html_expands = [] html_expands.append({u'desc':u'Red', u'start tag':u'{r}', \ - u'start html':u'', \ - u'end tag':u'{/r}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/r}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Black', u'start tag':u'{b}', \ - u'start html':u'', \ - u'end tag':u'{/b}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/b}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Blue', u'start tag':u'{bl}', \ - u'start html':u'', \ - u'end tag':u'{/bl}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/bl}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Yellow', u'start tag':u'{y}', \ - u'start html':u'', \ - u'end tag':u'{/y}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/y}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Green', u'start tag':u'{g}', \ - u'start html':u'', \ - u'end tag':u'{/g}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/g}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Pink', u'start tag':u'{pk}', \ - u'start html':u'', \ - u'end tag':u'{/pk}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/pk}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Orange', u'start tag':u'{o}', \ - u'start html':u'', \ - u'end tag':u'{/o}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/o}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Purple', u'start tag':u'{pp}', \ - u'start html':u'', \ - u'end tag':u'{/pp}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/pp}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'White', u'start tag':u'{w}', \ - u'start html':u'', \ - u'end tag':u'{/w}', u'end html':u'', \ + u'start html':u'', \ + u'end tag':u'{/w}', u'end html':u'', \ u'protected':False}) html_expands.append({u'desc':u'Superscript', u'start tag':u'{su}', \ u'start html':u'', \ diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index dffa5deec..d03b7f7cc 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -217,11 +217,12 @@ body { text.innerHTML = newtext; return; } - if(text.style.opacity=='') text.style.opacity = 1; if(newtext==text.innerHTML){ text.style.opacity = parseFloat(text.style.opacity) + 0.3; + if(text.style.opacity>0.7) + text.style.opacity = 1; } else { - text.style.opacity -= 0.3; + text.style.opacity = parseFloat(text.style.opacity) - 0.3; if(text.style.opacity<=0.1){ text.innerHTML = newtext; } @@ -400,14 +401,15 @@ def build_lyrics_html(item, webkitvers): theme = item.themedata if webkitvers < 534.4 and theme and theme.display_outline: lyrics += u'
' \ - u'
' \ - u'
' + u'
' if webkitvers < 533.3: lyrics += u'
' \ - u'
' \ - u'
' + u'
' lyrics += u'
' \ - u'
' + u'
' return lyrics def build_footer_css(item): From 27dd493d407c5c7a2abdb3e40422bb1cf1f6261d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 3 Sep 2010 19:33:55 +0100 Subject: [PATCH 059/120] debug cleanups --- openlp/core/lib/renderer.py | 2 -- openlp/core/ui/maindisplay.py | 3 --- 2 files changed, 5 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 9b6011c78..41e547800 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -136,7 +136,6 @@ class Renderer(object): line_end = u'' if line_break: line_end = u'
' - print words words = words.replace(u'\r\n', u'\n') verses_text = words.split(u'\n') text = [] @@ -180,7 +179,6 @@ class Renderer(object): old_html_text = temp_text formatted.append(shell % old_html_text) log.debug(u'format_slide - End') - print formatted return formatted def _generate_background_frame(self): diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index c985434c1..908e91d01 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -319,9 +319,6 @@ class MainDisplay(DisplayWidget): # Make display show up if in single screen mode if self.isLive: self.setVisible(True) - # save preview for debugging - if log.isEnabledFor(logging.DEBUG): - preview.save(u'temp.png', u'png') return preview def buildHtml(self, serviceItem): From 1fca6ec81dc9263609cefce500980023d32d6c60 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 3 Sep 2010 23:03:54 +0100 Subject: [PATCH 060/120] Italics/Bold theme to CSS. Share css for both QTextDocument and QWebView --- openlp/core/lib/__init__.py | 2 +- openlp/core/lib/htmlbuilder.py | 76 ++++++++++++++++++++++------------ openlp/core/lib/renderer.py | 41 +++++------------- openlp/core/lib/serviceitem.py | 4 +- 4 files changed, 64 insertions(+), 59 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 721b6ae23..da1778d65 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -324,7 +324,7 @@ from settingstab import SettingsTab from serviceitem import ServiceItem from serviceitem import ServiceItemType from serviceitem import ItemCapabilities -from htmlbuilder import build_html +from htmlbuilder import build_html, build_lyrics_format_css from toolbar import OpenLPToolbar from dockwidget import OpenLPDockWidget from theme import ThemeLevel, ThemeXML diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index d03b7f7cc..f65bfb1e3 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -263,13 +263,10 @@ def build_html(item, screen, alert, islive): `islive` Item is going live, rather than preview/theme building """ - try: - webkitvers = float(QtWebKit.qWebKitVersion()) - except AttributeError: - webkitvers = 0 width = screen[u'size'].width() height = screen[u'size'].height() theme = item.themedata + webkitvers = webkit_version() if item.bg_frame: image = u'data:image/png;base64,%s' % image_to_byte(item.bg_frame) else: @@ -284,9 +281,16 @@ def build_html(item, screen, alert, islive): build_lyrics_html(item, webkitvers)) return html +def webkit_version(): + try: + webkitvers = float(QtWebKit.qWebKitVersion()) + except AttributeError: + webkitvers = 0 + return webkitvers + def build_lyrics_css(item, webkitvers): """ - Build the video display css + Build the lyrics display css `item` Service Item containing theme and location information @@ -304,7 +308,6 @@ def build_lyrics_css(item, webkitvers): } .lyricscell { display:table-cell; - word-wrap: break-word; %s } .lyricsmain { @@ -326,24 +329,9 @@ def build_lyrics_css(item, webkitvers): if theme: lyricstable = u'left: %spx; top: %spx;' % \ (item.main.x(), item.main.y()) - if theme.display_horizontalAlign == 2: - align = u'center' - elif theme.display_horizontalAlign == 1: - align = u'right' - else: - align = u'left' - if theme.display_verticalAlign == 2: - valign = u'bottom' - elif theme.display_verticalAlign == 1: - valign = u'middle' - else: - valign = u'top' - lyrics = u'width: %spx; height: %spx; text-align: %s; ' \ - 'vertical-align: %s; font-family: %s; font-size: %spt; ' \ - 'color: %s; line-height: %d%%;' % \ - (item.main.width(), item.main.height(), align, valign, - theme.font_main_name, theme.font_main_proportion, - theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) + lyrics = build_lyrics_format_css(theme) + lyrics += u'width: %spx; height: %spx; ' % \ + (item.main.width(), item.main.height()) # For performance reasons we want to show as few DIV's as possible, # especially when animating/transitions. # However some bugs in older versions of qtwebkit mean we need to @@ -360,8 +348,6 @@ def build_lyrics_css(item, webkitvers): # webkit-text-stroke was used. So use an offset text layer underneath. # https://bugs.webkit.org/show_bug.cgi?id=19728 if theme.display_outline: - if webkitvers < 534.3: - lyrics += u' letter-spacing: 1px;' outline = u' -webkit-text-stroke: %sem %s; ' \ '-webkit-text-fill-color: %s; ' % \ (float(theme.display_outline_size) / 16, @@ -383,6 +369,44 @@ def build_lyrics_css(item, webkitvers): lyrics_css = style % (lyricstable, lyrics, lyricsmain, outline, shadow) return lyrics_css +def build_lyrics_format_css(theme): + """ + Build the css which controls the theme format + Also used by renderer for splitting verses + + `item` + Service Item containing theme and location information + + `webkitvers` + The version of qtwebkit we're using + + """ + if theme.display_horizontalAlign == 2: + align = u'center' + elif theme.display_horizontalAlign == 1: + align = u'right' + else: + align = u'left' + if theme.display_verticalAlign == 2: + valign = u'bottom' + elif theme.display_verticalAlign == 1: + valign = u'middle' + else: + valign = u'top' + lyrics = u'word-wrap: break-word; ' \ + 'text-align: %s; vertical-align: %s; font-family: %s; ' \ + 'font-size: %spt; color: %s; line-height: %d%%;' % \ + (align, valign, theme.font_main_name, theme.font_main_proportion, + theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) + if theme.display_outline: + if webkit_version() < 534.3: + lyrics += u' letter-spacing: 1px;' + if theme.font_main_italics: + lyrics += ' font-style:italic; ' + if theme.font_main_weight == u'Bold': + lyrics += ' font-weight:bold; ' + return lyrics + def build_lyrics_html(item, webkitvers): """ Build the HTML required to show the lyrics diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 41e547800..dae7c820a 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -31,7 +31,7 @@ import logging from PyQt4 import QtGui, QtCore -from openlp.core.lib import resize_image, expand_tags +from openlp.core.lib import resize_image, expand_tags, build_lyrics_format_css log = logging.getLogger(__name__) @@ -145,39 +145,20 @@ class Renderer(object): text.append(line) doc = QtGui.QTextDocument() doc.setPageSize(QtCore.QSizeF(self._rect.width(), self._rect.height())) - df = doc.defaultFont() - df.setPointSize(self._theme.font_main_proportion) - df.setFamily(self._theme.font_main_name) - main_weight = 50 - if self._theme.font_main_weight == u'Bold': - main_weight = 75 - df.setWeight(main_weight) - doc.setDefaultFont(df) layout = doc.documentLayout() formatted = [] - if self._theme.font_main_weight == u'Bold' and \ - self._theme.font_main_italics: - shell = u'{p}{st}{it}%s{/it}{/st}{/p}' - elif self._theme.font_main_weight == u'Bold' and \ - not self._theme.font_main_italics: - shell = u'{p}{st}%s{/st}{/p}' - elif self._theme.font_main_italics: - shell = u'{p}{it}%s{/it}{/p}' - else: - shell = u'{p}%s{/p}' - temp_text = u'' - old_html_text = u'' + shell = u'
' % build_lyrics_format_css(self._theme) + html_text = u'' + styled_text = shell for line in text: - # mark line ends - temp_text = temp_text + line + line_end - html_text = shell % expand_tags(temp_text) - doc.setHtml(html_text) - # Text too long so gone to next mage + styled_text += expand_tags(line) + line_end + doc.setHtml(styled_text + u'
') + # Text too long so go to next page if layout.pageCount() != 1: - formatted.append(shell % old_html_text) - temp_text = line + line_end - old_html_text = temp_text - formatted.append(shell % old_html_text) + formatted.append(html_text) + styled_text = shell + html_text += line + line_end + formatted.append(html_text) log.debug(u'format_slide - End') return formatted diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 134df0c42..0e8625ce7 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -160,9 +160,9 @@ class ServiceItem(object): self.themedata = self.render_manager.renderer._theme for slide in self._raw_frames: before = time.time() - formated = self.render_manager \ + formatted = self.render_manager \ .format_slide(slide[u'raw_slide'], line_break) - for page in formated: + for page in formatted: self._display_frames.append( {u'title': clean_tags(page), u'text': clean_tags(page.rstrip()), From e5b2ff9e069505441df57bb4d027faf5c301c04c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 08:48:58 +0100 Subject: [PATCH 061/120] Move backgrounds to css from images --- openlp/core/lib/htmlbuilder.py | 105 ++++++++++++++++++++++----------- openlp/core/lib/renderer.py | 69 +++++++++++----------- openlp/core/ui/maindisplay.py | 2 +- 3 files changed, 108 insertions(+), 68 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index d03b7f7cc..ddee44c27 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -24,10 +24,13 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import logging from PyQt4 import QtWebKit from openlp.core.lib import image_to_byte +log = logging.getLogger(__name__) + HTMLSRC = u""" @@ -39,7 +42,7 @@ HTMLSRC = u""" border: 0; } body { - background-color: black; + %s; } .size { position: absolute; @@ -192,7 +195,7 @@ body { function show_text(newtext){ if(timer != null) clearTimeout(timer); - text_fade('lyricsmain', newtext); + text_fade('lyricsmain', newtext); text_fade('lyricsoutline', newtext); text_fade('lyricsshadow', newtext); if(text_opacity()==1) return; @@ -233,7 +236,7 @@ body { var text = document.getElementById('lyricsmain'); return getComputedStyle(text, '').opacity; } - + function show_text_complete(){ return (text_opacity()==1); } @@ -265,6 +268,7 @@ def build_html(item, screen, alert, islive): """ try: webkitvers = float(QtWebKit.qWebKitVersion()) + log.debug(u'Webkit version = %s' % webkitvers) except AttributeError: webkitvers = 0 width = screen[u'size'].width() @@ -274,47 +278,80 @@ def build_html(item, screen, alert, islive): image = u'data:image/png;base64,%s' % image_to_byte(item.bg_frame) else: image = u'' - html = HTMLSRC % (width, height, + html = HTMLSRC % (build_background_css(item, width, height), + width, height, build_alert_css(alert, width), build_footer_css(item), build_lyrics_css(item, webkitvers), u'true' if theme and theme.display_slideTransition and islive \ else u'false', - image, + image, build_lyrics_html(item, webkitvers)) return html +def build_background_css(item, width, height): + """ + Build the background css + + `item` + Service Item containing theme and location information + + """ + width = int(width) / 2 + theme = item.themedata + background = u'background-color: black' + if theme: + if theme.background_type == u'solid': + background = u'background-color: %s' % theme.background_color + else: + if theme.background_direction == u'horizontal': + background = \ + u'background: -webkit-gradient(linear, left top, left bottom, ' \ + 'from(%s), to(%s))' % (theme.background_startColor, + theme.background_endColor) + elif theme.background_direction == u'vertical': + background = \ + u'background: -webkit-gradient(linear, left top, right top,' \ + 'from(%s), to(%s))' % (theme.background_startColor, + theme.background_endColor) + else: + background = \ + u'background: -webkit-gradient(radial, %s 50%%, 100, %s 50%%, %s,' \ + 'from(%s), to(%s))' % (width, width, width, theme.background_startColor, + theme.background_endColor) + return background + def build_lyrics_css(item, webkitvers): """ Build the video display css `item` Service Item containing theme and location information - + `webkitvers` The version of qtwebkit we're using """ style = """ -.lyricstable { - z-index:4; - position: absolute; - display: table; - %s -} -.lyricscell { - display:table-cell; - word-wrap: break-word; +.lyricstable { + z-index:4; + position: absolute; + display: table; %s } -.lyricsmain { -%s +.lyricscell { + display:table-cell; + word-wrap: break-word; + %s } -.lyricsoutline { -%s +.lyricsmain { +%s } -.lyricsshadow { -%s +.lyricsoutline { +%s +} +.lyricsshadow { +%s } """ theme = item.themedata @@ -341,23 +378,23 @@ def build_lyrics_css(item, webkitvers): lyrics = u'width: %spx; height: %spx; text-align: %s; ' \ 'vertical-align: %s; font-family: %s; font-size: %spt; ' \ 'color: %s; line-height: %d%%;' % \ - (item.main.width(), item.main.height(), align, valign, - theme.font_main_name, theme.font_main_proportion, + (item.main.width(), item.main.height(), align, valign, + theme.font_main_name, theme.font_main_proportion, theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) # For performance reasons we want to show as few DIV's as possible, - # especially when animating/transitions. - # However some bugs in older versions of qtwebkit mean we need to + # especially when animating/transitions. + # However some bugs in older versions of qtwebkit mean we need to # perform workarounds and add extra divs. Only do these when needed. # - # Before 533.3 the webkit-text-fill colour wasn't displayed, only the + # Before 533.3 the webkit-text-fill colour wasn't displayed, only the # stroke (outline) color. So put stroke layer underneath the main text. # - # Before 534.4 the webkit-text-stroke was sometimes out of alignment + # Before 534.4 the webkit-text-stroke was sometimes out of alignment # with the fill, or normal text. letter-spacing=1 is workaround # https://bugs.webkit.org/show_bug.cgi?id=44403 # - # Before 534.4 the text-shadow didn't get displayed when - # webkit-text-stroke was used. So use an offset text layer underneath. + # Before 534.4 the text-shadow didn't get displayed when + # webkit-text-stroke was used. So use an offset text layer underneath. # https://bugs.webkit.org/show_bug.cgi?id=19728 if theme.display_outline: if webkitvers < 534.3: @@ -373,7 +410,7 @@ def build_lyrics_css(item, webkitvers): u'-webkit-text-fill-color: %s; ' \ u' padding-left: %spx; padding-top: %spx' % \ (float(theme.display_outline_size) / 16, - theme.display_shadow_color, theme.display_shadow_color, + theme.display_shadow_color, theme.display_shadow_color, theme.display_shadow_size, theme.display_shadow_size) if theme.display_shadow and \ (not theme.display_outline or webkitvers >= 534.3): @@ -382,18 +419,18 @@ def build_lyrics_css(item, webkitvers): theme.display_shadow_size) lyrics_css = style % (lyricstable, lyrics, lyricsmain, outline, shadow) return lyrics_css - + def build_lyrics_html(item, webkitvers): """ Build the HTML required to show the lyrics `item` Service Item containing theme and location information - + `webkitvers` The version of qtwebkit we're using """ - # Bugs in some versions of QtWebKit mean we sometimes need additional + # Bugs in some versions of QtWebKit mean we sometimes need additional # divs for outline and shadow, since the CSS doesn't work. # To support vertical alignment middle and bottom, nested div's using # display:table/display:table-cell are required for each lyric block. @@ -411,7 +448,7 @@ def build_lyrics_html(item, webkitvers): u'
' return lyrics - + def build_footer_css(item): """ Build the display of the item footer diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 41e547800..39eff80bd 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -190,44 +190,47 @@ class Renderer(object): self.bg_frame = QtGui.QImage(self.frame.width(), self.frame.height(), QtGui.QImage.Format_ARGB32_Premultiplied) log.debug(u'render background %s start', self._theme.background_type) - painter = QtGui.QPainter() - painter.begin(self.bg_frame) if self._theme.background_type == u'solid': - painter.fillRect(self.frame.rect(), - QtGui.QColor(self._theme.background_color)) + self.bg_frame = None +# painter.fillRect(self.frame.rect(), +# QtGui.QColor(self._theme.background_color)) elif self._theme.background_type == u'gradient': + self.bg_frame = None # gradient - gradient = None - if self._theme.background_direction == u'horizontal': - w = int(self.frame.width()) / 2 - # vertical - gradient = QtGui.QLinearGradient(w, 0, w, self.frame.height()) - elif self._theme.background_direction == u'vertical': - h = int(self.frame.height()) / 2 - # Horizontal - gradient = QtGui.QLinearGradient(0, h, self.frame.width(), h) - else: - w = int(self.frame.width()) / 2 - h = int(self.frame.height()) / 2 - # Circular - gradient = QtGui.QRadialGradient(w, h, w) - gradient.setColorAt(0, - QtGui.QColor(self._theme.background_startColor)) - gradient.setColorAt(1, - QtGui.QColor(self._theme.background_endColor)) - painter.setBrush(QtGui.QBrush(gradient)) - rect_path = QtGui.QPainterPath() - max_x = self.frame.width() - max_y = self.frame.height() - rect_path.moveTo(0, 0) - rect_path.lineTo(0, max_y) - rect_path.lineTo(max_x, max_y) - rect_path.lineTo(max_x, 0) - rect_path.closeSubpath() - painter.drawPath(rect_path) +# gradient = None +# if self._theme.background_direction == u'horizontal': +# w = int(self.frame.width()) / 2 +# # vertical +# gradient = QtGui.QLinearGradient(w, 0, w, self.frame.height()) +# elif self._theme.background_direction == u'vertical': +# h = int(self.frame.height()) / 2 +# # Horizontal +# gradient = QtGui.QLinearGradient(0, h, self.frame.width(), h) +# else: +# w = int(self.frame.width()) / 2 +# h = int(self.frame.height()) / 2 +# # Circular +# gradient = QtGui.QRadialGradient(w, h, w) +# gradient.setColorAt(0, +# QtGui.QColor(self._theme.background_startColor)) +# gradient.setColorAt(1, +# QtGui.QColor(self._theme.background_endColor)) +# painter.setBrush(QtGui.QBrush(gradient)) +# rect_path = QtGui.QPainterPath() +# max_x = self.frame.width() +# max_y = self.frame.height() +# rect_path.moveTo(0, 0) +# rect_path.lineTo(0, max_y) +# rect_path.lineTo(max_x, max_y) +# rect_path.lineTo(max_x, 0) +# rect_path.closeSubpath() +# painter.drawPath(rect_path) +# painter.end() elif self._theme.background_type == u'image': # image + painter = QtGui.QPainter() + painter.begin(self.bg_frame) painter.fillRect(self.frame.rect(), QtCore.Qt.black) if self.bg_image: painter.drawImage(0, 0, self.bg_image) - painter.end() + painter.end() diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 868399f83..2c9472414 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -138,7 +138,7 @@ class MainDisplay(DisplayWidget): painter_image = QtGui.QPainter() painter_image.begin(self.black) painter_image.fillRect(self.black.rect(), QtCore.Qt.black) - #Build the initial frame. + # Build the initial frame. initialFrame = QtGui.QImage( self.screens.current[u'size'].width(), self.screens.current[u'size'].height(), From 04cfa6a730978ae23a2744ca265a32fbc1270367 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 09:12:54 +0100 Subject: [PATCH 062/120] Move spell and tag dialog to it"s own file --- openlp/core/lib/__init__.py | 1 + openlp/core/lib/spelltextedit.py | 154 ++++++++++++++++++ openlp/core/ui/__init__.py | 135 --------------- .../plugins/custom/forms/editcustomdialog.py | 3 +- openlp/plugins/songs/forms/editversedialog.py | 3 +- 5 files changed, 157 insertions(+), 139 deletions(-) create mode 100644 openlp/core/lib/spelltextedit.py diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 721b6ae23..c9858901e 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -316,6 +316,7 @@ def expand_tags(text): text = text.replace(tag[u'end tag'], tag[u'end html']) return text +from spelltextedit import SpellTextEdit from eventreceiver import Receiver from settingsmanager import SettingsManager from plugin import PluginStatus, Plugin diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py new file mode 100644 index 000000000..54279d8fd --- /dev/null +++ b/openlp/core/lib/spelltextedit.py @@ -0,0 +1,154 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program 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; version 2 of the License. # +# # +# This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +import re +import sys +try: + import enchant + enchant_available = True +except ImportError: + enchant_available = False + +# based on code from +# http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ + +from PyQt4 import QtCore, QtGui +from openlp.core.lib import html_expands, translate, context_menu_action + +class SpellTextEdit(QtGui.QPlainTextEdit): + def __init__(self, *args): + QtGui.QPlainTextEdit.__init__(self, *args) + # Default dictionary based on the current locale. + if enchant_available: + self.dict = enchant.Dict() + self.highlighter = Highlighter(self.document()) + self.highlighter.setDict(self.dict) + + def mousePressEvent(self, event): + if event.button() == QtCore.Qt.RightButton: + # Rewrite the mouse event to a left button event so the cursor is + # moved to the location of the pointer. + event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, + event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, + QtCore.Qt.NoModifier) + QtGui.QPlainTextEdit.mousePressEvent(self, event) + + def contextMenuEvent(self, event): + popup_menu = self.createStandardContextMenu() + # Select the word under the cursor. + cursor = self.textCursor() + cursor.select(QtGui.QTextCursor.WordUnderCursor) + self.setTextCursor(cursor) + # Check if the selected word is misspelled and offer spelling + # suggestions if it is. + if enchant_available and self.textCursor().hasSelection(): + text = unicode(self.textCursor().selectedText()) + if not self.dict.check(text): + spell_menu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', + 'Spelling Suggestions')) + for word in self.dict.suggest(text): + action = SpellAction(word, spell_menu) + action.correct.connect(self.correctWord) + spell_menu.addAction(action) + # Only add the spelling suggests to the menu if there are + # suggestions. + if len(spell_menu.actions()) != 0: + popup_menu.insertSeparator(popup_menu.actions()[0]) + popup_menu.insertMenu(popup_menu.actions()[0], spell_menu) + tag_menu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', + 'Formatting Tags')) + for html in html_expands: + action = SpellAction( html[u'desc'], tag_menu) + action.correct.connect(self.htmlTag) + tag_menu.addAction(action) + popup_menu.insertSeparator(popup_menu.actions()[0]) + popup_menu.insertMenu(popup_menu.actions()[0], tag_menu) + + popup_menu.exec_(event.globalPos()) + + def correctWord(self, word): + """ + Replaces the selected text with word. + """ + cursor = self.textCursor() + cursor.beginEditBlock() + cursor.removeSelectedText() + cursor.insertText(word) + cursor.endEditBlock() + + def htmlTag(self, tag): + """ + Replaces the selected text with word. + """ + for html in html_expands: + if tag == html[u'desc']: + cursor = self.textCursor() + if self.textCursor().hasSelection(): + text = cursor.selectedText() + cursor.beginEditBlock() + cursor.removeSelectedText() + cursor.insertText(html[u'start tag']) + cursor.insertText(text) + cursor.insertText(html[u'end tag']) + cursor.endEditBlock() + else: + cursor = self.textCursor() + cursor.insertText(html[u'start tag']) + cursor.insertText(html[u'end tag']) + +class Highlighter(QtGui.QSyntaxHighlighter): + + WORDS = u'(?iu)[\w\']+' + + def __init__(self, *args): + QtGui.QSyntaxHighlighter.__init__(self, *args) + self.dict = None + + def setDict(self, dict): + self.dict = dict + + def highlightBlock(self, text): + if not self.dict: + return + text = unicode(text) + format = QtGui.QTextCharFormat() + format.setUnderlineColor(QtCore.Qt.red) + format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline) + for word_object in re.finditer(self.WORDS, text): + if not self.dict.check(word_object.group()): + self.setFormat(word_object.start(), + word_object.end() - word_object.start(), format) + +class SpellAction(QtGui.QAction): + """ + A special QAction that returns the text in a signal. + """ + correct = QtCore.pyqtSignal(unicode) + + def __init__(self, *args): + QtGui.QAction.__init__(self, *args) + self.triggered.connect(lambda x: self.correct.emit( + unicode(self.text()))) diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index dad79cb7b..33ba25046 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -27,141 +27,6 @@ The :mod:`ui` module provides the core user interface for OpenLP """ -# http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ - -import re -import sys -try: - import enchant - enchant_available = True -except ImportError: - enchant_available = False - -from PyQt4 import QtCore, QtGui -from openlp.core.lib import html_expands, translate, context_menu_action - -class SpellTextEdit(QtGui.QPlainTextEdit): - def __init__(self, *args): - QtGui.QPlainTextEdit.__init__(self, *args) - # Default dictionary based on the current locale. - if enchant_available: - self.dict = enchant.Dict() - self.highlighter = Highlighter(self.document()) - self.highlighter.setDict(self.dict) - - def mousePressEvent(self, event): - if event.button() == QtCore.Qt.RightButton: - # Rewrite the mouse event to a left button event so the cursor is - # moved to the location of the pointer. - event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, - event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, - QtCore.Qt.NoModifier) - QtGui.QPlainTextEdit.mousePressEvent(self, event) - - def contextMenuEvent(self, event): - popup_menu = self.createStandardContextMenu() - # Select the word under the cursor. - cursor = self.textCursor() - cursor.select(QtGui.QTextCursor.WordUnderCursor) - self.setTextCursor(cursor) - # Check if the selected word is misspelled and offer spelling - # suggestions if it is. - if enchant_available and self.textCursor().hasSelection(): - text = unicode(self.textCursor().selectedText()) - if not self.dict.check(text): - spell_menu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', - 'Spelling Suggestions')) - for word in self.dict.suggest(text): - action = SpellAction(word, spell_menu) - action.correct.connect(self.correctWord) - spell_menu.addAction(action) - # Only add the spelling suggests to the menu if there are - # suggestions. - if len(spell_menu.actions()) != 0: - popup_menu.insertSeparator(popup_menu.actions()[0]) - popup_menu.insertMenu(popup_menu.actions()[0], spell_menu) - tag_menu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', - 'Formatting Tags')) - for html in html_expands: - action = SpellAction( html[u'desc'], tag_menu) - action.correct.connect(self.htmlTag) - tag_menu.addAction(action) - popup_menu.insertSeparator(popup_menu.actions()[0]) - popup_menu.insertMenu(popup_menu.actions()[0], tag_menu) - - popup_menu.exec_(event.globalPos()) - - def correctWord(self, word): - """ - Replaces the selected text with word. - """ - cursor = self.textCursor() - cursor.beginEditBlock() - - cursor.removeSelectedText() - cursor.insertText(word) - - cursor.endEditBlock() - - def htmlTag(self, tag): - """ - Replaces the selected text with word. - """ - for html in html_expands: - if tag == html[u'desc']: - cursor = self.textCursor() - if self.textCursor().hasSelection(): - text = cursor.selectedText() - cursor.beginEditBlock() - cursor.removeSelectedText() - cursor.insertText(html[u'start tag']) - cursor.insertText(text) - cursor.insertText(html[u'end tag']) - cursor.endEditBlock() - else: - cursor = self.textCursor() - cursor.insertText(html[u'start tag']) - cursor.insertText(html[u'end tag']) - -class Highlighter(QtGui.QSyntaxHighlighter): - - WORDS = u'(?iu)[\w\']+' - - def __init__(self, *args): - QtGui.QSyntaxHighlighter.__init__(self, *args) - - self.dict = None - - def setDict(self, dict): - self.dict = dict - - def highlightBlock(self, text): - if not self.dict: - return - - text = unicode(text) - - format = QtGui.QTextCharFormat() - format.setUnderlineColor(QtCore.Qt.red) - format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline) - - for word_object in re.finditer(self.WORDS, text): - if not self.dict.check(word_object.group()): - self.setFormat(word_object.start(), - word_object.end() - word_object.start(), format) - -class SpellAction(QtGui.QAction): - """ - A special QAction that returns the text in a signal. - """ - correct = QtCore.pyqtSignal(unicode) - - def __init__(self, *args): - QtGui.QAction.__init__(self, *args) - - self.triggered.connect(lambda x: self.correct.emit( - unicode(self.text()))) - class HideMode(object): """ This is basically an enumeration class which specifies the mode of a Bible. diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index d8557b5e2..84a310cb9 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -26,8 +26,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, translate -from openlp.core.ui import SpellTextEdit +from openlp.core.lib import build_icon, translate, SpellTextEdit class Ui_CustomEditDialog(object): def setupUi(self, customEditDialog): diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 64d56322f..43dc8b96d 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -26,8 +26,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, translate -from openlp.core.ui import SpellTextEdit +from openlp.core.lib import build_icon, translate, SpellTextEdit from openlp.plugins.songs.lib import VerseType class Ui_EditVerseDialog(object): From 26bceb84b9d65b1dd307240de8f49fb45dcf2365 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 11:39:48 +0100 Subject: [PATCH 063/120] Sort out spelling highlighting --- openlp/core/lib/spelltextedit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 54279d8fd..7d227079b 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -60,7 +60,9 @@ class SpellTextEdit(QtGui.QPlainTextEdit): popup_menu = self.createStandardContextMenu() # Select the word under the cursor. cursor = self.textCursor() - cursor.select(QtGui.QTextCursor.WordUnderCursor) + # only select text if not already selected + if not cursor.hasSelection(): + cursor.select(QtGui.QTextCursor.WordUnderCursor) self.setTextCursor(cursor) # Check if the selected word is misspelled and offer spelling # suggestions if it is. @@ -86,7 +88,6 @@ class SpellTextEdit(QtGui.QPlainTextEdit): tag_menu.addAction(action) popup_menu.insertSeparator(popup_menu.actions()[0]) popup_menu.insertMenu(popup_menu.actions()[0], tag_menu) - popup_menu.exec_(event.globalPos()) def correctWord(self, word): From 1899fc341566448c51a43ae4510c48a3fb9818fe Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 4 Sep 2010 14:06:06 +0100 Subject: [PATCH 064/120] css tidies, attempt to get paging correct, replacing qtextdoc with qwebview --- openlp/core/lib/__init__.py | 3 +- openlp/core/lib/htmlbuilder.py | 67 ++++++++++++++++++++-------------- openlp/core/lib/renderer.py | 44 ++++++++++++++++------ 3 files changed, 74 insertions(+), 40 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index da1778d65..25f7630f9 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -324,7 +324,8 @@ from settingstab import SettingsTab from serviceitem import ServiceItem from serviceitem import ServiceItemType from serviceitem import ItemCapabilities -from htmlbuilder import build_html, build_lyrics_format_css +from htmlbuilder import build_html, build_lyrics_format_css, \ + build_lyrics_outline_css from toolbar import OpenLPToolbar from dockwidget import OpenLPDockWidget from theme import ThemeLevel, ThemeXML diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index f65bfb1e3..fff159415 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -329,9 +329,10 @@ def build_lyrics_css(item, webkitvers): if theme: lyricstable = u'left: %spx; top: %spx;' % \ (item.main.x(), item.main.y()) - lyrics = build_lyrics_format_css(theme) - lyrics += u'width: %spx; height: %spx; ' % \ - (item.main.width(), item.main.height()) + lyrics = build_lyrics_format_css(theme, item.main.width(), + item.main.height()) + #lyrics += u'width: %spx; height: %spx; ' % \ + # (item.main.width(), item.main.height()) # For performance reasons we want to show as few DIV's as possible, # especially when animating/transitions. # However some bugs in older versions of qtwebkit mean we need to @@ -347,29 +348,37 @@ def build_lyrics_css(item, webkitvers): # Before 534.4 the text-shadow didn't get displayed when # webkit-text-stroke was used. So use an offset text layer underneath. # https://bugs.webkit.org/show_bug.cgi?id=19728 - if theme.display_outline: - outline = u' -webkit-text-stroke: %sem %s; ' \ - '-webkit-text-fill-color: %s; ' % \ - (float(theme.display_outline_size) / 16, - theme.display_outline_color, theme.font_main_color) - if webkitvers >= 533.3: - lyricsmain += outline - if theme.display_shadow and webkitvers < 534.3: - shadow = u'-webkit-text-stroke: %sem %s; ' \ - u'-webkit-text-fill-color: %s; ' \ - u' padding-left: %spx; padding-top: %spx' % \ - (float(theme.display_outline_size) / 16, - theme.display_shadow_color, theme.display_shadow_color, - theme.display_shadow_size, theme.display_shadow_size) - if theme.display_shadow and \ - (not theme.display_outline or webkitvers >= 534.3): - lyricsmain += u' text-shadow: %s %spx %spx;' % \ - (theme.display_shadow_color, theme.display_shadow_size, - theme.display_shadow_size) + if webkitvers >= 533.3: + lyricsmain += build_lyrics_outline_css(theme) + else: + outline = build_lyrics_outline_css(theme) + if theme.display_shadow: + if theme.display_outline and webkitvers < 534.3: + shadow = u'padding-left: %spx; padding-top: %spx ' % \ + (theme.display_shadow_size, theme.display_shadow_size) + shadow += build_lyrics_outline_css(theme, True) + else: + lyricsmain += u' text-shadow: %s %spx %spx;' % \ + (theme.display_shadow_color, theme.display_shadow_size, + theme.display_shadow_size) lyrics_css = style % (lyricstable, lyrics, lyricsmain, outline, shadow) return lyrics_css -def build_lyrics_format_css(theme): +def build_lyrics_outline_css(theme, is_shadow=False): + if theme.display_outline: + size = float(theme.display_outline_size) / 16 + if is_shadow: + fill_color = theme.display_shadow_color + outline_color = theme.display_shadow_color + else: + fill_color = theme.font_main_color + outline_color = theme.display_outline_color + return u' -webkit-text-stroke: %sem %s; ' \ + u'-webkit-text-fill-color: %s; ' % (size, outline_color, fill_color) + else: + return u'' + +def build_lyrics_format_css(theme, width, height): """ Build the css which controls the theme format Also used by renderer for splitting verses @@ -393,18 +402,20 @@ def build_lyrics_format_css(theme): valign = u'middle' else: valign = u'top' - lyrics = u'word-wrap: break-word; ' \ + lyrics = u'white-space:pre-wrap; word-wrap: break-word; ' \ 'text-align: %s; vertical-align: %s; font-family: %s; ' \ - 'font-size: %spt; color: %s; line-height: %d%%;' % \ + 'font-size: %spt; color: %s; line-height: %d%%; ' \ + 'margin:0; padding:0; width: %spx; height: %spx; ' % \ (align, valign, theme.font_main_name, theme.font_main_proportion, - theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) + theme.font_main_color, 100 + int(theme.font_main_line_adjustment), + width, height) if theme.display_outline: if webkit_version() < 534.3: lyrics += u' letter-spacing: 1px;' if theme.font_main_italics: - lyrics += ' font-style:italic; ' + lyrics += u' font-style:italic; ' if theme.font_main_weight == u'Bold': - lyrics += ' font-weight:bold; ' + lyrics += u' font-weight:bold; ' return lyrics def build_lyrics_html(item, webkitvers): diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index dae7c820a..260ce5e16 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -29,9 +29,10 @@ format it for the output display. """ import logging -from PyQt4 import QtGui, QtCore +from PyQt4 import QtGui, QtCore, QtWebKit -from openlp.core.lib import resize_image, expand_tags, build_lyrics_format_css +from openlp.core.lib import resize_image, expand_tags, \ + build_lyrics_format_css, build_lyrics_outline_css log = logging.getLogger(__name__) @@ -143,20 +144,41 @@ class Renderer(object): lines = verse.split(u'\n') for line in lines: text.append(line) - doc = QtGui.QTextDocument() - doc.setPageSize(QtCore.QSizeF(self._rect.width(), self._rect.height())) - layout = doc.documentLayout() + + web = QtWebKit.QWebView() + web.resize(self._rect.width(), self._rect.height()) + web.setVisible(False) + frame = web.page().mainFrame() + # Adjust width and height to account for shadow. outline done in css + width = self._rect.width() + int(self._theme.display_shadow_size) + height = self._rect.height() + int(self._theme.display_shadow_size) + css = u'' \ + u'
' % \ + (build_lyrics_format_css(self._theme, width, height), + build_lyrics_outline_css(self._theme)) +# doc = QtGui.QTextDocument() +# doc.setPageSize(QtCore.QSizeF(self._rect.width(), self._rect.height())) +# doc.setDocumentMargin(0) +# css = u'* {%s}' % build_lyrics_format_css(self._theme) +# doc.setDefaultStyleSheet(css) + #layout = doc.documentLayout() formatted = [] - shell = u'
' % build_lyrics_format_css(self._theme) html_text = u'' - styled_text = shell + styled_text = u'' + divheight = 'document.getElementById("main").scrollHeight' for line in text: - styled_text += expand_tags(line) + line_end - doc.setHtml(styled_text + u'
') + styled_line = expand_tags(line) + line_end + styled_text += styled_line + html = css + styled_text + u'
' + web.setHtml(html) +# doc.setHtml(styled_text) # Text too long so go to next page - if layout.pageCount() != 1: +# if doc.pageCount() != 1: + text_height = int(frame.evaluateJavaScript(divheight).toString()) + if text_height > height: formatted.append(html_text) - styled_text = shell + html_text = u'' + styled_text = styled_line html_text += line + line_end formatted.append(html_text) log.debug(u'format_slide - End') From a74af25265059a8ceeaa526a768e1d872972eeba Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 4 Sep 2010 14:09:47 +0100 Subject: [PATCH 065/120] tidy --- openlp/core/lib/htmlbuilder.py | 2 -- openlp/core/lib/renderer.py | 16 ++++------------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index fff159415..e6a7857ff 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -331,8 +331,6 @@ def build_lyrics_css(item, webkitvers): (item.main.x(), item.main.y()) lyrics = build_lyrics_format_css(theme, item.main.width(), item.main.height()) - #lyrics += u'width: %spx; height: %spx; ' % \ - # (item.main.width(), item.main.height()) # For performance reasons we want to show as few DIV's as possible, # especially when animating/transitions. # However some bugs in older versions of qtwebkit mean we need to diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 260ce5e16..46e0452ac 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -152,29 +152,21 @@ class Renderer(object): # Adjust width and height to account for shadow. outline done in css width = self._rect.width() + int(self._theme.display_shadow_size) height = self._rect.height() + int(self._theme.display_shadow_size) - css = u'' \ + shell = u'' \ u'
' % \ (build_lyrics_format_css(self._theme, width, height), build_lyrics_outline_css(self._theme)) -# doc = QtGui.QTextDocument() -# doc.setPageSize(QtCore.QSizeF(self._rect.width(), self._rect.height())) -# doc.setDocumentMargin(0) -# css = u'* {%s}' % build_lyrics_format_css(self._theme) -# doc.setDefaultStyleSheet(css) - #layout = doc.documentLayout() formatted = [] html_text = u'' styled_text = u'' - divheight = 'document.getElementById("main").scrollHeight' + js_height = 'document.getElementById("main").scrollHeight' for line in text: styled_line = expand_tags(line) + line_end styled_text += styled_line - html = css + styled_text + u'
' + html = shell + styled_text + u'' web.setHtml(html) -# doc.setHtml(styled_text) # Text too long so go to next page -# if doc.pageCount() != 1: - text_height = int(frame.evaluateJavaScript(divheight).toString()) + text_height = int(frame.evaluateJavaScript(js_height).toString()) if text_height > height: formatted.append(html_text) html_text = u'' From 5dd5e1506053caa663022427f16fb671cd10b9ec Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 4 Sep 2010 15:23:20 +0100 Subject: [PATCH 066/120] Subtract shadow from width, not add it --- openlp/core/lib/htmlbuilder.py | 25 +++++++++++++++++++++---- openlp/core/lib/renderer.py | 7 +++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 2d9323a8b..a39c3dac5 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -286,6 +286,10 @@ def build_html(item, screen, alert, islive): return html def webkit_version(): + """ + Return the Webkit version in use. + Note method added relatively recently, so return 0 if prior to this + """ try: webkitvers = float(QtWebKit.qWebKitVersion()) log.debug(u'Webkit version = %s' % webkitvers) @@ -402,6 +406,16 @@ def build_lyrics_css(item, webkitvers): return lyrics_css def build_lyrics_outline_css(theme, is_shadow=False): + """ + Build the css which controls the theme outline + Also used by renderer for splitting verses + + `theme` + Object containing theme information + + `is_shadow` + If true, use the shadow colors instead + """ if theme.display_outline: size = float(theme.display_outline_size) / 16 if is_shadow: @@ -420,11 +434,14 @@ def build_lyrics_format_css(theme, width, height): Build the css which controls the theme format Also used by renderer for splitting verses - `item` - Service Item containing theme and location information + `theme` + Object containing theme information - `webkitvers` - The version of qtwebkit we're using + `width` + Width of the lyrics block + + `height` + Height of the lyrics block """ if theme.display_horizontalAlign == 2: diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 1b1605e00..330c434c5 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -143,15 +143,14 @@ class Renderer(object): for verse in verses_text: lines = verse.split(u'\n') for line in lines: - text.append(line) - + text.append(line) web = QtWebKit.QWebView() web.resize(self._rect.width(), self._rect.height()) web.setVisible(False) frame = web.page().mainFrame() # Adjust width and height to account for shadow. outline done in css - width = self._rect.width() + int(self._theme.display_shadow_size) - height = self._rect.height() + int(self._theme.display_shadow_size) + width = self._rect.width() - int(self._theme.display_shadow_size) + height = self._rect.height() - int(self._theme.display_shadow_size) shell = u'' \ u'
' % \ (build_lyrics_format_css(self._theme, width, height), From 163bf9d2f4384ef6399667bce389e2f277b7e812 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 4 Sep 2010 15:26:04 +0100 Subject: [PATCH 067/120] Corrected one line that was missed (not by me :-p) --- openlp/plugins/songs/lib/songimport.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index bf5079c8c..63ef6a8ed 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -300,7 +300,7 @@ class SongImport(QtCore.QObject): topic = Topic.populate(name=topictext) song.topics.append(topic) self.manager.save_object(song) - self.setDefaults() + self.set_defaults() def print_song(self): """ From 62a031982e9da73bfc70a336404cabf1fcf91f43 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 16:51:18 +0100 Subject: [PATCH 068/120] Renderer cleanup --- openlp/core/lib/renderer.py | 93 +++++++------------------------------ 1 file changed, 17 insertions(+), 76 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 39eff80bd..e7689d012 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -69,21 +69,11 @@ class Renderer(object): self.theme_name = theme.theme_name if theme.background_type == u'image': if theme.background_filename: - self.set_bg_image(theme.background_filename) - - def set_bg_image(self, filename): - """ - Set a background image. - - ``filename`` - The name of the image file. - """ - log.debug(u'set bg image %s', filename) - self._bg_image_filename = unicode(filename) - if self.frame: - self.bg_image = resize_image(self._bg_image_filename, - self.frame.width(), - self.frame.height()) + self._bg_image_filename = unicode(filename) + if self.frame: + self.bg_image = resize_image(self._bg_image_filename, + self.frame.width(), + self.frame.height()) def set_text_rectangle(self, rect_main, rect_footer): """ @@ -99,7 +89,7 @@ class Renderer(object): self._rect = rect_main self._rect_footer = rect_footer - def set_frame_dest(self, frame_width, frame_height, preview=False): + def set_frame_dest(self, frame_width, frame_height): """ Set the size of the slide. @@ -109,11 +99,7 @@ class Renderer(object): ``frame_height`` The height of the slide. - ``preview`` - Defaults to *False*. Whether or not to generate a preview. """ - if preview: - self.bg_frame = None log.debug(u'set frame dest (frame) w %d h %d', frame_width, frame_height) self.frame = QtGui.QImage(frame_width, frame_height, @@ -121,8 +107,17 @@ class Renderer(object): if self._bg_image_filename and not self.bg_image: self.bg_image = resize_image(self._bg_image_filename, self.frame.width(), self.frame.height()) - if self.bg_frame is None: - self._generate_background_frame() + if self._theme.background_type == u'image': + self.bg_frame = QtGui.QImage(self.frame.width(), + self.frame.height(), QtGui.QImage.Format_ARGB32_Premultiplied) + painter = QtGui.QPainter() + painter.begin(self.bg_frame) + painter.fillRect(self.frame.rect(), QtCore.Qt.black) + if self.bg_image: + painter.drawImage(0, 0, self.bg_image) + painter.end() + else: + self.bg_frame = None def format_slide(self, words, line_break): """ @@ -180,57 +175,3 @@ class Renderer(object): formatted.append(shell % old_html_text) log.debug(u'format_slide - End') return formatted - - def _generate_background_frame(self): - """ - Generate a background frame to the same size as the frame to be used. - Results are cached for performance reasons. - """ - assert(self._theme) - self.bg_frame = QtGui.QImage(self.frame.width(), - self.frame.height(), QtGui.QImage.Format_ARGB32_Premultiplied) - log.debug(u'render background %s start', self._theme.background_type) - if self._theme.background_type == u'solid': - self.bg_frame = None -# painter.fillRect(self.frame.rect(), -# QtGui.QColor(self._theme.background_color)) - elif self._theme.background_type == u'gradient': - self.bg_frame = None - # gradient -# gradient = None -# if self._theme.background_direction == u'horizontal': -# w = int(self.frame.width()) / 2 -# # vertical -# gradient = QtGui.QLinearGradient(w, 0, w, self.frame.height()) -# elif self._theme.background_direction == u'vertical': -# h = int(self.frame.height()) / 2 -# # Horizontal -# gradient = QtGui.QLinearGradient(0, h, self.frame.width(), h) -# else: -# w = int(self.frame.width()) / 2 -# h = int(self.frame.height()) / 2 -# # Circular -# gradient = QtGui.QRadialGradient(w, h, w) -# gradient.setColorAt(0, -# QtGui.QColor(self._theme.background_startColor)) -# gradient.setColorAt(1, -# QtGui.QColor(self._theme.background_endColor)) -# painter.setBrush(QtGui.QBrush(gradient)) -# rect_path = QtGui.QPainterPath() -# max_x = self.frame.width() -# max_y = self.frame.height() -# rect_path.moveTo(0, 0) -# rect_path.lineTo(0, max_y) -# rect_path.lineTo(max_x, max_y) -# rect_path.lineTo(max_x, 0) -# rect_path.closeSubpath() -# painter.drawPath(rect_path) -# painter.end() - elif self._theme.background_type == u'image': - # image - painter = QtGui.QPainter() - painter.begin(self.bg_frame) - painter.fillRect(self.frame.rect(), QtCore.Qt.black) - if self.bg_image: - painter.drawImage(0, 0, self.bg_image) - painter.end() From b9bb5b8c4fdc66d049985fdb5d09694cf8a71108 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 17:14:56 +0100 Subject: [PATCH 069/120] Cleanups --- openlp/core/lib/renderer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 5a98faaff..0cb92ad39 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -70,7 +70,7 @@ class Renderer(object): self.theme_name = theme.theme_name if theme.background_type == u'image': if theme.background_filename: - self._bg_image_filename = unicode(filename) + self._bg_image_filename = unicode(theme.background_filename) if self.frame: self.bg_image = resize_image(self._bg_image_filename, self.frame.width(), @@ -138,14 +138,14 @@ class Renderer(object): for verse in verses_text: lines = verse.split(u'\n') for line in lines: - text.append(line) + text.append(line) web = QtWebKit.QWebView() web.resize(self._rect.width(), self._rect.height()) web.setVisible(False) frame = web.page().mainFrame() # Adjust width and height to account for shadow. outline done in css - width = self._rect.width() - int(self._theme.display_shadow_size) - height = self._rect.height() - int(self._theme.display_shadow_size) + width = self._rect.width() - int(self._theme.display_shadow_size) + height = self._rect.height() - int(self._theme.display_shadow_size) shell = u'' \ u'
' % \ (build_lyrics_format_css(self._theme, width, height), From cd9a7d49515336e443dcde24846369afe97c123d Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 4 Sep 2010 17:36:07 +0100 Subject: [PATCH 070/120] Changed with and height arround on the general tab. This brings it in line with the standard way of specifing a screen res, as well as bring it in line with the x & y cords before the height and width! --- openlp/core/ui/generaltab.py | 50 ++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index bc050b6f9..0e18b249b 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -195,6 +195,19 @@ class GeneralTab(SettingsTab): self.currentYValueLabel.setObjectName(u'currentYValueLabel') self.currentYLayout.addWidget(self.currentYValueLabel) self.currentLayout.addLayout(self.currentYLayout) + self.currentWidthLayout = QtGui.QVBoxLayout() + self.currentWidthLayout.setSpacing(0) + self.currentWidthLayout.setMargin(0) + self.currentWidthLayout.setObjectName(u'currentWidthLayout') + self.currentWidthLabel = QtGui.QLabel(self.displayGroupBox) + self.currentWidthLabel.setAlignment(QtCore.Qt.AlignCenter) + self.currentWidthLabel.setObjectName(u'currentWidthLabel') + self.currentWidthLayout.addWidget(self.currentWidthLabel) + self.currentWidthValueLabel = QtGui.QLabel(self.displayGroupBox) + self.currentWidthValueLabel.setAlignment(QtCore.Qt.AlignCenter) + self.currentWidthValueLabel.setObjectName(u'currentWidthValueLabel') + self.currentWidthLayout.addWidget(self.currentWidthValueLabel) + self.currentLayout.addLayout(self.currentWidthLayout) self.currentHeightLayout = QtGui.QVBoxLayout() self.currentHeightLayout.setSpacing(0) self.currentHeightLayout.setMargin(0) @@ -209,19 +222,6 @@ class GeneralTab(SettingsTab): self.currentHeightValueLabel.setObjectName(u'Height') self.currentHeightLayout.addWidget(self.currentHeightValueLabel) self.currentLayout.addLayout(self.currentHeightLayout) - self.currentWidthLayout = QtGui.QVBoxLayout() - self.currentWidthLayout.setSpacing(0) - self.currentWidthLayout.setMargin(0) - self.currentWidthLayout.setObjectName(u'currentWidthLayout') - self.currentWidthLabel = QtGui.QLabel(self.displayGroupBox) - self.currentWidthLabel.setAlignment(QtCore.Qt.AlignCenter) - self.currentWidthLabel.setObjectName(u'currentWidthLabel') - self.currentWidthLayout.addWidget(self.currentWidthLabel) - self.currentWidthValueLabel = QtGui.QLabel(self.displayGroupBox) - self.currentWidthValueLabel.setAlignment(QtCore.Qt.AlignCenter) - self.currentWidthValueLabel.setObjectName(u'currentWidthValueLabel') - self.currentWidthLayout.addWidget(self.currentWidthValueLabel) - self.currentLayout.addLayout(self.currentWidthLayout) self.displayLayout.addLayout(self.currentLayout) self.overrideCheckBox = QtGui.QCheckBox(self.displayGroupBox) self.overrideCheckBox.setObjectName(u'overrideCheckBox') @@ -256,18 +256,6 @@ class GeneralTab(SettingsTab): self.customYValueEdit.setObjectName(u'customYValueEdit') self.customYLayout.addWidget(self.customYValueEdit) self.customLayout.addLayout(self.customYLayout) - self.customHeightLayout = QtGui.QVBoxLayout() - self.customHeightLayout.setSpacing(0) - self.customHeightLayout.setMargin(0) - self.customHeightLayout.setObjectName(u'customHeightLayout') - self.customHeightLabel = QtGui.QLabel(self.displayGroupBox) - self.customHeightLabel.setAlignment(QtCore.Qt.AlignCenter) - self.customHeightLabel.setObjectName(u'customHeightLabel') - self.customHeightLayout.addWidget(self.customHeightLabel) - self.customHeightValueEdit = QtGui.QLineEdit(self.displayGroupBox) - self.customHeightValueEdit.setObjectName(u'customHeightValueEdit') - self.customHeightLayout.addWidget(self.customHeightValueEdit) - self.customLayout.addLayout(self.customHeightLayout) self.customWidthLayout = QtGui.QVBoxLayout() self.customWidthLayout.setSpacing(0) self.customWidthLayout.setMargin(0) @@ -281,6 +269,18 @@ class GeneralTab(SettingsTab): self.customWidthValueEdit.setObjectName(u'customWidthValueEdit') self.customWidthLayout.addWidget(self.customWidthValueEdit) self.customLayout.addLayout(self.customWidthLayout) + self.customHeightLayout = QtGui.QVBoxLayout() + self.customHeightLayout.setSpacing(0) + self.customHeightLayout.setMargin(0) + self.customHeightLayout.setObjectName(u'customHeightLayout') + self.customHeightLabel = QtGui.QLabel(self.displayGroupBox) + self.customHeightLabel.setAlignment(QtCore.Qt.AlignCenter) + self.customHeightLabel.setObjectName(u'customHeightLabel') + self.customHeightLayout.addWidget(self.customHeightLabel) + self.customHeightValueEdit = QtGui.QLineEdit(self.displayGroupBox) + self.customHeightValueEdit.setObjectName(u'customHeightValueEdit') + self.customHeightLayout.addWidget(self.customHeightValueEdit) + self.customLayout.addLayout(self.customHeightLayout) self.displayLayout.addLayout(self.customLayout) # Bottom spacer self.generalRightSpacer = QtGui.QSpacerItem(20, 40, From 20844c8d289636d063b6569f44d0bb9bfce1aee8 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 18:39:03 +0100 Subject: [PATCH 071/120] Fix CCLI for songs Fixes: https://launchpad.net/bugs/622894 --- openlp/plugins/songs/lib/mediaitem.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 85ba1cf06..9f14698ee 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -359,16 +359,13 @@ class SongMediaItem(MediaManagerItem): author_list = author_list + u', ' author_list = author_list + unicode(author.display_name) author_audit.append(unicode(author.display_name)) - if song.ccli_number is None or len(song.ccli_number) == 0: - ccli = QtCore.QSettings().value(u'general/ccli number', - QtCore.QVariant(u'')).toString() - else: - ccli = unicode(song.ccli_number) raw_footer.append(song.title) raw_footer.append(author_list) raw_footer.append(song.copyright ) raw_footer.append(unicode( - translate('SongsPlugin.MediaItem', 'CCLI Licence: ') + ccli)) + translate('SongsPlugin.MediaItem', 'CCLI Licence: ') + + QtCore.QSettings().value(u'general/ccli number', + QtCore.QVariant(u'')).toString())) service_item.raw_footer = raw_footer service_item.audit = [ song.title, author_audit, song.copyright, unicode(song.ccli_number) From 2901c79ed6dbd5ce78bb724451b767a1f84e3da6 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 4 Sep 2010 19:51:41 +0200 Subject: [PATCH 072/120] Start work on the openlp.org 1.x importer. Add a couple of fixes to the song import. Add a few fixes to the OpenSong importer. --- openlp/plugins/songs/lib/olp1import.py | 102 +++++++-------------- openlp/plugins/songs/lib/opensongimport.py | 5 + openlp/plugins/songs/lib/songimport.py | 7 +- 3 files changed, 44 insertions(+), 70 deletions(-) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 1625bfff2..ae386335a 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -52,7 +52,6 @@ class OpenLP1SongImport(SongImport): The database providing the data to import. """ SongImport.__init__(self, manager) - self.manager = manager self.import_source = kwargs[u'filename'] def do_import(self): @@ -61,71 +60,38 @@ class OpenLP1SongImport(SongImport): """ connection = sqlite.connect(self.import_source) cursor = connection.cursor() + cursor.execute(u'SELECT COUNT(authorid) FROM authors') + count = int(cursor.fetchone()[0]) + cursor.execute(u'SELECT COUNT(songid) FROM songs') + count = int(cursor.fetchone()[0]) + self.import_wizard.importProgressBar.setMaximum(count) -# for song in source_songs: -# new_song = Song() -# new_song.title = song.title -# if has_media_files: -# new_song.alternate_title = song.alternate_title -# else: -# old_titles = song.search_title.split(u'@') -# if len(old_titles) > 1: -# new_song.alternate_title = old_titles[1] -# else: -# new_song.alternate_title = u'' -# new_song.search_title = song.search_title -# new_song.song_number = song.song_number -# new_song.lyrics = song.lyrics -# new_song.search_lyrics = song.search_lyrics -# new_song.verse_order = song.verse_order -# new_song.copyright = song.copyright -# new_song.comments = song.comments -# new_song.theme_name = song.theme_name -# new_song.ccli_number = song.ccli_number -# if song.authors: -# for author in song.authors: -# existing_author = self.master_manager.get_object_filtered( -# Author, Author.display_name == author.display_name) -# if existing_author: -# new_song.authors.append(existing_author) -# else: -# new_song.authors.append(Author.populate( -# first_name=author.first_name, -# last_name=author.last_name, -# display_name=author.display_name)) -# else: -# au = self.master_manager.get_object_filtered(Author, -# Author.display_name == u'Author Unknown') -# if au: -# new_song.authors.append(au) -# else: -# new_song.authors.append(Author.populate( -# display_name=u'Author Unknown')) -# if song.book: -# existing_song_book = self.master_manager.get_object_filtered( -# Book, Book.name == song.book.name) -# if existing_song_book: -# new_song.book = existing_song_book -# else: -# new_song.book = Book.populate(name=song.book.name, -# publisher=song.book.publisher) -# if song.topics: -# for topic in song.topics: -# existing_topic = self.master_manager.get_object_filtered( -# Topic, Topic.name == topic.name) -# if existing_topic: -# new_song.topics.append(existing_topic) -# else: -# new_song.topics.append(Topic.populate(name=topic.name)) -## if has_media_files: -## if song.media_files: -## for media_file in song.media_files: -## existing_media_file = \ -## self.master_manager.get_object_filtered(MediaFile, -## MediaFile.file_name == media_file.file_name) -## if existing_media_file: -## new_song.media_files.append(existing_media_file) -## else: -## new_song.media_files.append(MediaFile.populate( -## file_name=media_file.file_name)) -# self.master_manager.save_object(new_song) + old_cursor.execute(u'SELECT authorid AS id, authorname AS displayname FROM authors') + rows = old_cursor.fetchall() + if not debug and verbose: + print 'done.' + author_map = {} + for row in rows: + display_name = unicode(row[1], u'cp1252') + names = display_name.split(u' ') + first_name = names[0] + last_name = u' '.join(names[1:]) + if last_name is None: + last_name = u'' + sql_insert = u'INSERT INTO authors '\ + '(id, first_name, last_name, display_name) '\ + 'VALUES (NULL, ?, ?, ?)' + sql_params = (first_name, last_name, display_name) + if debug: + print '...', display_sql(sql_insert, sql_params) + elif verbose: + print '... importing "%s"' % display_name + new_cursor.execute(sql_insert, sql_params) + author_map[row[0]] = new_cursor.lastrowid + if debug: + print ' >>> authors.authorid =', row[0], 'authors.id =', author_map[row[0]] + + + cursor.execute(u'SELECT songid AS id, songtitle AS title, ' + u'lyrics || \'\' AS lyrics, copyrightinfo AS copyright FROM songs') + rows = cursor.fetchall() diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index d51ff5b49..5666fe0eb 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -125,6 +125,9 @@ class OpenSongImport(SongImport): if ext.lower() == u'.zip': log.debug(u'Zipfile found %s', filename) z = ZipFile(filename, u'r') + self.import_wizard.importProgressBar.setMaximum( + self.import_wizard.importProgressBar.maximum() + + len(z.infolist())) for song in z.infolist(): if self.stop_import_flag: break @@ -138,6 +141,7 @@ class OpenSongImport(SongImport): self.do_import_file(songfile) if self.commit: self.finish() + self.set_defaults() if self.stop_import_flag: break else: @@ -148,6 +152,7 @@ class OpenSongImport(SongImport): self.do_import_file(file) if self.commit: self.finish() + self.set_defaults() if not self.commit: self.finish() diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 5889a3774..60cdfd969 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -52,6 +52,11 @@ class SongImport(QtCore.QObject): """ self.manager = manager self.stop_import_flag = False + self.set_defaults() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) + + def set_defaults(self): self.title = u'' self.song_number = u'' self.alternate_title = u'' @@ -71,8 +76,6 @@ class SongImport(QtCore.QObject): 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( 'SongsPlugin.SongImport', '\xa9')) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) def stop_import(self): """ From 9c0391fe733cfd3b54cabf70cfcca2db4e87c4b8 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 4 Sep 2010 18:55:10 +0100 Subject: [PATCH 073/120] Screen size and scrollbar fix? --- openlp.pyw | 9 ++++++--- openlp/core/lib/htmlbuilder.py | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index c4f062b87..7245541d7 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -129,11 +129,14 @@ class OpenLP(QtGui.QApplication): screens = ScreenList() # Decide how many screens we have and their size for screen in xrange(0, self.desktop().numScreens()): + if self.desktop().isVirtualDesktop(): + size = self.desktop().availableGeometry(screen); + else: + size = self.desktop().screenGeometry(screen); screens.add_screen({u'number': screen, - u'size': self.desktop().availableGeometry(screen), + u'size': size, u'primary': (self.desktop().primaryScreen() == screen)}) - log.info(u'Screen %d found with resolution %s', - screen, self.desktop().availableGeometry(screen)) + log.info(u'Screen %d found with resolution %s', screen, size) # start the main app window self.mainWindow = MainWindow(screens, app_version) self.mainWindow.show() diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index a39c3dac5..9c696526e 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -40,6 +40,7 @@ HTMLSRC = u""" margin: 0; padding: 0; border: 0; + overflow: hidden; } body { %s; From e54340d8f36f88877a567150e95e800ca5325e42 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 4 Sep 2010 20:13:26 +0100 Subject: [PATCH 074/120] scrollbar attempt 2 --- openlp/core/ui/maindisplay.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 2c9472414..e682a3a0f 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -125,6 +125,8 @@ class MainDisplay(DisplayWidget): self.frame = self.page.mainFrame() QtCore.QObject.connect(self.webView, QtCore.SIGNAL(u'loadFinished(bool)'), self.isLoaded) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff) self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal, From e2c117034a0471b1d3ae18e778561dc1097ecac2 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 4 Sep 2010 20:40:28 +0100 Subject: [PATCH 075/120] Fix up bug for bible settings of duel drop down Fixes: https://launchpad.net/bugs/629848 --- openlp/core/ui/generaltab.py | 1 - openlp/core/ui/settingsform.py | 3 +++ openlp/plugins/bibles/lib/biblestab.py | 10 +++++----- openlp/plugins/bibles/lib/mediaitem.py | 3 ++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 0e18b249b..d8481e801 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -476,7 +476,6 @@ class GeneralTab(SettingsTab): # Order is important so be careful if you change if self.overrideChanged or postUpdate: Receiver.send_message(u'config_screen_changed') - Receiver.send_message(u'config_updated') self.overrideChanged = False def onOverrideCheckBoxToggled(self, checked): diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 97f2aebaf..37fe1f329 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -30,6 +30,7 @@ import logging from PyQt4 import QtGui +from openlp.core.lib import Receiver from openlp.core.ui import AdvancedTab, GeneralTab, ThemesTab from settingsdialog import Ui_SettingsDialog @@ -87,6 +88,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).save() + # Must go after all settings are save + Receiver.send_message(u'config_updated') return QtGui.QDialog.accept(self) def postSetUp(self): diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 8399ee1d4..0903c9625 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -196,10 +196,10 @@ class BiblesTab(SettingsTab): self.show_new_chapters = True def onBibleDualCheckBox(self, check_state): - self.duel_bibles = False + self.dual_bibles = False # we have a set value convert to True/False if check_state == QtCore.Qt.Checked: - self.duel_bibles = True + self.dual_bibles = True def load(self): settings = QtCore.QSettings() @@ -212,12 +212,12 @@ class BiblesTab(SettingsTab): u'verse layout style', QtCore.QVariant(0)).toInt()[0] self.bible_theme = unicode( settings.value(u'bible theme', QtCore.QVariant(u'')).toString()) - self.duel_bibles = settings.value( + self.dual_bibles = settings.value( u'dual bibles', QtCore.QVariant(True)).toBool() self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.DisplayStyleComboBox.setCurrentIndex(self.display_style) self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) - self.BibleDualCheckBox.setChecked(self.duel_bibles) + self.BibleDualCheckBox.setChecked(self.dual_bibles) settings.endGroup() def save(self): @@ -229,7 +229,7 @@ class BiblesTab(SettingsTab): QtCore.QVariant(self.display_style)) settings.setValue(u'verse layout style', QtCore.QVariant(self.layout_style)) - settings.setValue(u'dual bibles', QtCore.QVariant(self.duel_bibles)) + settings.setValue(u'dual bibles', QtCore.QVariant(self.dual_bibles)) settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme)) settings.endGroup() diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index e7850c65c..57e70617a 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -275,8 +275,9 @@ class BibleMediaItem(MediaManagerItem): self.SearchProgress.setObjectName(u'SearchProgress') def configUpdated(self): + log.debug(u'configUpdated') if QtCore.QSettings().value(self.settingsSection + u'/dual bibles', - QtCore.QVariant(False)).toBool(): + QtCore.QVariant(True)).toBool(): self.AdvancedSecondBibleLabel.setVisible(True) self.AdvancedSecondBibleComboBox.setVisible(True) self.QuickSecondVersionLabel.setVisible(True) From 277f5e13807f14ba97c65d9260ae3d7c4011c741 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 4 Sep 2010 21:08:36 +0100 Subject: [PATCH 076/120] Always use screenGeometry --- openlp.pyw | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 7245541d7..dfe973ceb 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -129,10 +129,7 @@ class OpenLP(QtGui.QApplication): screens = ScreenList() # Decide how many screens we have and their size for screen in xrange(0, self.desktop().numScreens()): - if self.desktop().isVirtualDesktop(): - size = self.desktop().availableGeometry(screen); - else: - size = self.desktop().screenGeometry(screen); + size = self.desktop().screenGeometry(screen); screens.add_screen({u'number': screen, u'size': size, u'primary': (self.desktop().primaryScreen() == screen)}) From aa0f4f7af0745702f570dbe4aad01c1f79c397bf Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 5 Sep 2010 16:16:48 +0100 Subject: [PATCH 077/120] Finish wizard integration --- openlp/plugins/songs/lib/oooimport.py | 3 +++ openlp/plugins/songs/lib/sofimport.py | 3 +++ openlp/plugins/songs/lib/songimport.py | 8 ++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 9a3be2843..e8c723c0e 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -82,6 +82,9 @@ class OooImport(SongImport): self.process_doc() self.close_ooo_file() self.close_ooo() + self.import_wizard.importProgressBar.setMaximum(1) + self.import_wizard.incrementProgressBar(u'', 1) + return True def stop_import(self): self.abort = True diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 0d7c085de..ab91e1923 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -89,6 +89,9 @@ class SofImport(OooImport): self.process_sof_file() self.close_ooo_file() self.close_ooo() + self.import_wizard.importProgressBar.setMaximum(1) + self.import_wizard.incrementProgressBar(u'', 1) + return True def process_sof_file(self): """ diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 63ef6a8ed..17000a2ba 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -129,13 +129,13 @@ class SongImport(QtCore.QObject): def process_verse_text(self, text): lines = text.split(u'\n') - if text.lower().find(COPYRIGHT_STRING) >= 0 \ - or text.lower().find(COPYRIGHT_SYMBOL) >= 0: + if text.lower().find(self.copyright_string) >= 0 \ + or text.lower().find(self.copyright_symbol) >= 0: copyright_found = False for line in lines: if (copyright_found or - line.lower().find(COPYRIGHT_STRING) >= 0 or - line.lower().find(COPYRIGHT_SYMBOL) >= 0): + line.lower().find(self.copyright_string) >= 0 or + line.lower().find(self.copyright_symbol) >= 0): copyright_found = True self.add_copyright(line) else: From a4d8e225c0f8c5ff1f6c662a9b763a55bc8544d6 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 5 Sep 2010 17:11:50 +0100 Subject: [PATCH 078/120] Allow images to blank to theme. As none defined cos it's an image use global Fixes: https://launchpad.net/bugs/630254 --- openlp/core/lib/htmlbuilder.py | 23 ++++++++++++----------- openlp/core/lib/rendermanager.py | 2 ++ openlp/core/lib/serviceitem.py | 1 + 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 9c696526e..acf00bdeb 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -145,6 +145,7 @@ body { } document.getElementById('black').style.display = black; document.getElementById('lyricsmain').style.visibility = lyrics; + document.getElementById('image').style.visibility = lyrics; outline = document.getElementById('lyricsoutline') if(outline!=null) outline.style.visibility = lyrics; @@ -327,7 +328,7 @@ def build_background_css(item, width, height): else: background = \ u'background: -webkit-gradient(radial, %s 50%%, 100, %s ' \ - u'50%%, %s, from(%s), to(%s))' % (width, width, width, + u'50%%, %s, from(%s), to(%s))' % (width, width, width, theme.background_startColor, theme.background_endColor) return background @@ -370,10 +371,10 @@ def build_lyrics_css(item, webkitvers): lyricsmain = u'' outline = u'' shadow = u'' - if theme: + if theme and item.main: lyricstable = u'left: %spx; top: %spx;' % \ (item.main.x(), item.main.y()) - lyrics = build_lyrics_format_css(theme, item.main.width(), + lyrics = build_lyrics_format_css(theme, item.main.width(), item.main.height()) # For performance reasons we want to show as few DIV's as possible, # especially when animating/transitions. @@ -393,7 +394,7 @@ def build_lyrics_css(item, webkitvers): if webkitvers >= 533.3: lyricsmain += build_lyrics_outline_css(theme) else: - outline = build_lyrics_outline_css(theme) + outline = build_lyrics_outline_css(theme) if theme.display_shadow: if theme.display_outline and webkitvers < 534.3: shadow = u'padding-left: %spx; padding-top: %spx ' % \ @@ -405,7 +406,7 @@ def build_lyrics_css(item, webkitvers): theme.display_shadow_size) lyrics_css = style % (lyricstable, lyrics, lyricsmain, outline, shadow) return lyrics_css - + def build_lyrics_outline_css(theme, is_shadow=False): """ Build the css which controls the theme outline @@ -413,7 +414,7 @@ def build_lyrics_outline_css(theme, is_shadow=False): `theme` Object containing theme information - + `is_shadow` If true, use the shadow colors instead """ @@ -437,7 +438,7 @@ def build_lyrics_format_css(theme, width, height): `theme` Object containing theme information - + `width` Width of the lyrics block @@ -461,8 +462,8 @@ def build_lyrics_format_css(theme, width, height): 'text-align: %s; vertical-align: %s; font-family: %s; ' \ 'font-size: %spt; color: %s; line-height: %d%%; ' \ 'margin:0; padding:0; width: %spx; height: %spx; ' % \ - (align, valign, theme.font_main_name, theme.font_main_proportion, - theme.font_main_color, 100 + int(theme.font_main_line_adjustment), + (align, valign, theme.font_main_name, theme.font_main_proportion, + theme.font_main_color, 100 + int(theme.font_main_line_adjustment), width, height) if theme.display_outline: if webkit_version() < 534.3: @@ -472,7 +473,7 @@ def build_lyrics_format_css(theme, width, height): if theme.font_main_weight == u'Bold': lyrics += u' font-weight:bold; ' return lyrics - + def build_lyrics_html(item, webkitvers): """ Build the HTML required to show the lyrics @@ -520,7 +521,7 @@ def build_footer_css(item): text-align: %s; """ theme = item.themedata - if not theme: + if not theme or not item.footer: return u'' if theme.display_horizontalAlign == 2: align = u'center' diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index 6be26bd82..a6e494b01 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -93,6 +93,8 @@ class RenderManager(object): """ self.global_theme = global_theme self.theme_level = theme_level + self.global_theme_data = \ + self.theme_manager.getThemeData(self.global_theme) self.themedata = None def set_service_theme(self, service_theme): diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 0e8625ce7..b0d453af5 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -170,6 +170,7 @@ class ServiceItem(object): u'verseTag': slide[u'verseTag'] }) log.log(15, u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Image: + self.themedata = self.render_manager.global_theme_data for slide in self._raw_frames: slide[u'image'] = resize_image(slide[u'image'], self.render_manager.width, self.render_manager.height) From 91eff095a55471d3acbd22b0760b1aeb424420dc Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 5 Sep 2010 20:52:49 +0100 Subject: [PATCH 079/120] Fix hiding of screen and adding items behind it and showing them. Fixes: https://launchpad.net/bugs/630285 --- openlp/core/ui/maindisplay.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index e682a3a0f..3e0b070b9 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -97,6 +97,7 @@ class MainDisplay(DisplayWidget): self.screens = screens self.isLive = live self.alertTab = None + self.hide_mode = None self.setWindowTitle(u'OpenLP Display') self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint) @@ -340,6 +341,9 @@ class MainDisplay(DisplayWidget): self.webView.setHtml(html) if serviceItem.foot_text and serviceItem.foot_text: self.footer(serviceItem.foot_text) + # if was hidden keep it hidden + if self.hide_mode and self.isLive: + self.hideDisplay(self.hide_mode) def footer(self, text): """ @@ -365,6 +369,7 @@ class MainDisplay(DisplayWidget): self.frame.evaluateJavaScript(u'show_blank("theme");') if mode != HideMode.Screen and self.isHidden(): self.setVisible(True) + self.hide_mode = mode def showDisplay(self): """ @@ -378,6 +383,7 @@ class MainDisplay(DisplayWidget): self.setVisible(True) # Trigger actions when display is active again Receiver.send_message(u'maindisplay_active') + self.hide_mode = None class AudioPlayer(QtCore.QObject): """ From 08e97a67cb62ae5332c221c6a54c19f2d5d8ffdf Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 6 Sep 2010 06:53:48 +0200 Subject: [PATCH 080/120] More string fixes and updates from Pootle. --- openlp/plugins/presentations/lib/mediaitem.py | 2 +- resources/i18n/af.ts | 6 +++--- resources/i18n/de.ts | 6 +++--- resources/i18n/en.ts | 6 +++--- resources/i18n/en_GB.ts | 6 +++--- resources/i18n/en_ZA.ts | 6 +++--- resources/i18n/es.ts | 6 +++--- resources/i18n/et.ts | 6 +++--- resources/i18n/hu.ts | 6 +++--- resources/i18n/ko.ts | 6 +++--- resources/i18n/nb.ts | 6 +++--- resources/i18n/pt_BR.ts | 6 +++--- resources/i18n/sv.ts | 6 +++--- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 001aeac4d..60b455368 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -212,7 +212,7 @@ class PresentationMediaItem(MediaManagerItem): self, translate('PresentationPlugin.MediaItem', 'Unsupported File'), translate('PresentationPlugin.MediaItem', - 'This type of presentation is not supported')) + 'This type of presentation is not supported.')) continue item_name = QtGui.QListWidgetItem(filename) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index 3ca75ea47..6b9e90322 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index 006e3f196..b4c437b75 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -1075,7 +1075,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1091,7 +1091,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1146,7 +1146,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 97f604a34..e93b5528d 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 280d8f1a5..1f644c3b4 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index cd62c00b3..e31ea3797 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -1119,7 +1119,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1135,7 +1135,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1190,7 +1190,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 17e2615a8..a89b222f4 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index fce37afcb..eacc6fe0c 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -1081,7 +1081,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1097,7 +1097,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1152,7 +1152,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 55cec3b93..984599a5b 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -1061,7 +1061,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1077,7 +1077,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1132,7 +1132,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 8eab3b396..04f7b048b 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 3e1842746..7c4ba2d4b 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index c4cabb41c..04dc0ba7e 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -1092,7 +1092,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1108,7 +1108,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1163,7 +1163,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index 786f7a98b..080a2ea1d 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -1055,7 +1055,7 @@ The precise terms and conditions for copying, distribution and modification foll GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @@ -1071,7 +1071,7 @@ b) You must cause any work that you distribute or publish, that in whole or in p c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. @@ -1126,7 +1126,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> +Copyright (C) <year> <name of author> This program 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 2 of the License, or (at your option) any later version. From 035bf7577fdb6a70a24fc0570e37e13a535396b9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 6 Sep 2010 07:54:51 +0200 Subject: [PATCH 081/120] Update some strings, fix up the layout in the edit song dialog. --- openlp/plugins/songs/forms/editsongdialog.py | 15 +- resources/i18n/af.ts | 2 +- resources/i18n/de.ts | 6 +- resources/i18n/en.ts | 2 +- resources/i18n/en_GB.ts | 2 +- resources/i18n/en_ZA.ts | 326 +++++++++++++------ resources/i18n/es.ts | 2 +- resources/i18n/et.ts | 10 +- resources/i18n/hu.ts | 2 +- resources/i18n/ko.ts | 2 +- resources/i18n/nb.ts | 2 +- resources/i18n/pt_BR.ts | 2 +- resources/i18n/sv.ts | 2 +- 13 files changed, 257 insertions(+), 118 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 870a68bca..0d2e65f95 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -258,10 +258,11 @@ class Ui_EditSongDialog(object): self.TopicBookLayout.addWidget(self.TopicGroupBox) self.SongBookGroup = QtGui.QGroupBox(self.TopicBookWidget) self.SongBookGroup.setObjectName(u'SongBookGroup') - self.SongbookLayout = QtGui.QGridLayout(self.SongBookGroup) + self.SongbookLayout = QtGui.QFormLayout(self.SongBookGroup) self.SongbookLayout.setMargin(8) self.SongbookLayout.setSpacing(8) self.SongbookLayout.setObjectName(u'SongbookLayout') + self.SongbookNameLabel = QtGui.QLabel(self.SongBookGroup) self.SongbookCombo = QtGui.QComboBox(self.SongBookGroup) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed) @@ -272,13 +273,11 @@ class Ui_EditSongDialog(object): self.SongbookCombo.setEditable(True) self.SongbookCombo.setSizePolicy(sizePolicy) self.SongbookCombo.setObjectName(u'SongbookCombo') - self.SongbookLayout.addWidget(self.SongbookCombo, 0, 0, 1, 1) + self.SongbookLayout.addRow(self.SongbookNameLabel, self.SongbookCombo) self.songBookNumberLabel = QtGui.QLabel(self.SongBookGroup) - self.SongbookLayout.addWidget(self.songBookNumberLabel, 0, 1, 1, 1) self.songBookNumberEdit = QtGui.QLineEdit(self.SongBookGroup) - self.songBookNumberLabel.setBuddy(self.songBookNumberEdit) - self.songBookNumberEdit.setMaximumWidth(35) - self.SongbookLayout.addWidget(self.songBookNumberEdit, 0, 2, 1, 1) + self.SongbookLayout.addRow(self.songBookNumberLabel, + self.songBookNumberEdit) self.TopicBookLayout.addWidget(self.SongBookGroup) self.AuthorsTabLayout.addWidget(self.TopicBookWidget) self.SongTabWidget.addTab(self.AuthorsTab, u'') @@ -446,8 +445,10 @@ class Ui_EditSongDialog(object): translate('SongsPlugin.EditSongForm', 'R&emove')) self.SongBookGroup.setTitle( translate('SongsPlugin.EditSongForm', 'Song Book')) + self.SongbookNameLabel.setText(translate('SongsPlugin.EditSongForm', + 'Book:')) self.songBookNumberLabel.setText(translate('SongsPlugin.EditSongForm', - 'Song No.:')) + 'Number:')) self.SongTabWidget.setTabText( self.SongTabWidget.indexOf(self.AuthorsTab), translate('SongsPlugin.EditSongForm', diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index 6b9e90322..cde35ce80 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index b4c437b75..10b15691f 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -10,7 +10,7 @@ Show an alert message. - + Hinweis anzeigen @@ -2846,8 +2846,8 @@ The content encoding is not UTF-8. - This type of presentation is not supported - + This type of presentation is not supported. + diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index e93b5528d..86411c4e5 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 1f644c3b4..d08d90416 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index e31ea3797..f56ff3755 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -185,7 +185,7 @@ The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. - + The book you requested could not be found in this bible. Please check your spelling and that this is a complete bible not just one testament. @@ -206,7 +206,15 @@ Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + Your scripture reference is either not supported by OpenLP or invalid. Please make sure your reference conforms to one of the following patterns: + +Book Chapter +Book Chapter-Chapter +Book Chapter:Verse-Verse +Book Chapter:Verse-Verse,Verse-Verse +Book Chapter:Verse-Verse,Chapter:Verse-Verse +Book Chapter:Verse-Chapter:Verse + @@ -1216,7 +1224,137 @@ Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gno Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - + Copyright © 2004-2010 Raoul Snyman +Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard + +This program 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; version 2 of the License. + +This program 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 below for more details. + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +<one line to give the program's name and a brief idea of what it does.> +Copyright (C) <year> <name of author> + +This program 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 2 of the License, or (at your option) any later version. + +This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". +This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. + +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. + +<signature of Ty Coon>, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. @@ -2593,12 +2731,12 @@ The content encoding is not UTF-8. Edit and re-preview song - + Edit and re-preview song Go To - + Go To @@ -2791,7 +2929,7 @@ The content encoding is not UTF-8. A theme with this name already exists. Would you like to overwrite it? - + A theme with this name already exists. Would you like to overwrite it? @@ -2860,41 +2998,41 @@ The content encoding is not UTF-8. Select Presentation(s) - + Select Presentation(s) Automatic - + Automatic Present using: - Present using: + Present using: File Exists - + File Exists A presentation with that filename already exists. - + A presentation with that filename already exists. Unsupported File - - - - - This type of presentation is not supported - + Unsupported File You must select an item to delete. + You must select an item to delete. + + + + This type of presentation is not supported. @@ -2903,22 +3041,22 @@ The content encoding is not UTF-8. Presentations - + Presentations Available Controllers - Available Controllers + Available Controllers Advanced - Advanced + Advanced Allow presentation application to be overriden - + Allow presentation application to be overriden @@ -2926,7 +3064,7 @@ The content encoding is not UTF-8. <strong>Remote Plugin</strong><br />The remote plugin provides the ability to send messages to a running version of OpenLP on a different computer via a web browser or through the remote API. - + <strong>Remote Plugin</strong><br />The remote plugin provides the ability to send messages to a running version of OpenLP on a different computer via a web browser or through the remote API. @@ -2934,22 +3072,22 @@ The content encoding is not UTF-8. Remotes - Remotes + Remotes Serve on IP address: - + Serve on IP address: Port number: - + Port number: Server Settings - + Server Settings @@ -2957,42 +3095,42 @@ The content encoding is not UTF-8. &Song Usage Tracking - + &Song Usage Tracking &Delete Tracking Data - + &Delete Tracking Data Delete song usage data up to a specified date. - + Delete song usage data up to a specified date. &Extract Tracking Data - + &Extract Tracking Data Generate a report on song usage. - + Generate a report on song usage. Toggle Tracking - + Toggle Tracking Toggle the tracking of song usage. - + Toggle the tracking of song usage. <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. @@ -3000,17 +3138,17 @@ The content encoding is not UTF-8. Delete Selected Song Usage Events? - + Delete Selected Song Usage Events? Are you sure you want to delete selected Song Usage data? - + Are you sure you want to delete selected Song Usage data? Delete Song Usage Data - + Delete Song Usage Data @@ -3018,27 +3156,27 @@ The content encoding is not UTF-8. Output File Location - Output File Location + Output File Location Song Usage Extraction - + Song Usage Extraction Select Date Range - + Select Date Range to - + to Report Location - Report Location + Report Location @@ -3051,12 +3189,12 @@ The content encoding is not UTF-8. Import songs using the import wizard. - + Import songs using the import wizard. <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. @@ -3064,42 +3202,42 @@ The content encoding is not UTF-8. Author Maintenance - Author Maintenance + Author Maintenance Display name: - + Display name: First name: - First name: + First name: Last name: - Last name: + Last name: Error - Error + Error You need to type in the first name of the author. - You need to type in the first name of the author. + You need to type in the first name of the author. You need to type in the last name of the author. - + You need to type in the last name of the author. You have not set a display name for the author, would you like me to combine the first and last names for you? - + You have not set a display name for the author, would you like me to combine the first and last names for you? @@ -3107,192 +3245,192 @@ The content encoding is not UTF-8. Song Editor - Song Editor + Song Editor &Title: - &Title: + &Title: &Lyrics: - + &Lyrics: &Add - + &Add &Edit - + &Edit Ed&it All - + Ed&it All &Delete - &Delete + &Delete Title && Lyrics - Title && Lyrics + Title && Lyrics Authors - Authors + Authors &Add to Song - + &Add to Song &Remove - &Remove + &Remove &Manage Authors, Topics, Song Books - + &Manage Authors, Topics, Song Books Topic - Topic + Topic A&dd to Song - + A&dd to Song R&emove - + R&emove Song Book - + Song Book Authors, Topics && Song Book - + Authors, Topics && Song Book Theme - Theme + Theme New &Theme - + New &Theme Copyright Information - Copyright Information + Copyright Information © - + © Comments - + Comments Theme, Copyright Info && Comments - + Theme, Copyright Info && Comments Save && Preview - Save && Preview + Save && Preview Add Author - + Add Author This author does not exist, do you want to add them? - + This author does not exist, do you want to add them? Error - Error + Error This author is already in the list. - + This author is already in the list. No Author Selected - + No Author Selected You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Add Topic - + Add Topic This topic does not exist, do you want to add it? - + This topic does not exist, do you want to add it? This topic is already in the list. - + This topic is already in the list. No Topic Selected - + No Topic Selected You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. You need to type in a song title. - + You need to type in a song title. You need to type in at least one verse. - + You need to type in at least one verse. Warning - + Warning @@ -3651,7 +3789,7 @@ The content encoding is not UTF-8. You must select an item to delete. - + You must select an item to delete. @@ -3712,7 +3850,7 @@ The content encoding is not UTF-8. © - + © @@ -3753,12 +3891,12 @@ The content encoding is not UTF-8. &Add - + &Add &Edit - + &Edit diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index a89b222f4..ac7be358a 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index eacc6fe0c..6d7eb1f63 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -2840,11 +2840,6 @@ The content encoding is not UTF-8. You must select an item to delete. - - - This type of presentation is not supported - - File Exists @@ -2855,6 +2850,11 @@ The content encoding is not UTF-8. Unsupported File + + + This type of presentation is not supported. + + PresentationPlugin.PresentationTab diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 984599a5b..ca1dbfb43 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -2847,7 +2847,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 04f7b048b..ca4b1696c 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 7c4ba2d4b..7e2cdd865 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index 04dc0ba7e..98bb9733e 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -2879,7 +2879,7 @@ A codificação do conteúdo não é UTF-8. - This type of presentation is not supported + This type of presentation is not supported. diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index 080a2ea1d..c38fa6658 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -2841,7 +2841,7 @@ The content encoding is not UTF-8. - This type of presentation is not supported + This type of presentation is not supported. From db118196a513351368a306c5cf65e6060627d2fd Mon Sep 17 00:00:00 2001 From: Martin Thompson Date: Mon, 6 Sep 2010 20:56:20 +0100 Subject: [PATCH 082/120] test_opensong passes again --- openlp/plugins/songs/lib/opensongimport.py | 7 ++++--- openlp/plugins/songs/lib/songimport.py | 7 ++++--- openlp/plugins/songs/lib/test/test_opensongimport.py | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 58af0edd4..baaec12e7 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -151,7 +151,7 @@ class OpenSongImport(SongImport): self.do_import_file(file) if self.commit: self.finish() - if not self.commit: + if self.commit: self.finish() @@ -296,5 +296,6 @@ class OpenSongImport(SongImport): self.topics = topics self.verse_order_list = verse_order_list self.verses = verselist - xxx sort out where to call setdefaults - xxx need to make calls to insert to database here + + # xxx sort out where to call setdefaults + # xxx need to make calls to insert to database here diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 622f139bd..5a4033280 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -52,16 +52,16 @@ class SongImport(QtCore.QObject): """ self.manager = manager self.stop_import_flag = False - self.set_defaults() QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'songs_stop_import'), self.stop_import) - self.setDefaults() + self.set_defaults() - def setDefaults(self): + def set_defaults(self): """ Create defaults for properties - call this before each song if importing many songs at once to ensure a clean beginning """ + self.authors = [] self.title = u'' self.song_number = u'' self.alternate_title = u'' @@ -251,6 +251,7 @@ class SongImport(QtCore.QObject): """ Write the song and its fields to disk """ + log.info(u'commiting song %s to database', self.title) song = Song() song.title = self.title song.search_title = self.remove_punctuation(self.title) \ diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py index f2fcb8cd2..eabcce7e5 100644 --- a/openlp/plugins/songs/lib/test/test_opensongimport.py +++ b/openlp/plugins/songs/lib/test/test_opensongimport.py @@ -69,9 +69,9 @@ def test(): assert o.topics == [u'TestTheme', u'TestAltTheme'] o.filenames = [u'test.opensong.zip'] + o.set_defaults() o.do_import() o.print_song() - o.finish() assert o.copyright == u'2010 Martin Thompson' assert o.authors == [u'MartiÑ Thómpson'] assert o.title == u'Martins Test' @@ -87,8 +87,8 @@ def test(): assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3', u'B1', u'V1'] o.filenames = [u'test2.opensong'] + o.set_defaults() o.do_import() - # o.finish() o.print_song() assert o.copyright == u'2010 Martin Thompson' assert o.authors == [u'Martin Thompson'] @@ -106,8 +106,8 @@ def test(): assert o.verse_order_list == [u'V1', u'V2', u'B1', u'C1', u'C2'] o.filenames = [u'test3.opensong'] + o.set_defaults() o.do_import() - # o.finish() o.print_song() assert o.copyright == u'2010' assert o.authors == [u'Martin Thompson'] From f82513f11d77aebb97e3530eadf663f6e1897b66 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 6 Sep 2010 22:33:28 +0200 Subject: [PATCH 083/120] Finally done the openlp.org 1.x song importer. --- openlp/plugins/songs/lib/olp1import.py | 80 +++++++++++++--------- openlp/plugins/songs/lib/opensongimport.py | 17 +++-- openlp/plugins/songs/lib/songimport.py | 20 +++++- 3 files changed, 76 insertions(+), 41 deletions(-) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index ae386335a..ab3e0d720 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -58,40 +58,56 @@ class OpenLP1SongImport(SongImport): """ Run the import for an openlp.org 1.x song database. """ + # Connect to the database connection = sqlite.connect(self.import_source) cursor = connection.cursor() - cursor.execute(u'SELECT COUNT(authorid) FROM authors') - count = int(cursor.fetchone()[0]) + # Count the number of records we need to import, for the progress bar cursor.execute(u'SELECT COUNT(songid) FROM songs') count = int(cursor.fetchone()[0]) + success = True self.import_wizard.importProgressBar.setMaximum(count) - - old_cursor.execute(u'SELECT authorid AS id, authorname AS displayname FROM authors') - rows = old_cursor.fetchall() - if not debug and verbose: - print 'done.' - author_map = {} - for row in rows: - display_name = unicode(row[1], u'cp1252') - names = display_name.split(u' ') - first_name = names[0] - last_name = u' '.join(names[1:]) - if last_name is None: - last_name = u'' - sql_insert = u'INSERT INTO authors '\ - '(id, first_name, last_name, display_name) '\ - 'VALUES (NULL, ?, ?, ?)' - sql_params = (first_name, last_name, display_name) - if debug: - print '...', display_sql(sql_insert, sql_params) - elif verbose: - print '... importing "%s"' % display_name - new_cursor.execute(sql_insert, sql_params) - author_map[row[0]] = new_cursor.lastrowid - if debug: - print ' >>> authors.authorid =', row[0], 'authors.id =', author_map[row[0]] - - - cursor.execute(u'SELECT songid AS id, songtitle AS title, ' - u'lyrics || \'\' AS lyrics, copyrightinfo AS copyright FROM songs') - rows = cursor.fetchall() + # Import the songs + cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' + u'copyrightinfo FROM songs') + songs = cursor.fetchall() + for song in songs: + self.set_defaults() + if self.stop_import_flag: + success = False + break + song_id = song[0] + title = unicode(song[1], u'cp1252') + lyrics = unicode(song[2], u'cp1252') + copyright = unicode(song[3], u'cp1252') + self.import_wizard.incrementProgressBar( + unicode(translate('SongsPlugin.ImportWizardForm', + 'Importing %s...')) % title) + self.title = title + self.process_song_text(lyrics) + self.add_copyright(copyright) + cursor.execute(u'SELECT displayname FROM authors a ' + u'JOIN songauthors sa ON a.authorid = sa.authorid ' + u'WHERE sa.songid = %s' % song_id) + authors = cursor.fetchall() + for author in authors: + if self.stop_import_flag: + success = False + break + self.parse_author(unicode(author[0], u'cp1252')) + if self.stop_import_flag: + success = False + break + cursor.execute(u'SELECT fulltrackname FROM tracks t ' + u'JOIN songtracks st ON t.trackid = st.trackid ' + u'WHERE st.songid = %s ORDER BY st.listindex' % song_id) + tracks = cursor.fetchall() + for track in tracks: + if self.stop_import_flag: + success = False + break + self.add_media_file(unicode(track[0], u'cp1252')) + if self.stop_import_flag: + success = False + break + self.finish() + return success diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 5666fe0eb..f6048d566 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -116,10 +116,11 @@ class OpenSongImport(SongImport): opensong files. If `self.commit` is set False, the import will not be committed to the database (useful for test scripts). """ - success = False + success = True self.import_wizard.importProgressBar.setMaximum(len(self.filenames)) for filename in self.filenames: if self.stop_import_flag: + success = False break ext = os.path.splitext(filename)[1] if ext.lower() == u'.zip': @@ -130,24 +131,28 @@ class OpenSongImport(SongImport): len(z.infolist())) for song in z.infolist(): if self.stop_import_flag: + success = False break parts = os.path.split(song.filename) if parts[-1] == u'': #No final part => directory continue - self.import_wizard.incrementProgressBar(u'Importing %s...' \ - % parts[-1]) + self.import_wizard.incrementProgressBar( + unicode(translate('SongsPlugin.ImportWizardForm', + 'Importing %s...')) % parts[-1]) songfile = z.open(song) self.do_import_file(songfile) if self.commit: self.finish() self.set_defaults() if self.stop_import_flag: + success = False break else: log.info('Direct import %s', filename) - self.import_wizard.incrementProgressBar(u'Importing %s...' \ - % os.path.split(filename)[-1]) + self.import_wizard.incrementProgressBar( + unicode(translate('SongsPlugin.ImportWizardForm', + 'Importing %s...')) % os.path.split(filename)[-1]) file = open(filename) self.do_import_file(file) if self.commit: @@ -155,7 +160,7 @@ class OpenSongImport(SongImport): self.set_defaults() if not self.commit: self.finish() - + return success def do_import_file(self, file): """ diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 17000a2ba..ea763c1ee 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -30,7 +30,7 @@ from PyQt4 import QtCore from openlp.core.lib import Receiver, translate from openlp.plugins.songs.lib import VerseType -from openlp.plugins.songs.lib.db import Song, Author, Topic, Book +from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile from openlp.plugins.songs.lib.xml import SongXMLBuilder log = logging.getLogger(__name__) @@ -66,6 +66,7 @@ class SongImport(QtCore.QObject): self.ccli_number = u'' self.authors = [] self.topics = [] + self.media_files = [] self.song_book_name = u'' self.song_book_pub = u'' self.verse_order_list = [] @@ -76,7 +77,7 @@ class SongImport(QtCore.QObject): 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( 'SongsPlugin.SongImport', '\xa9')) - + def stop_import(self): """ Sets the flag for importers to stop their import @@ -184,6 +185,14 @@ class SongImport(QtCore.QObject): return self.authors.append(author) + def add_media_file(self, filename): + """ + Add a media file to the list + """ + if filename in self.media_files: + return + self.media_files.append(filename) + def add_verse(self, verse, versetag=None): """ Add a verse. This is the whole verse, lines split by \n @@ -279,11 +288,16 @@ class SongImport(QtCore.QObject): for authortext in self.authors: author = self.manager.get_object_filtered(Author, Author.display_name == authortext) - if author is None: + if not author: author = Author.populate(display_name = authortext, last_name=authortext.split(u' ')[-1], first_name=u' '.join(authortext.split(u' ')[:-1])) song.authors.append(author) + for filename in self.media_files: + media_file = self.manager.get_object_filtered(MediaFile, + MediaFile.file_name == filename) + if not media_file: + song.media_files.append(MediaFile.populate(file_name=filename)) if self.song_book_name: song_book = self.manager.get_object_filtered(Book, Book.name == self.song_book_name) From c25b0aa8ffc8a6ceaa25fab898b898f7587718d9 Mon Sep 17 00:00:00 2001 From: Martin Thompson Date: Mon, 6 Sep 2010 21:37:22 +0100 Subject: [PATCH 084/120] Test for multi character versetypes --- openlp/plugins/songs/lib/test/test.opensong | 13 ++++++++++++- .../plugins/songs/lib/test/test_opensongimport.py | 6 ++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/test/test.opensong b/openlp/plugins/songs/lib/test/test.opensong index 0390f99b2..c75951492 100644 --- a/openlp/plugins/songs/lib/test/test.opensong +++ b/openlp/plugins/songs/lib/test/test.opensong @@ -4,7 +4,7 @@ MartiÑ & Martin2 Thómpson 2010 Martin Thompson 1 - V1 C V2 C2 3a B1 V1 T U + V1 C V2 C2 3a B1 V1 T U Rap1 Rap2 Rap3 Blah @@ -47,6 +47,17 @@ [T] T Line 1 +[Rap] +1 Rap 1 Line 1 +2 Rap 2 Line 1 +1 Rap 1 Line 2 +2 Rap 2 Line 2 + +[rap3] + Rap 3 Line 1 + Rap 3 Line 2 + + [X] Unreferenced verse line 1 diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py index eabcce7e5..b503c65c5 100644 --- a/openlp/plugins/songs/lib/test/test_opensongimport.py +++ b/openlp/plugins/songs/lib/test/test_opensongimport.py @@ -63,8 +63,11 @@ def test(): assert [u'V1', u'v1 Line 1\nV1 Line 2'] in o.verses assert [u'V2', u'v2 Line 1\nV2 Line 2'] in o.verses assert [u'V3A', u'V3 Line 1\nV3 Line 2'] in o.verses + assert [u'RAP1', u'Rap 1 Line 1\nRap 1 Line 2'] in o.verses + assert [u'RAP2', u'Rap 2 Line 1\nRap 2 Line 2'] in o.verses + assert [u'RAP3', u'Rap 3 Line 1\nRap 3 Line 2'] in o.verses assert [u'X1', u'Unreferenced verse line 1'] in o.verses - assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3A', u'B1', u'V1', u'T1'] + assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3A', u'B1', u'V1', u'T1', u'RAP1', u'RAP2', u'RAP3'] assert o.ccli_number == u'Blah' assert o.topics == [u'TestTheme', u'TestAltTheme'] @@ -120,7 +123,6 @@ def test(): assert [u'V1', u'Line 1\nLine 2'] in o.verses print "Tests passed" - pass if __name__ == "__main__": test() From 63139e8c3b5491bdbf7f13650dccacdd69dacb4b Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 6 Sep 2010 22:41:11 +0200 Subject: [PATCH 085/120] Just check for the tracks table before importing from it. --- openlp/plugins/songs/lib/olp1import.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index ab3e0d720..968eac25c 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -97,15 +97,19 @@ class OpenLP1SongImport(SongImport): if self.stop_import_flag: success = False break - cursor.execute(u'SELECT fulltrackname FROM tracks t ' - u'JOIN songtracks st ON t.trackid = st.trackid ' - u'WHERE st.songid = %s ORDER BY st.listindex' % song_id) - tracks = cursor.fetchall() - for track in tracks: - if self.stop_import_flag: - success = False - break - self.add_media_file(unicode(track[0], u'cp1252')) + cursor.execute(u'SELECT name FROM sqlite_master ' + u'WHERE type = \'table\' NAME name = \'tracks\'') + table_list = cursor.fetchall() + if len(table_list) > 0: + cursor.execute(u'SELECT fulltrackname FROM tracks t ' + u'JOIN songtracks st ON t.trackid = st.trackid ' + u'WHERE st.songid = %s ORDER BY st.listindex' % song_id) + tracks = cursor.fetchall() + for track in tracks: + if self.stop_import_flag: + success = False + break + self.add_media_file(unicode(track[0], u'cp1252')) if self.stop_import_flag: success = False break From f30aecfd46b09eef2f7e3cc8f09110aa7efd037b Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 7 Sep 2010 00:02:48 +0200 Subject: [PATCH 086/120] A couple of bugfixes. --- openlp/plugins/songs/forms/songimportform.py | 15 ++++--- openlp/plugins/songs/lib/importer.py | 5 ++- openlp/plugins/songs/lib/olp1import.py | 43 ++++++++++++-------- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index f2a59ba81..0c58b8650 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -31,7 +31,6 @@ from PyQt4 import QtCore, QtGui from songimportwizard import Ui_SongImportWizard from openlp.core.lib import Receiver, SettingsManager, translate -#from openlp.core.utils import AppLocation from openlp.plugins.songs.lib.importer import SongFormat log = logging.getLogger(__name__) @@ -136,7 +135,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.openLP2BrowseButton.setFocus() return False elif source_format == SongFormat.OpenLP1: - if self.openSongFilenameEdit.text().isEmpty(): + if self.openLP1FilenameEdit.text().isEmpty(): QtGui.QMessageBox.critical(self, translate('SongsPlugin.ImportWizardForm', 'No openlp.org 1.x Song Database Selected'), @@ -292,7 +291,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): def onCCLIRemoveButtonClicked(self): self.removeSelectedItems(self.ccliFileListWidget) - + def onSongsOfFellowshipAddButtonClicked(self): self.getFiles( translate('SongsPlugin.ImportWizardForm', @@ -374,11 +373,11 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): importer = self.plugin.importSongs(SongFormat.OpenLP2, filename=unicode(self.openLP2FilenameEdit.text()) ) - #elif source_format == SongFormat.OpenLP1: - # # Import an openlp.org database - # importer = self.plugin.importSongs(SongFormat.OpenLP1, - # filename=unicode(self.field(u'openlp1_filename').toString()) - # ) + elif source_format == SongFormat.OpenLP1: + # Import an openlp.org database + importer = self.plugin.importSongs(SongFormat.OpenLP1, + filename=unicode(self.openLP1FilenameEdit.text()) + ) elif source_format == SongFormat.OpenLyrics: # Import OpenLyrics songs importer = self.plugin.importSongs(SongFormat.OpenLyrics, diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 5801ea44a..da9618ef2 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -26,6 +26,7 @@ from opensongimport import OpenSongImport from olpimport import OpenLPSongImport +from olp1import import OpenLP1SongImport try: from sofimport import SofImport from oooimport import OooImport @@ -61,6 +62,8 @@ class SongFormat(object): """ if format == SongFormat.OpenLP2: return OpenLPSongImport + if format == SongFormat.OpenLP1: + return OpenLP1SongImport elif format == SongFormat.OpenSong: return OpenSongImport elif format == SongFormat.SongsOfFellowship: @@ -70,7 +73,7 @@ class SongFormat(object): elif format == SongFormat.Generic: return OooImport elif format == SongFormat.CCLI: - return CCLIFileImport + return CCLIFileImport # else: return None diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 968eac25c..953b509b4 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -30,8 +30,7 @@ openlp.org 1.x song databases into the current installation database. import logging import sqlite -#from openlp.core.lib.db import BaseModel -from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile +from openlp.core.lib import translate from songimport import SongImport log = logging.getLogger(__name__) @@ -66,6 +65,12 @@ class OpenLP1SongImport(SongImport): count = int(cursor.fetchone()[0]) success = True self.import_wizard.importProgressBar.setMaximum(count) + # "cache" our list of authors + cursor.execute(u'SELECT authorid, authorname FROM authors') + authors = cursor.fetchall() + # "cache" our list of tracks + cursor.execute(u'SELECT trackid, fulltrackname FROM tracks') + tracks = cursor.fetchall() # Import the songs cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' u'copyrightinfo FROM songs') @@ -77,39 +82,43 @@ class OpenLP1SongImport(SongImport): break song_id = song[0] title = unicode(song[1], u'cp1252') - lyrics = unicode(song[2], u'cp1252') + lyrics = unicode(song[2], u'cp1252').replace(u'\r', u'') copyright = unicode(song[3], u'cp1252') self.import_wizard.incrementProgressBar( unicode(translate('SongsPlugin.ImportWizardForm', - 'Importing %s...')) % title) + 'Importing "%s"...')) % title) self.title = title self.process_song_text(lyrics) self.add_copyright(copyright) - cursor.execute(u'SELECT displayname FROM authors a ' - u'JOIN songauthors sa ON a.authorid = sa.authorid ' - u'WHERE sa.songid = %s' % song_id) - authors = cursor.fetchall() - for author in authors: + cursor.execute(u'SELECT authorid FROM songauthors ' + u'WHERE songid = %s' % song_id) + author_ids = cursor.fetchall() + for author_id in author_ids: if self.stop_import_flag: success = False break - self.parse_author(unicode(author[0], u'cp1252')) + for author in authors: + if author[0] == author_id[0]: + self.parse_author(unicode(author[1], u'cp1252')) + break if self.stop_import_flag: success = False break cursor.execute(u'SELECT name FROM sqlite_master ' - u'WHERE type = \'table\' NAME name = \'tracks\'') + u'WHERE type = \'table\' AND name = \'tracks\'') table_list = cursor.fetchall() if len(table_list) > 0: - cursor.execute(u'SELECT fulltrackname FROM tracks t ' - u'JOIN songtracks st ON t.trackid = st.trackid ' - u'WHERE st.songid = %s ORDER BY st.listindex' % song_id) - tracks = cursor.fetchall() - for track in tracks: + cursor.execute(u'SELECT trackid FROM songtracks ' + u'WHERE songid = %s ORDER BY listindex' % song_id) + track_ids = cursor.fetchall() + for track_id in track_ids: if self.stop_import_flag: success = False break - self.add_media_file(unicode(track[0], u'cp1252')) + for track in tracks: + if track[0] == track_id[0]: + self.add_media_file(unicode(track[1], u'cp1252')) + break if self.stop_import_flag: success = False break From 4c648f142c3efdd703fcbfbf422bb6e8232cfe7b Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 7 Sep 2010 17:12:47 +0100 Subject: [PATCH 087/120] Fix song editing display bug Fixes: https://launchpad.net/bugs/630247 --- openlp/plugins/songs/forms/editsongform.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 9d96beb06..458e7200c 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -274,7 +274,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): item = self.VerseListWidget.item(row, 0) data = unicode(item.data(QtCore.Qt.UserRole).toString()) bit = data.split(u':') - rowTag = u'%s\n%s' % (bit[0][0:1], bit[1]) + rowTag = u'%s%s' % (bit[0][0:1], bit[1]) rowLabel.append(rowTag) self.VerseListWidget.setVerticalHeaderLabels(rowLabel) @@ -395,9 +395,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.VerseDeleteButton.setEnabled(True) def onVerseAddButtonClicked(self): - # Allow insert button as you do not know if multiple verses will - # be entered. - self.verse_form.setVerse(u'') + self.verse_form.setVerse(u'', True) if self.verse_form.exec_(): afterText, verse, subVerse = self.verse_form.getVerse() data = u'%s:%s' % (verse, subVerse) From 7c2da6e2e3199b23c516a92db2ea5f847b746b23 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 7 Sep 2010 22:42:33 +0200 Subject: [PATCH 088/120] Added a global exception catcher, so that our poor n00bs can see what happened. --- openlp.pyw | 11 ++- openlp/core/ui/exceptiondialog.py | 82 ++++++++++++++++++ openlp/core/ui/exceptionform.py | 38 +++++++++ resources/forms/exceptiondialog.ui | 130 +++++++++++++++++++++++++++++ resources/images/exception.png | Bin 0 -> 1709 bytes resources/images/openlp-2.qrc | 1 + 6 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 openlp/core/ui/exceptiondialog.py create mode 100644 openlp/core/ui/exceptionform.py create mode 100644 resources/forms/exceptiondialog.ui create mode 100644 resources/images/exception.png diff --git a/openlp.pyw b/openlp.pyw index dfe973ceb..805181c11 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -29,12 +29,14 @@ import os import sys import logging from optparse import OptionParser +from traceback import format_exception from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow +from openlp.core.ui.exceptionform import ExceptionForm from openlp.core.ui import SplashScreen, ScreenList from openlp.core.utils import AppLocation, LanguageManager, VersionThread @@ -144,6 +146,13 @@ class OpenLP(QtGui.QApplication): VersionThread(self.mainWindow, app_version).start() return self.exec_() + def hookException(self, exctype, value, traceback): + if not hasattr(self, u'exceptionForm'): + self.exceptionForm = ExceptionForm(self.mainWindow) + self.exceptionForm.exceptionTextEdit.setPlainText( + ''.join(format_exception(exctype, value, traceback))) + self.exceptionForm.exec_() + def main(): """ The main function which parses command line options and then runs @@ -194,7 +203,7 @@ def main(): language = LanguageManager.get_language() appTranslator = LanguageManager.get_translator(language) app.installTranslator(appTranslator) - + sys.excepthook = app.hookException sys.exit(app.run()) if __name__ == u'__main__': diff --git a/openlp/core/ui/exceptiondialog.py b/openlp/core/ui/exceptiondialog.py new file mode 100644 index 000000000..28097e938 --- /dev/null +++ b/openlp/core/ui/exceptiondialog.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program 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; version 2 of the License. # +# # +# This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate + +class Ui_ExceptionDialog(object): + def setupUi(self, exceptionDialog): + exceptionDialog.setObjectName(u'exceptionDialog') + exceptionDialog.resize(580, 407) + self.exceptionLayout = QtGui.QVBoxLayout(exceptionDialog) + self.exceptionLayout.setSpacing(8) + self.exceptionLayout.setMargin(8) + self.exceptionLayout.setObjectName(u'exceptionLayout') + self.messageLayout = QtGui.QHBoxLayout() + self.messageLayout.setSpacing(0) + self.messageLayout.setContentsMargins(0, -1, 0, -1) + self.messageLayout.setObjectName(u'messageLayout') + self.bugLabel = QtGui.QLabel(exceptionDialog) + self.bugLabel.setMinimumSize(QtCore.QSize(64, 64)) + self.bugLabel.setMaximumSize(QtCore.QSize(64, 64)) + self.bugLabel.setText(u'') + self.bugLabel.setPixmap(QtGui.QPixmap(u':/graphics/exception.png')) + self.bugLabel.setAlignment(QtCore.Qt.AlignCenter) + self.bugLabel.setObjectName(u'bugLabel') + self.messageLayout.addWidget(self.bugLabel) + self.messageLabel = QtGui.QLabel(exceptionDialog) + self.messageLabel.setWordWrap(True) + self.messageLabel.setObjectName(u'messageLabel') + self.messageLayout.addWidget(self.messageLabel) + self.exceptionLayout.addLayout(self.messageLayout) + self.exceptionTextEdit = QtGui.QPlainTextEdit(exceptionDialog) + self.exceptionTextEdit.setReadOnly(True) + self.exceptionTextEdit.setBackgroundVisible(False) + self.exceptionTextEdit.setObjectName(u'exceptionTextEdit') + self.exceptionLayout.addWidget(self.exceptionTextEdit) + self.exceptionButtonBox = QtGui.QDialogButtonBox(exceptionDialog) + self.exceptionButtonBox.setOrientation(QtCore.Qt.Horizontal) + self.exceptionButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Close) + self.exceptionButtonBox.setObjectName(u'exceptionButtonBox') + self.exceptionLayout.addWidget(self.exceptionButtonBox) + + self.retranslateUi(exceptionDialog) + QtCore.QObject.connect(self.exceptionButtonBox, + QtCore.SIGNAL(u'accepted()'), exceptionDialog.accept) + QtCore.QObject.connect(self.exceptionButtonBox, + QtCore.SIGNAL(u'rejected()'), exceptionDialog.reject) + QtCore.QMetaObject.connectSlotsByName(exceptionDialog) + + def retranslateUi(self, exceptionDialog): + exceptionDialog.setWindowTitle( + translate('OpenLP.ExceptionDialog', 'Error Occured')) + self.messageLabel.setText(translate('OpenLP.ExceptionDialog', 'Oops! ' + 'OpenLP hit a problem, and couldn\'t recover. The text in the box ' + 'below contains information that might be helpful to the OpenLP ' + 'developers, so please e-mail it to bugs@openlp.org, along with a ' + 'detailed description of what you were doing when the problem ' + 'occurred.')) diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py new file mode 100644 index 000000000..d181ad0d1 --- /dev/null +++ b/openlp/core/ui/exceptionform.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program 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; version 2 of the License. # +# # +# This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from exceptiondialog import Ui_ExceptionDialog +from openlp.core.lib import translate + +class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): + """ + The exception dialog + """ + def __init__(self, parent): + QtGui.QDialog.__init__(self, parent) + self.setupUi(self) diff --git a/resources/forms/exceptiondialog.ui b/resources/forms/exceptiondialog.ui new file mode 100644 index 000000000..f6f15cdc7 --- /dev/null +++ b/resources/forms/exceptiondialog.ui @@ -0,0 +1,130 @@ + + + ExceptionDialog + + + + 0 + 0 + 580 + 407 + + + + Dialog + + + + 8 + + + 8 + + + + + 0 + + + 0 + + + 0 + + + + + + 64 + 64 + + + + + 64 + 64 + + + + + + + :/graphics/exception.png + + + Qt::AlignCenter + + + + + + + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. + + + true + + + + + + + + + true + + + false + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + + + + exceptionButtonBox + accepted() + ExceptionDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + exceptionButtonBox + rejected() + ExceptionDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/resources/images/exception.png b/resources/images/exception.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ace707e3a21503efe02b1b32cd913926c7dc92 GIT binary patch literal 1709 zcmV;e22%NnP)4Q?BA8iq7DN{gO5vCY)0y>mQ z)D02iOs2%mq0@yaS+dQM83P$QBb#m-W`fz&jYNUCI3FzX z=*#-C(Jf$XtC=xRY;5cX^rhh>ATbyW>r^V0KZ~)EWeP>PiLp|f&6cdw>0Bv{&7IEJ z!VHzlhDc3C1Xf{AL^uhk1wrV<;st!CGHJw~(n8}&hdt_Fk6`L9&QYGkcmp7{+wIF8 z4##dT+OQEY8jZ0&pRWyznwqxf9sX#ga3?EZC51vxYL%Q)y-~D!p}2cfjqojO9hsS# z?VNPj2t-9iMSH#8wOi}#2YS1P)23P@Ii1cBqNAfpuh-L(A~F5(i_)adB~>F%%wd*oQUYtb|gCudG6$-d<`l_ZC=fRG22vl&oPi(wj&l zye`TQIw?2FP6b9Iy{0$bFPAAl0a^D`6X0Ql^NI;--SxvFO>ZX?)8CkKBVJ9vADT*I zGXpdx7@*eAUZ8*Mdb-LO-izooQ}&LHvYy6q%y`ss9L#wn&izD-#d5P%q`iC|3txiy zHQ+jOp6B;dYHBKFWMoh#+8aUw-B78i3-2$=6trKYIhT@>asq3lJP`pNa+J}@C@|G- zxBJs~WV(&Z9PzZtV!`g<9J#)`>@9kuq=b@^k_dvM;b?EArPIx5dx&78+fBP-T@Nax z+Ep4bO6YHRr36CVeL(UyTRPXUK4=8HXrc*eAG|uIsKP3|C76iJ#b0>9d*+Nqi zJv1{gifXemsb_2!-F6CeS|+FD`7gkc!bLQ0uYo2RtQ%MgZb*@zVQ{ zkiODn{>$U>P!`mFh38+braSosbY;Q#h4+f|+zHE}pK6M3fF&6fXMC zGyK=STNFP#V0%&#T35vjx1Ym;U*eo!hIyA*LN^_;bSZHdH76v{nVcNz$$p-?l6}+- zZEzuO07(InYEAK9#2UsSpMo^TTtB+qy=NmLs5LT@@^Q@K%x0QtFj5=Z-DV4Q_)}>+ zLLY;EItXyP2y>H2TjQL35e5y zQjAI&dY6Er)QM#~VRI@wyT`_u`DyBap=CtcwKk208X-Vl^C417M2MG4rL+sv&!IX- zqYt5l-r0Z)7(WZ$v;~44T!c?UK-u8)9ci}P=^#uO!7JqYc_SkuF?j{zl|TW}&O1kVrL zxz%drYlw$JK#%fy1g)Zo$;$l>M<~xZ*x@=%n-Ax&Si?`*K{(iH{QjQJ?d{z-<5t$K(7HGLRkr^Gxv{q8E~v7}tO&00000NkvXXu0mjf DNC^_> literal 0 HcmV?d00001 diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc index c9277c3cf..78d74cf7e 100644 --- a/resources/images/openlp-2.qrc +++ b/resources/images/openlp-2.qrc @@ -62,6 +62,7 @@ openlp-logo-256x256.png + exception.png openlp-about-logo.png openlp-splash-screen.png From fa45204b0c148a54516fe3a3755875933532e344 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 8 Sep 2010 18:26:13 +0200 Subject: [PATCH 089/120] Fixed up the resources patch, and regenerated the resources file. --- scripts/resources.patch | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/resources.patch b/scripts/resources.patch index ba85a157c..cfcf4e37e 100644 --- a/scripts/resources.patch +++ b/scripts/resources.patch @@ -1,6 +1,6 @@ --- openlp/core/resources.py.old Mon Jun 21 23:16:19 2010 +++ openlp/core/resources.py Mon Jun 21 23:27:48 2010 -@@ -1,10 +1,31 @@ +@@ -1,10 +1,32 @@ # -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 @@ -14,8 +14,9 @@ +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # -+# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin # -+# Thompson, Jon Tibble, Carsten Tinggaard # ++# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # ++# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # ++# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program 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 # From cfca50ff2578fd9deeea07542eff67555604956b Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 8 Sep 2010 18:51:19 +0100 Subject: [PATCH 090/120] Fix setText bug when null list item Fixes: https://launchpad.net/bugs/632674 --- openlp/core/ui/plugindialog.py | 1 - openlp/core/ui/pluginform.py | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/plugindialog.py b/openlp/core/ui/plugindialog.py index a4256c0e5..9d12651c9 100644 --- a/openlp/core/ui/plugindialog.py +++ b/openlp/core/ui/plugindialog.py @@ -93,7 +93,6 @@ class Ui_PluginViewDialog(object): self.pluginListButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) self.pluginListButtonBox.setObjectName(u'pluginListButtonBox') self.pluginLayout.addWidget(self.pluginListButtonBox) - self.retranslateUi(pluginViewDialog) QtCore.QObject.connect(self.pluginListButtonBox, QtCore.SIGNAL(u'accepted()'), pluginViewDialog.close) diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index c0fd53938..8bf490f85 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -134,5 +134,6 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): elif self.activePlugin.status == PluginStatus.Disabled: status_text = unicode( translate('OpenLP.PluginForm', '%s (Disabled)')) - self.pluginListWidget.currentItem().setText( - status_text % self.activePlugin.name) + if self.pluginListWidget.currentItem(): + self.pluginListWidget.currentItem().setText( + status_text % self.activePlugin.name) From b39136782e35fee9b72c5c964e2cb4ff5d922780 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 8 Sep 2010 19:00:48 +0100 Subject: [PATCH 091/120] Quick hack to get songs back --- openlp/core/lib/htmlbuilder.py | 1 + openlp/plugins/songs/lib/olp1import.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index acf00bdeb..0d6482797 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -519,6 +519,7 @@ def build_footer_css(item): font-size: %spt; color: %s; text-align: %s; + vertical-align: bottom; """ theme = item.themedata if not theme or not item.footer: diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 953b509b4..51e3e1fbf 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -28,7 +28,10 @@ The :mod:`olp1import` module provides the functionality for importing openlp.org 1.x song databases into the current installation database. """ import logging -import sqlite +try: + import sqlite +except: + pass from openlp.core.lib import translate from songimport import SongImport From ccb75ad3b6ca7bed5a9c017406c5320f7b636819 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 8 Sep 2010 19:12:16 +0100 Subject: [PATCH 092/120] Fix display to work on 1024x768 resolution without nasty slider movements Fixes: https://launchpad.net/bugs/594808 --- openlp/core/lib/htmlbuilder.py | 1 - openlp/core/ui/slidecontroller.py | 14 ++------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 0d6482797..acf00bdeb 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -519,7 +519,6 @@ def build_footer_css(item): font-size: %spt; color: %s; text-align: %s; - vertical-align: bottom; """ theme = item.themedata if not theme or not item.footer: diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 5d688b890..2ea985598 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -162,11 +162,6 @@ class SlideController(QtGui.QWidget): sizeToolbarPolicy.setHeightForWidth( self.Toolbar.sizePolicy().hasHeightForWidth()) self.Toolbar.setSizePolicy(sizeToolbarPolicy) -# if self.isLive: -# self.Toolbar.addToolbarButton( -# u'First Slide', u':/slides/slide_first.png', -# translate('OpenLP.SlideController', 'Move to first'), -# self.onSlideSelectedFirst) self.Toolbar.addToolbarButton( u'Previous Slide', u':/slides/slide_previous.png', translate('OpenLP.SlideController', 'Move to previous'), @@ -175,11 +170,6 @@ class SlideController(QtGui.QWidget): u'Next Slide', u':/slides/slide_next.png', translate('OpenLP.SlideController', 'Move to next'), self.onSlideSelectedNext) -# if self.isLive: -# self.Toolbar.addToolbarButton( -# u'Last Slide', u':/slides/slide_last.png', -# translate('OpenLP.SlideController', 'Move to last'), -# self.onSlideSelectedLast) if self.isLive: self.Toolbar.addToolbarSeparator(u'Close Separator') self.HideMenu = QtGui.QToolButton(self.Toolbar) @@ -279,11 +269,11 @@ class SlideController(QtGui.QWidget): if isLive: self.SongMenu = QtGui.QToolButton(self.Toolbar) self.SongMenu.setText(translate('OpenLP.SlideController', - 'Go to Verse')) + 'Go to')) self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup) self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu) self.SongMenu.setMenu(QtGui.QMenu( - translate('OpenLP.SlideController', 'Go to Verse'), + translate('OpenLP.SlideController', 'Go to'), self.Toolbar)) self.Toolbar.makeWidgetsInvisible([u'Song Menu']) # Screen preview area From 3bfea1c7150ee1f6bedb461ab690ee6f1794f344 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 8 Sep 2010 20:36:39 +0100 Subject: [PATCH 093/120] Proper fix for 632674 --- openlp/core/ui/pluginform.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index 8bf490f85..a8e93bb86 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -58,6 +58,9 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): Load the plugin details into the screen """ self.pluginListWidget.clear() + self.programaticChange = True + self._clearDetails() + self.programaticChange = True for plugin in self.parent.plugin_manager.plugins: item = QtGui.QListWidgetItem(self.pluginListWidget) # We do this just to make 100% sure the status is an integer as @@ -134,6 +137,5 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): elif self.activePlugin.status == PluginStatus.Disabled: status_text = unicode( translate('OpenLP.PluginForm', '%s (Disabled)')) - if self.pluginListWidget.currentItem(): - self.pluginListWidget.currentItem().setText( - status_text % self.activePlugin.name) + self.pluginListWidget.currentItem().setText( + status_text % self.activePlugin.name) From 58dc96b12410640dd5cccb92b4788e8aecf497e8 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 8 Sep 2010 22:55:24 +0100 Subject: [PATCH 094/120] Anchor footer from bottom, and prevent footer line wrapping --- openlp/core/lib/htmlbuilder.py | 20 ++++++++------------ openlp/core/lib/theme.py | 4 ++-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index acf00bdeb..2d18c7a68 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -279,7 +279,7 @@ def build_html(item, screen, alert, islive): html = HTMLSRC % (build_background_css(item, width, height), width, height, build_alert_css(alert, width), - build_footer_css(item), + build_footer_css(item, height), build_lyrics_css(item, webkitvers), u'true' if theme and theme.display_slideTransition and islive \ else u'false', @@ -503,7 +503,7 @@ def build_lyrics_html(item, webkitvers): u'class="lyricscell lyricsmain">
' return lyrics -def build_footer_css(item): +def build_footer_css(item, height): """ Build the display of the item footer @@ -512,26 +512,22 @@ def build_footer_css(item): """ style = """ left: %spx; - top: %spx; + bottom: %spx; width: %spx; height: %spx; font-family: %s; font-size: %spt; color: %s; - text-align: %s; + text-align: left; + white-space:nowrap; """ theme = item.themedata if not theme or not item.footer: return u'' - if theme.display_horizontalAlign == 2: - align = u'center' - elif theme.display_horizontalAlign == 1: - align = u'right' - else: - align = u'left' - lyrics_html = style % (item.footer.x(), item.footer.y(), + bottom = height - int(item.footer.y()) - int(item.footer.height()) + lyrics_html = style % (item.footer.x(), bottom, item.footer.width(), item.footer.height(), theme.font_footer_name, - theme.font_footer_proportion, theme.font_footer_color, align) + theme.font_footer_proportion, theme.font_footer_color) return lyrics_html def build_alert_css(alertTab, width): diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index 50894cc47..ee3418dca 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -56,7 +56,7 @@ BLANK_THEME_XML = \ Normal False 0 - + Arial @@ -65,7 +65,7 @@ BLANK_THEME_XML = \ Normal False 0 - + True From dd2136774b231de26667c4bbd9fc7aa425fdde75 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 9 Sep 2010 08:30:14 +0100 Subject: [PATCH 095/120] Remove height, so fix actually works --- openlp/core/lib/htmlbuilder.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 2d18c7a68..7f4fc5082 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -514,7 +514,6 @@ def build_footer_css(item, height): left: %spx; bottom: %spx; width: %spx; - height: %spx; font-family: %s; font-size: %spt; color: %s; @@ -526,7 +525,7 @@ def build_footer_css(item, height): return u'' bottom = height - int(item.footer.y()) - int(item.footer.height()) lyrics_html = style % (item.footer.x(), bottom, - item.footer.width(), item.footer.height(), theme.font_footer_name, + item.footer.width(), theme.font_footer_name, theme.font_footer_proportion, theme.font_footer_color) return lyrics_html From efd4b77ef80cfb5b63cf746674b15f511684188e Mon Sep 17 00:00:00 2001 From: Derek Scotney Date: Thu, 9 Sep 2010 20:30:25 +0200 Subject: [PATCH 096/120] All verse types have auto numbering --- openlp/plugins/songs/lib/songimport.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index ea763c1ee..8d29a73a2 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -73,6 +73,11 @@ class SongImport(QtCore.QObject): self.verses = [] self.versecount = 0 self.choruscount = 0 + self.bridgecount = 0 + self.introcount = 0 + self.prechoruscount = 0 + self.endingcount = 0 + self.othercount = 0 self.copyright_string = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( @@ -212,6 +217,26 @@ class SongImport(QtCore.QObject): self.choruscount += 1 if versetag == u'C': versetag += unicode(self.choruscount) + if versetag.startswith(u'B'): + self.bridgecount += 1 + if versetag == u'B': + versetag += unicode(self.bridgecount) + if versetag.startswith(u'I'): + self.introcount += 1 + if versetag == u'I': + versetag += unicode(self.introcount) + if versetag.startswith(u'P'): + self.prechoruscount += 1 + if versetag == u'P': + versetag += unicode(self.prechoruscount) + if versetag.startswith(u'E'): + self.endingcount += 1 + if versetag == u'E': + versetag += unicode(self.endingcount) + if versetag.startswith(u'O'): + self.othercount += 1 + if versetag == u'O': + versetag += unicode(self.othercount) self.verses.append([versetag, verse.rstrip()]) self.verse_order_list.append(versetag) if versetag.startswith(u'V') and self.contains_verse(u'C1'): From 81a1cfc81525b1f62ff94d5d75572ee43db05ed8 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 9 Sep 2010 20:34:45 +0100 Subject: [PATCH 097/120] Tidy up versetag counting --- openlp/plugins/songs/lib/songimport.py | 45 ++++++-------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 8d29a73a2..30c1865a7 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -71,13 +71,7 @@ class SongImport(QtCore.QObject): self.song_book_pub = u'' self.verse_order_list = [] self.verses = [] - self.versecount = 0 - self.choruscount = 0 - self.bridgecount = 0 - self.introcount = 0 - self.prechoruscount = 0 - self.endingcount = 0 - self.othercount = 0 + self.versecounts = {} self.copyright_string = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( @@ -198,7 +192,7 @@ class SongImport(QtCore.QObject): return self.media_files.append(filename) - def add_verse(self, verse, versetag=None): + def add_verse(self, verse, versetag=u'V'): """ Add a verse. This is the whole verse, lines split by \n Verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the verses/ @@ -210,33 +204,14 @@ class SongImport(QtCore.QObject): if oldverse.strip() == verse.strip(): self.verse_order_list.append(oldversetag) return - if versetag == u'V' or not versetag: - self.versecount += 1 - versetag = u'V' + unicode(self.versecount) - if versetag.startswith(u'C'): - self.choruscount += 1 - if versetag == u'C': - versetag += unicode(self.choruscount) - if versetag.startswith(u'B'): - self.bridgecount += 1 - if versetag == u'B': - versetag += unicode(self.bridgecount) - if versetag.startswith(u'I'): - self.introcount += 1 - if versetag == u'I': - versetag += unicode(self.introcount) - if versetag.startswith(u'P'): - self.prechoruscount += 1 - if versetag == u'P': - versetag += unicode(self.prechoruscount) - if versetag.startswith(u'E'): - self.endingcount += 1 - if versetag == u'E': - versetag += unicode(self.endingcount) - if versetag.startswith(u'O'): - self.othercount += 1 - if versetag == u'O': - versetag += unicode(self.othercount) + if versetag[0] in self.versecounts: + self.versecounts[versetag[0]] += 1 + else: + self.versecounts[versetag[0]] = 1 + if len(versetag) == 1: + versetag += unicode(self.versecounts[versetag[0]]) + elif int(versetag[1:]) > self.versecounts[versetag[0]]: + self.versecounts[versetag[0]] = int(versetag[1:]) self.verses.append([versetag, verse.rstrip()]) self.verse_order_list.append(versetag) if versetag.startswith(u'V') and self.contains_verse(u'C1'): From d549935fa87fdbfef9f80fdfb546915e53685e59 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 10 Sep 2010 18:49:22 +0100 Subject: [PATCH 098/120] Bug 634771 - Check for no recent files --- openlp/core/ui/servicemanager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index c7d3c497f..b6b915b7f 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -632,6 +632,8 @@ class ServiceManager(QtGui.QWidget): def onLoadService(self, lastService=False): if lastService: + if not self.parent.recentFiles: + return filename = self.parent.recentFiles[0] else: filename = QtGui.QFileDialog.getOpenFileName( From 0412fca642a0cdc890d4b4f80acb7b9ad8e935d1 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 11 Sep 2010 13:42:50 +0100 Subject: [PATCH 099/120] Remove execuitable flag --- openlp/plugins/remotes/html/jquery.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 openlp/plugins/remotes/html/jquery.js diff --git a/openlp/plugins/remotes/html/jquery.js b/openlp/plugins/remotes/html/jquery.js old mode 100755 new mode 100644 From 8d51128e0cc8358779cee5a41637abaf5b775493 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 11 Sep 2010 15:03:10 +0100 Subject: [PATCH 100/120] Fix translation code to find qm files --- openlp/core/utils/languagemanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 275d6985b..1aacbfa5d 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -66,7 +66,7 @@ class LanguageManager(object): Find all available language files in this OpenLP install """ trans_dir = AppLocation.get_directory(AppLocation.AppDir) - trans_dir = QtCore.QDir(os.path.join(trans_dir, u'resources', u'i18n')) + trans_dir = QtCore.QDir(os.path.join(trans_dir,u'openlp', u'i18n')) file_names = trans_dir.entryList(QtCore.QStringList("*.qm"), QtCore.QDir.Files, QtCore.QDir.Name) for name in file_names: From 7b46f33cdea1004f0476dd9b1e8a30f3dae5b183 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 11 Sep 2010 16:58:03 +0100 Subject: [PATCH 101/120] Space --- openlp/core/utils/languagemanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 1aacbfa5d..bcb16e7cc 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -66,7 +66,7 @@ class LanguageManager(object): Find all available language files in this OpenLP install """ trans_dir = AppLocation.get_directory(AppLocation.AppDir) - trans_dir = QtCore.QDir(os.path.join(trans_dir,u'openlp', u'i18n')) + trans_dir = QtCore.QDir(os.path.join(trans_dir, u'openlp', u'i18n')) file_names = trans_dir.entryList(QtCore.QStringList("*.qm"), QtCore.QDir.Files, QtCore.QDir.Name) for name in file_names: From c1ed2a76e2c0c2f5ee434d54742ec959bce461c7 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 11 Sep 2010 20:51:27 +0200 Subject: [PATCH 102/120] Detect v1.0 database at the beginning of the import, not half way through. Do some detection of the encoding. --- openlp/plugins/songs/lib/olp1import.py | 49 +++++++++++++++++++------- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 51e3e1fbf..0fc03a01d 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -28,6 +28,7 @@ The :mod:`olp1import` module provides the functionality for importing openlp.org 1.x song databases into the current installation database. """ import logging +import chardet try: import sqlite except: @@ -63,6 +64,11 @@ class OpenLP1SongImport(SongImport): # Connect to the database connection = sqlite.connect(self.import_source) cursor = connection.cursor() + # Determine if we're using a new or an old DB + cursor.execute(u'SELECT name FROM sqlite_master ' + u'WHERE type = \'table\' AND name = \'tracks\'') + table_list = cursor.fetchall() + new_db = len(table_list) > 0 # Count the number of records we need to import, for the progress bar cursor.execute(u'SELECT COUNT(songid) FROM songs') count = int(cursor.fetchone()[0]) @@ -71,9 +77,10 @@ class OpenLP1SongImport(SongImport): # "cache" our list of authors cursor.execute(u'SELECT authorid, authorname FROM authors') authors = cursor.fetchall() - # "cache" our list of tracks - cursor.execute(u'SELECT trackid, fulltrackname FROM tracks') - tracks = cursor.fetchall() + if new_db: + # "cache" our list of tracks + cursor.execute(u'SELECT trackid, fulltrackname FROM tracks') + tracks = cursor.fetchall() # Import the songs cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' u'copyrightinfo FROM songs') @@ -84,9 +91,22 @@ class OpenLP1SongImport(SongImport): success = False break song_id = song[0] - title = unicode(song[1], u'cp1252') - lyrics = unicode(song[2], u'cp1252').replace(u'\r', u'') - copyright = unicode(song[3], u'cp1252') + encoding = chardet.detect(song[1]) + if encoding[u'confidence'] < 0.9: + title = unicode(song[1], u'windows-1251') + else: + title = unicode(song[1], encoding[u'encoding']) + encoding = chardet.detect(song[2]) + if encoding[u'confidence'] < 0.9: + lyrics = unicode(song[2], u'windows-1251') + else: + lyrics = unicode(song[2], encoding[u'encoding']) + lyrics = lyrics.replace(u'\r', u'') + encoding = chardet.detect(song[3]) + if encoding[u'confidence'] < 0.9: + copyright = unicode(song[3], u'windows-1251') + else: + copyright = unicode(song[3], encoding[u'encoding']) self.import_wizard.incrementProgressBar( unicode(translate('SongsPlugin.ImportWizardForm', 'Importing "%s"...')) % title) @@ -102,15 +122,16 @@ class OpenLP1SongImport(SongImport): break for author in authors: if author[0] == author_id[0]: - self.parse_author(unicode(author[1], u'cp1252')) + encoding = chardet.detect(author[1]) + if encoding[u'confidence'] < 0.9: + self.parse_author(unicode(author[1], u'windows-1251')) + else: + self.parse_author(unicode(author[1], encoding[u'encoding'])) break if self.stop_import_flag: success = False break - cursor.execute(u'SELECT name FROM sqlite_master ' - u'WHERE type = \'table\' AND name = \'tracks\'') - table_list = cursor.fetchall() - if len(table_list) > 0: + if new_db: cursor.execute(u'SELECT trackid FROM songtracks ' u'WHERE songid = %s ORDER BY listindex' % song_id) track_ids = cursor.fetchall() @@ -120,7 +141,11 @@ class OpenLP1SongImport(SongImport): break for track in tracks: if track[0] == track_id[0]: - self.add_media_file(unicode(track[1], u'cp1252')) + encoding = chardet.detect(author[1]) + if encoding[u'confidence'] < 0.9: + self.add_media_file(unicode(track[1], u'windows-1251')) + else: + self.add_media_file(unicode(track[1], encoding[u'encoding'])) break if self.stop_import_flag: success = False From 0d36cba0bb5ccd021d9a4f4ccefb8e7fefa2c0e7 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 11 Sep 2010 22:40:14 +0100 Subject: [PATCH 103/120] Video background loop/change --- openlp/core/lib/htmlbuilder.py | 43 ++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 7f4fc5082..906ebb987 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -81,17 +81,14 @@ body {