diff --git a/.gitignore b/.gitignore index 4dad550c..aa63b736 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,7 @@ +deb_dist +build +dist .gitignore -data/ -perso/ -staging/ -utils/release.sh -utils/tarball.sh -utils/send.sh *~ *.aux *.sbd @@ -13,15 +10,6 @@ utils/send.sh *.sxc *.log *.out -*.d *.pdf *.pyc *.tar.gz -default.sb -default.tex -french.sb -english.sb -tmp.sb -utils/version.sh -/*.tex -/covers/ diff --git a/NEWS b/NEWS index 1a473109..21a6af78 100644 --- a/NEWS +++ b/NEWS @@ -1,806 +1,18 @@ +songbook 3.7.2 -version 3.7.2 + (Louis) Undocumented bug corrections and improvements. -Louis: -Narz: - Hubert-Félix Thiéfaine - Sweet amanit phalloide queen - Georges Brassens - Les trompettes de la renommée -Romain Goffe: -m@rco: - Hubert-Félix Thiéfaine - Alligators 427 - Thomas Fersen - Borborygmes - Thomas Fersen - Cosmos -spalax: +songbook 3.4.7 to 3.7.1 -version 3.7.1 - -JBB: - Buddy Holly - Everyday - Cranberries - Dreaming my dreams - Cranberries - Linger - Cranberries - No need to argue - Cranberries - Ode to my family - Daniel Powter - Bad day - Eddy Mitchell - La dernière séance - Grégoire - Toi + moi - Hoobastank - The reason - Joe Dassin - À toi - Kenny Rogers - The greatest - Monty Python - Always look on the bright side of life - Renaud - La médaille - Roch Voisine - La légende oochigeas - Suzanne Vega - Luka - Terry Bush - Maybe tomorrow -Romain Goffe: - Traditionnel - Sur le pont d'Avignon - Traditionnel - Il pleut bergère - -version 3.7.0 - -Alexandre Dupas: -Dominique Goffe: -Pipiou: - Charles Aznavour - Comme ils disent - Gilbert Bécaud - Et maintenant - Michel Polnareff - Goodbye Maryloo - Michel Polnareff - L'amour avec toi - Michel Polnareff - Lettre à France - Michel Polnareff - Love me, please love me -Romain Goffe: -broph: - Soan - En chemin - Axel Bauer - Éteins la lumière - Soan - The storm - Étienne Daho - Comme un boomerang -m@rco: - Hubert-Félix Thiéfaine - 542 lunes et 7 jours environ - Hubert-Félix Thiéfaine - Ad orgasmum aeternum - Hubert-Félix Thiéfaine - Autorisation de délirer - Hubert-Félix Thiéfaine - La dèche, le twist et le reste - Hubert-Félix Thiéfaine - La fille du coupeur de joints - Hubert-Félix Thiéfaine - La fin du Saint Empire Romain-germanique - Hubert-Félix Thiéfaine - La môme kaléidoscope - Hubert-Félix Thiéfaine - Le chant du fou - Hubert-Félix Thiéfaine - Lorelei Sebasto Cha - Hubert-Félix Thiéfaine - Maison Borniol - Mano Solo - Je suis venu vous voir - Mano Solo - Pas du gâteau - -version 3.6.7 - -Mickael Chazaux: - Jean-Jacques Goldman - Et l'on y peut rien -Olive: - Manu Chao - El viente -Pipiou: - Georges Brassens - L'orage -Romain Goffe: - Michael Jackson - We are the world - Crep - Ptit pingouin - Adele - Rolling in the deep -broph: - Pink Floyd - Comfortably numb - The Rolling Stones - Mother's little helper - Pink Floyd - Hey you - -version 3.6.6 - -Charles Flèche: - Noir Désir - Un jour en France - Creedence Clearwater Revival - Bad moon rising -Olive: - Manu chao - Bongo bong - Manu Chao - Je ne t'aime plus - Renaud - Morgane de toi - Les Ogres de Barback - Le voyageur - La Rue Kétanou - Où je vais -Romain Goffe: - John Denver - The last hobo - La chanson du dimanche - Super pouvoir d'achat - Georges Brassens - Quatre-vingt-quinze pour cent - -version 3.6.5 - -JBB: - 3 doors down - Here without you - Arlo Guthrie - Hobos lullaby - Ralph McTell - Streets of London - Raphael - Caravane -Romain Goffe: - Booze Brothers - I'm sorry - Charlie Winston - Like a hobo - Tom Petty - American girl -karagrat: - Les Innocents - Un homme extraordinaire - Balbino Medellin - Super héros - -version 3.6.4 - -Romain Goffe: - Green Day - Misery - Jacques Brel - Au suivant - Debout sur le zinc - Se dire adieu - Graeme Allwright - La ligne Holworth - La maison Tellier - Babouin - Antoine - Les élucubrations - Iggy Pop - In the death car - Vincent Malone - Bad Bili - Soul Asylum - Runaway train - Traditionnel - Greensleeves - Billy Ray Cyrus - Achy breaky heart - Bob Seger - Against the wind - Johnny Hallyday - Gabrielle - Yves Simon - Diabolo menthe -broph: - The Rolling Stones - Gimme shelter - Parabellum - La belle - Parabellum - Osmose 99 - -version 3.6.3 - -Alexandre Dupas: -Romain Goffe: - Karpatt - La chose qui dort dans mon lit - Bob Dylan - I want you - Pink Floyd - Another brick in the wall -broph: - Parabellum - Le dernier trocson - Noir Désir - Lola - Noir Désir - The holy economic war - Pink Floyd - Mother - REM - Losing my religion - -version 3.6.2 - -Alexandre Dupas: - Gotye - Somebody that I used to know -Romain Goffe: - Debout sur le zinc - Aller simple - Debout sur le zinc - Je cherche encore - HK & Les Saltimbanks - Indignez-vous - HK & Les Saltimbanks - Niquons la planète - Yves Jamait - Etc - Yves Jamait - Jean-Louis - The Beach Boys - Surfin' USA -olivier desrobert: - The Kingston Trio - Greenback dollar - -version 3.6.1 - -Romain Goffe: - Le Donjon de Naheulbeuk - Chicken quest - Le Donjon de Naheulbeuk - Crom - Le Donjon de Naheulbeuk - Hé, la petite dame - Le Donjon de Naheulbeuk - La hache Durandil - Le Donjon de Naheulbeuk - Le petit gobelin - Le Donjon de Naheulbeuk - Tralala du nain - Les Amis d'ta femme - Le tango du viagra -olivier desrobert: - Thomas Fersen - Au café de la paix - Thomas Fersen - Saint-Jean-du-Doigt - Renan Luce - Le Lacrymal Circus - Les Wriggles - Petit bonhomme - -version 3.6.0 - -Romain Goffe: - Bloodhound Gang - Fire water burn - Pascale Picard - Smilin' - Coluche - Sois fainéant -yoyoma: - Razorlight - America - U2 - One - America - A Horse With No Name - -version 3.5.9 - -broph: - Patrick Coutin - J'aime regarder les filles - Noir Désir - Où veux-tu que je regarde ? - Calvin RUssell - 5m2 - Dire Straits - Brothers in arms - Noir Désir - Toujours être ailleurs -Olivier Desrobert: - As de Trefle - Pauvre planete - As de trefle - La revolution - Les cowboys fringants - Hannah - Les Ogres de Barback - Rue Mazarine - -version 3.5.8 - -Kaosun: - As de Trèfle - À l'oreille de ta femme - As de Trefle - Pauvre planete - As de trefle - La revolution - Les cowboys fringants - Hannah -Romain Goffe: - Tournée Générale - Avancer mes grolles - -version 3.5.7 - -Hanarka: - Alain Souchon - La ballade de Jim - Francis Cabrel - Octobre - Maxime Le Forestier - Passer ma route - Alain Souchon - Sous les jupes des filles - Phil Barney - Un enfant de toi - Roch Voisine - Hélène - Téléphone - Le jour s'est levé -Romain Goffe: - Gerry Rafferty - To each and everyone - Le Donjon de Naheulbeuk - Maître du donjon -broph: - Jean-Jacques Goldman - On ira - -version 3.5.6 - -Hanarka: - Belyscendre - Hélas madame - Francis Cabrel - La corrida -Romain Goffe: - The Bloody Irish Boys - Drunk tonight - Jacques Dutronc - La fille du Père Noël -broph: - Calvin Russel - Down down down -Kaosun: - Debout sur le zinc - J'ai déjà donné - Debout sur le zinc - Comme un frisson - Debout sur le Zinc - Sur le fil - Debout sur le zinc - Elle m'ennuie - Debout sur le zinc - Les angles - -version 3.5.5 - -Kaosun: - Thomas Fersen - Bambi - Thomas Fersen - Croque - Thomas Fersen - Irène - Thomas Fersen - L'histoire d'une heure - Thomas Fersen - Les cravates - Thomas Fersen - Louise - Gary Jules - Mad world - Les Fatals Picards - Au mariage de Kévin et de ma soeur - Thomas Fersen - Rititi, ratata - Thomas Fersen - Le bouton - Anis - Dans tes yeux - Les Cowboys Fringants - Ces temps-ci - Le clandestin - Rue Grenelle - Jali - Española - La rue kétanou - Sao Loucas - Les Cowboys Fringants - 8 secondes - Debout sur le Zinc - Scylla -Romain Goffe: - Les Booze Brothers - Fields of Athenry - The Dubliners - The wild rover - -version 3.5.4 - -BeXa: - Jeanne Moreau - Les mots de rien - Israel Kamakawiwo - Over the rainbow - Francis Cabrel - Les vidanges du diable - Crash Test Dummies - mmmm - Compay Segundo - Chan Chan - Bill Withers - Just two of us - Louis Chedid - Tout le monde se presse - Ridan - Ulysse - Rose - La liste - Sixpence None the richer - Kiss me -Kaosun: - La Rue Kétanou - Bonhomme de chien - Soldat Louis - C'est un pays - Thomas Fersen - Deux pieds - Thomas Fersen - Diane de Poitiers - Thomas Fersen - Dugenou - Thomas Fersen - Le chat botté - Thomas Fersen - Les malheurs du lion - Thomas Fersen - Monsieur - Thomas Fersen - Que l'on est bete - -version 3.5.3 - -BeXa: - Vincent Delerm - La natation synchronisée -Kaosun: - Renaud - Ma gonzesse - Renaud - It is not because you are - Renaud - Je suis une bande de jeunes - Renaud - La chanson du loubard - Renaud - Mort les enfants - Thomas Fersen - Chocolat - Thomas Fersen - J'ai pas la gale - Thomas Fersen - La malle - Thomas Fersen - Le balafré - Thomas Fersen - Mon iguanodon - Thomas Fersen - Mon macabre - Thomas Fersen - Je suis au paradis - Thomas Fersen - Pégase - Thomas Fersen - Zaza - Thomas Fersen - Punaise -Matteo Cypriani: - Fleetwood Mac - Temporary One - Jean Leloup - Sang d'encre - Nirvana - Dumb -Romain Goffe: - Les Cowboys Fringants - Paris-Montréal - Les Cowboys Fringants - L'horloge - HK & Les Saltimbanks - On lâche rien - HK & Les Saltimbanks - Passer ma vie - HK & Les Saltimbanks - Citoyen du monde - Astérix et Cléopâtre - Le pudding à l'arsenic -broph: - Jean-Pierre Mader - Macumba - Noir Désir - Les écorchés - Louis Bertignac - Ces idées là  - Rita Mitsouko - C'est comme ça - Calvin Russel - Baby I love you - Calvin Russel - Crossroad - Calvin Russel - One meat ball - Eddy Mitchell - Il ne rentre pas ce soir - Jean-Jacques Goldman - Comme toi - Roger Glover - Love is all - Calvin Russel - Midnite man - -version 3.5.2 - -broph: - Noir Désir - Lazy - William Baldé - Rayon de soleil - -version 3.5.1 - -broph: - M - La Seine - Noir Désir - Charlie - Noir Désir - Elle va où elle veut - Noir Désir - Joey I - Noir Désir - La chaleur - Noir Désir - La rage - Noir Désir - Le fleuve - Noir Désir - Si rien ne bouge - Noir Désir - Tu m'donnes le mal - Pigalle - Le chaland - Eddy Mitchell - Pas de boogie woogie - Eddy Mitchell - Tu peux préparer le café noir - Georges Brassens - À l'ombre des maris - Georges Brassens - Supplique pour être enterré sur la plage de Sète - Jimi Hendrix - The wind cries Mary - Johnny Hallyday - Le pénitencier - Julien Doré - Kiss me forever - R.E.M. - Everybody hurts - Renaud - La ballade nord-irlandaise - Soan - Pas pour lui - Soan - Putain de ballerine - Stealers Wheel - Stuck in the middle with you - Téléphone - New York avec toi - -version 3.5.0 - -Matteo Cypriani: - Jean Leloup - Promeneur - Maxime Le Forestier - Parachutiste - Yves Simon - Les bateaux du métro - Soldat Louis - Du rhum des femmes - Soldat Louis - Tirer des caisses - Soldat Louis - Savannah - Thiéfaine - Sentiments numériques revisités - Leonard Cohen - Winter Lady - Leonard Cohen - A Bunch of Lonesome Heroes - Leonard Cohen - The Old Revolution - Jacques Higelin - Je ne peux plus dire je t'aime -Romain Goffe: - Ben E.King - Stand by me - Coldplay - Paradise - -version 3.4.8 - -Romain Goffe: - Gérald De Palmas - Sur la route - Tonton David - Chacun sa route - Les Hurlements d'Léo - La malle en mai - Philippe Chatel & Robert Charlebois - La compagnie des lapins bleus - Oldelaf - Les mains froides - Soggy Bottom Boys - I am a man of constant sorrow - Pierre Perret - Bernard Pivot - -version 3.4.7 - -Pipiou: - Lucienne Delyle - Mon amant de Saint-Jean - Francis Cabrel - L'encre de tes yeux - Daniel Guichard - Mon vieux - Soan - Emily -Romain Goffe: - Marie Cherrier - Les baleines - Marie Cherrier - Manouche + Mainly new songs in the data (which was included in songbook-core at this + time), and a few undocumented bug corrections and improvements. songbook (v0.8) - (various authors) Add songs - Alexandre Dupas: - Sheepbox - Not scared to die - Avenue Q - The internet is for porn - Johk - La reine de France - La Maison Tellier - La chambre rose - Lylloo - Ma soirée MSN - The Rolling Stones - You can't always get what you want - Outkast - Hey Ya - BeXa: - Alanis Morissette - Ironic - Alanis Morissette - Ironic - Benoit Gaüzère: - The Rolling Stones - Route 66 - Elvis Presley - Don't be cruel - Eddie Vedder - Guaranteed - The Beautiful Girls - La Mar - Dominique Goffe: - Graeme Allwright - Le jour de clarté - Hugues Aufray - Alouette - Hugues Aufray - Hasta Luego - Hugues Aufray - L'épervier - Jeanette - Porque te vas - Maxime Le Forestier - Je ne sais rien faire - Daniel Lanois - Jolie Louise - Grégoire Goffe: - Paco Ibanez - A galopar - Matthias Bussonnier: - Alex Beaupain - Je n'aime que toi - Pierre Caserta: - Oasis - I'm outta time - Red Hot Chili Peppers - By the time - Red Hot Chili Peppers - Californication - Red Hot Chili Peppers - Can't stop - Red Hot Chili Peppers - Dani California - Red Hot Chili Peppers - Road trippin' - Red Hot Chili Peppers - Under the bridge - Red Hot Chili Peppers - Snow - Elton John - Can you fell the love tonight? - Pipiou: - Matticus - Le p'tit gars - Bob Marley - Redemption song - Christophe - Les mots bleus - Pep's - Liberta - Alain Souchon - Bidon - Maxime Le Forestier - L'auto-stop - Édith Piaf - Padam-Padam - Maxime Le Forestier - Entre 14 et 40 ans - Maxime Le Forestier - Fontenay-aux-Roses - Catherine Le Forestier - La petite fugue - Tracy Chapman - Talkin' about the revolution - Jeanne Moreau - Le tourbillon de la vie - Charles Aznavour - Mes emmerdes - Oldelaf et Monsieur D - Super héros - Pigalle - Dans la salle du bar-tabac de la rue des martyrs - Renan Luce - La lettre - Renan Luce - Monsieur Marcel - Michel Fugain - Forteresse - Romain Goffe: - Antsy Pants - Vampire - Leonard Cohen - If it be your will - Bob Dylan - The times they are a-changin - Joan Baez - Here's to you - Joe Dassin - Les petits pains au chocolat - Renaud - Chanson pour Pierrot - Renaud - En cloque - The Doors - Light my fire - The Rolling Stones - Paint it black - The Rolling Stones - Angie - The Rolling Stones - Ruby Tuesday - Simon & Garfunkel - Me and Julio down by the schoolyard - Georges Brassens - À l'ombre du coeur de ma mie - Georges Brassens - Je me suis fait tout petit - Yuki Kajiura - Jr - Crep - Kartopo - Crep - Mélancolie - Crep - Les ptits chemins - Bobby McFerrin - Don't worry, be happy - Karpatt - Lino - Les Amis d'ta femme - Laisse tomber, gros - Mon côté punk - Youssef - The Nightwatchman - California's dark - Karpatt - Fan de maman - Karpatt - Soulève ta jupe - Gipsy Kings - Baila me - Gipsy Kings - Bamboleo - Debout sur le zinc - Le tanticide - Gogol Bordello - Alcohol - Boby Lapointe - Framboise - Boby Lapointe - Méli-Mélodie - Crep - Nostalgeek - Les Booze Brothers - I want sex - Dropkick Murphys - Dirty glass - The Pogues - The Irish Rover - Crep - Encore - La Rue Kétanou - Les tontons - Les VRP - Ramon Perez - Mes souliers sont rouges - Cahin-Caha - Mes souliers sont rouges - L'arbre est dans ses feuilles - Mes souliers sont rouges - Sortis du bois - Les Ogres de Barback - L'ennui et le jour - Gogol Bordello - Supertheory of supereverything - Tri Yann - Les filles de Redon - Tri Yann - Kiss the children for me Mary - Les Fatals Picards - Goldorak est mort - Charles Aznavour - Les comédiens - Matmatah - L'apologie - Philippe Lavil - Il tape sur des bambous - Les Ogres de Barback - Comment je suis devenu voyageur - Jean-Jacques Goldman - Le coureur - Bruce Springsteen - Old Dan Tucker - Renaud - La blanche - Renaud - Salut manouche - Pierre Perret - Les jolies colonies de vacances - The Connells - '74-'75 - Noir Désir - L'homme pressé - Noir Désir - Le vent nous portera - La Tête à Toto - Petit bonhomme - La Tête à Toto - Les projets - Renaud - C'est quand qu'on va où ? - Bruce Springsteen - Mrs McGrath - Henri Salvador - Une chanson douce - Nirvana - Come as you are - Michel Fugain - Je n'aurai pas le temps - Michel Fugain - Les Acadiens - Bob Dylan - One more cup of coffee - Johnny Cash - It ain't me, babe - Johnny Cash - I walk the line - Le Donjon de Naheulbeuk - Le laridé du poulet - Le Donjon de Naheulbeuk - Nanana de l'elfe - Cat Stevens - Wild world - Maxime Le Forestier - Mon frère - Loic Lantoine - Côté punk - Mon côté punk - Inch-Allah - Pierre Perret - Au café du canal - Pierre Perret - Mon p'tit loup - La Rue Kétanou - Almarita - Hugues Aufray - Céline - Hugues Aufray - Le jour où le bateau viendra - Hugues Aufray - Les couleurs - Hugues Aufray - Stewball - Les Ogres de Barback - Little gentleman - Les hurlements d'Léo - Une danseuse - Les hurlements d'Léo - À bout d'souffle - Jacques Brel - Amsterdam - Jacques Brel - Ces gens-là  - Jacques Brel - La valse à mille temps - Cookie Dingler - Femme libérée - Jacques Higelin - Poil dans la main - Jacques Higelin - Tombé du ciel - La Rue Kétanou - Personne n'a l'prénom d'ma femme - Les Innocents - L'autre finistère - Mes souliers sont rouges - Tape la galoche - Tit Patapons - Marchand de couleurs - Hervé Cristiani - Il est libre Max - Los Lobos - Rango theme song - Herman Düne - Tell me something I don't know - Herman Düne - Bristol - Herman Düne - Pure heart - Herman Düne - When the water gets cold - Herman Düne - Your name, my game - Elton John - Crocodile rock - Manau - La tribu de Dana - Daniel Balavoine - Vivre ou survivre - Vivre ou mourir - France Gall - Il jouait du piano debout - Louise Attaque - Je t'emmène au vent - Louise Attaque - Ton invitation - Crep - SNCeuFeu - Gérard Lenorman - La ballade des gens heureux - Gérard Lenorman - Si j'étais président - Les hurlements d'Léo - Fabulous and luxury holidays for todos in Barbados - Les blérots de R.A.V.E.L - Dans les gares - Les blérots de R.A.V.E.L - Le retour de Petrouchka - Les blérots de R.A.V.E.L - Les ptits plaisirs - Les hurlements d'Léo - Ici, d'ailleurs - François Corbier - Les vieux copains de la télé - Bob Dylan - Ballad of Hollis Brown - Bob Dylan - Don't think twice, it's all right - Emiliana Torrini - Jungle drum - Herman Düne - My friends kill my folks - Herman Düne - Be a doll and take my heart - Bob Dylan - Hurricane - Karpatt - Les vieilles - Cesaria Evora - Petit pays - Hugues Aufray - Le joueur de pipeau - Jean-Jacques Goldman - Il changeait la vie - Johnny Cash - Jackson - Johnny Cash - The ring of fire - Joe Dassin - Les Champs-Élysées - JCFrog - Je t'emmène dedans - JCFrog - La mauvaise eréputation - JCFrog - Russians - Sting - Russians - Elvis Presley - Love me tender - Traditionnel - L'homme de cromagnon - Jean-Jacques Goldman - Encore un matin - Georges Brassens - Chanson pour l'Auvergnat - La compagnie créole - Ça fait rire les oiseaux - La compagnie créole - La machine à danser - La compagnie créole - Le bal masqué - Karpatt - En pleine mer - Karpatt - Le déménagement - Les Fatals Picards - L'amour à la française - Les Fatals Picards - La sécurité de l'emploi - Joe Dassin - Ma bonne étoile - Julien Clerc - Travailler, c'est trop dur - Julien Clerc - Mélissa - Julien Clerc - Ce n'est rien - Laura Veirs - Ballad of John Vogelin - Laura Veirs - Jailhouse fire - Bob Marley - No woman, no cry - Laura Veirs - Black-eyed Susan - Téléphone - Cendrillon - Négresses vertes - Sous le soleil de Bodega - Yves Duteil - Le petit pont de bois - Oldelaf - Mamy blue - Christophe - Aline - Nino Ferrer - Mirza - Laura Veirs - Icebound stream - Herman's Hermits - No milk today - Oldelaf - Courseulles-sur-Mer - Oldelaf - Mon testament - Oldelaf - Vendredi - Oldelaf - Le monde est beau - Oldelaf et Monsieur D - Nous, les vedettes - Leonard Cohen - Suzanne - Les Fatals Picards - Mon père était tellement de gauche - Les Fatals Picards - Seul et célibataire - Damien Rice - Cannonball - Jean-Jacques Goldman - Long is the road - La crevette d'acier - Moi si un jour - Les Ogres de Barback - La gare de Caen - Boby Lapointe - Aragon et Castille - Francis Cabrel - Je t'aimais, je t'aime et je t'aimerai - Neil Young - Heart of gold - Green Day - Minority - Les Ogres de Barback - Touche pas à mon école - Yuki Kajiura - Vanity - Bruce Springsteen - John Henry - Gogol Bordello - Oh no - Dessins Animés - Boumbo - Dessins Animés - Denver, le dernier dinosaure - Dessins Animés - Dragon Ball - Dessins Animés - Dragon Ball Z - Dessins Animés - Les chevaliers du zodiaque - Dessins Animés - Lucky Luke - Dessins Animés - Sherlock Holmes - Debout sur le Zinc - Ma petite chérie - Les Cowboys Fringants - Quand tu pars - Gilles Servat - La blanche hermine - Édith Piaf - L'homme à la moto - Karpatt - Le fil - Le Donjon de Naheulbeuk - Marche barbare - Le Donjon de Naheulbeuk - Massacrons-nous dans la taverne - Maxime Le Forestier - Comme un arbre - Maxime Le Forestier - Le steak - Georges Brassens - Ballade des dames du temps jadis - Maxime Le Forestier - Éducation sentimentale - The mamas and the papas - California dream - Jean-Jacques Goldman - Je te donne - Traditionnel - V'la l'bon vent - Barbara - L'aigle noir - Les Ogres de Barback - Ma fille - Alain Souchon - L'amour à la machine - Fool's Garden - Lemon tree - The Innocence Mission - The lakes of Canada - Crep - Fichu doctorat - Crep - Soirée pépère - Crep - iScream - Crep - Bioman - Crep - Caliméro - Oldelaf - Michel - Karpatt - Histoires de famille + + Undocumented. songbook (v0.7) - (various authors) Add songs - Alexandre Dupas: - Alexis HK - Gaspard - The White Stripes - Well It's True That We Love One Another - Yodelice - Sunday with a flu - The Calling - Wherever you will go - The Nightwatchman - Let Freedom Ring - MC Solaar - Caroline - System of a Down - Roulette - The Fray - How to save a life - The Beatles - Twist and shout - John Lennon - Working Class Hero - Les Wriggles - Plouf - Dominique Goffe: - Mes souliers sont rouges - Le cycle du vin - Michel Sardou - Les lacs du Connemara - Dorian Goffe: - Le Donjon de Naheulbeuk - Geste héroïque - Jeanne Dupas: - AaRON - U-Turn - Ben Harper - Waiting on an angel - Pierre Caserta: - Alicia Keys - If I ain't got you - Jason Marz - I'm yours - Jack Johnson - Taylor - Romain Goffe: - The Beatles - Octopus Garden - Bob Dylan - Mr Tambourine Man - Cat Stevens - Here comes my baby - Cat Stevens - Father and Son - Karpatt - Des gnons pour des pelles - Karpatt - Les canards en plastique - Les Cowboys Fringants - 1994 - Les Ogres de Barback - Jojo - Simon & Garfunkel - April come she will - Simon & Garfunkel - Kathy's song - The Carpenters - Breaking up is hard to do - The Dubliners - Whiskey in the jar - Mes souliers sont rouges - Nuit humide - Ritchie Valens - Come on, let's go! - Claude Nougaro - Armstrong - Maxime Le Forestier - San Francisco - Simon & Garfunkel - Mrs. Robinson - Les Fatals Picards - La ferme - Beau Dommage - La complainte du phoque en Alaska - Anny et Jean-Marc Versini - La danse des esquimaux - Debout sur le Zinc - Poil aux yeux - Georges Brassens - Le petit cheval - Les ogres de barback - Le temps - Vincent Malone - L'escargot malheureux - Boby Lapointe - La maman des poissons - La Famille Maestro - Le rat de l'opéra - Jonathan Coulton - Still alive - Los Lobos - Cancion del Mariachi - Renaud - Société tu m'auras pas - Renaud - Amoureux de Paname - Henri Dès - Mon cheval gris - Henri Dès - Les bêtises à l'école - Le Donjon de Naheulbeuk - Noel en Mordor - Joe Dassin - La fleur aux dents - Pierre Bachelet - En l'an 2001 - Pierre Bachelet - Vingt ans - La Rue Kétanou - La chance - La Rue Kétanou - Les hommes que j'aime - Joe Dassin - Le moustique - Graeme Allwright - Henrik - Graeme Allwright - Le clochard américain - Hugues Aufray - Elle descend de la montagne - Traditionnel - Chevaliers de la table ronde - Hugues Aufray - Debout les gars - Indochine - L'aventurier - Indochine - J'ai demandé à la lune - Traditionnel - Vent frais - Traditionnel - La cucaracha - Parabellum - Saturnin - Dessins Animés - Inspecteur Gadget - Dessins Animés - L'oiseau bleu - Alain Souchon - Foule sentimentale - Les Ogres de Barback - Bumbaia - Francine Pohl - La sorcière Grabouilla - Francine Pohl - La sorcière Grabouilla - La Rue Kétanou - La fiancée de l'eau - Debout sur le Zinc - La déclaration - Debout sur le Zinc - Les mots d'amour - Les Ogres de Barback - Rue du temps - Les Amis d'ta femme - A las barricadas - Mes souliers sont rouges - Bassin d'Irlande - Debout sur le Zinc - Rester debout - Simon & Garfunkel - The only living boy in New-York - Les Cowboys Fringants - Plus rien - Les Cowboys Fringants - Plus rien - Maxime Le Forestier - La rouille - Les Petites Bourettes - Et si je t'aime - Les Cowboys Fringants - La bonne pomme - Les Cowboys Fringants - Entre deux taxis - Les Petites Bourrettes - Dans la tête - Les Petites Bourrettes - La vieille - As de Trêfle - Jessica - Le Colporteur - Comme on dit - Les Vieilles Valises - Émilie - Sansévérino - Dimanche dernier - I wanna be like you - La Rue Kétanou - Sur les chemins de la bohème - Louise Attaque - Les nuits parisiennes - Marie Laforêt - Ivan, Boris et moi - Lila Downs - La cumbia del mole - Les Petites Bourrettes - Notre monde - Thomas Bellet: - Sheepbox - Devil's way. (lohrun) New songbook format (not compatible with older version). Changes have been made to the compilation toolchain that prevent compilation of old format songbook. @@ -810,30 +22,6 @@ songbook (v0.7) songbook (v0.6) - (crep, Jeanne Dupas, lohrun) Add songs - Alexandre Dupas: - Ben Harper - Widow of a Living Man Song requested by Jeanne Dupas - Jeanne Dupas: - The Animals - The house of rising sun - The Beatles - Let it be - Romain Goffe: - Oldelaf et Monsieur D. - David Crockett - Steve Waring - La baleine bleue - Ritchie Valens - La bamba - Pornophonique - Sad robot - Les Naufragés - L'harmonica - Steve Waring - La baleine bleue - Ritchie Valens - La bamba - Pornophonique - Sad robot - Les Naufragés - L'harmonica - Thémis et Nono - Les Cowboys Fringants - Ti-Cul - Bruce Springsteen - Pay me my money down - Karpatt - Des idées - Karpatt - Léon - Les Cowboys Fringants - La Reine - Les Ogres de Barback - Ptit chat - Yuki Kajiura - Fake Wings (crep, lohrun) Corrections of mistakes and typos. (lohrun) Use plain songs package v2.9 (lohrun) Replace makeindex script with a new python version @@ -846,23 +34,6 @@ songbook (v0.6) songbook (0.5) - (crep, lohrun, Grégoire Goffe) New songs: - Belyscendre - Mon père veut me marier - Belyscendre - Prend farge au loup - Britney Spears - ...Baby one more time - Cranberries - Animal Instinct - Cranberries - Zombie - Green Day - American Idiot - Le Donjon de Naheulbeuk - La compagnie du chien rugissant - Le Donjon de Naheulbeuk - La complainte de la serveuse - Le Donjon de Naheulbeuk - La polka du menestrel - Le Donjon de Naheulbeuk - Les chaussettes du nain - Le Donjon de Naheulbeuk - Même pas mage - Negro Spiritual - Lord I want - Oldelaf - J'veux être musclé - Oldelaf - Mon ange - Rise Against - Hero of War - U2 - Sunday Bloody Sunday (crep, lohrun) Corrections of mistakes and typos. (lohrun) Add a proper volume mechanism (lohrun) Add volume-1 source containing about 165 songs @@ -875,52 +46,6 @@ songbook (0.5) songbook (0.4) - (crep, lohrun, Grégoire Goffe) New songs: - Alain Bashung - Gaby, oh Gaby - Avril Lavigne - Things I'll never say - Bob Dylan - Blowin in the wind - Carter Family - In the highways + Keep on the sunny side - Cat Stevens - Sad Lisa - Cat Stevens - The wind - Eels - Dirty girl - Eels - Hey man - Eels - I like birds - Eels - Packing blankets - Garfunkel and Oates - Fuck You. - Georges Brassens - Cupidon s'en fout - Georges Brassens - Grand-père - Georges Brassens - Le gorille - Georges Brassens - Les copains d'abord - Graeme Allwright - Johnny - Graeme Allwright - La mouche bleue - Graeme Allwright - Petit garcon - Green Day - Boulevard of Broken Dreams - Howie Day - Collide - Kana - Plantation - La Rue Ketanou - La Rue Ketanou - Les Cowboys Fringants - La manifestation - Les Cowboys Fringants - Toune d'Automne - Les Tit's Nassels - Les Tit's ballades - Linkin Park - Numb - Moriarty - Jimmy - Oasis - Wonderwall - Oldelaf et Monsieur.D - Nathalie - Patrick Bouchitey - Jesus reviens - Pierre Perret - Lily - Pow Wow - Le lion est mort ce soir - Radiohead - Creep - Renaud - Petite fille des sombres rues - Simon & Garfunkel - Cecilia - Simon & Garfunkel - El condor pasa - Simon & Garfunkel - Feeling groovy - Terra Naomi - Say it's possible - The Beatles - Ob-la-di ob-la-da - The Beatles - Yellow submarine - The Beatles - Yesterday - The Eagles - Hotel California - The Pogues - Fairytale of New-York - Tri Yann - Les prisons de Nantes - Tri Yann - Si Mors A Mors (crep, lohrun) Corrections of mistakes and typos. (crep, lohrun) Add cover picture to each song (lohrun) Update to the Songs Package v2.8 @@ -930,7 +55,6 @@ songbook (0.4) songbook (0.3) - (crep, lohrun) Major update with many new songs. (crep) Corrections of a lot of mistakes. (crep) Include image support. (lohrun) Add make-html utility. diff --git a/books/lyricbook.sb b/books/lyricbook.sb deleted file mode 100644 index 1bb3af51..00000000 --- a/books/lyricbook.sb +++ /dev/null @@ -1,10 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [], -"booktype" : "lyric", -"author" : "Crep (R.Goffe) \\and Lohrun (A.Dupas)", -"subtitle" : "parolier", -"title" : "Recueil de chansons", -"songs" : "all" -} diff --git a/books/lyricbook_en.sb b/books/lyricbook_en.sb deleted file mode 100644 index 95feb9f8..00000000 --- a/books/lyricbook_en.sb +++ /dev/null @@ -1,9 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "english", -"bookoptions" : [], -"booktype" : "lyric", -"author" : "Crep (R.Goffe) \\and Lohrun (A.Dupas)", -"subtitle" : "lyrics", -"songs" : "all" -} diff --git a/books/lyricbook_fr.sb b/books/lyricbook_fr.sb deleted file mode 100644 index 0eca7415..00000000 --- a/books/lyricbook_fr.sb +++ /dev/null @@ -1,9 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [], -"booktype" : "lyric", -"author" : "Crep (R.Goffe) \\and Lohrun (A.Dupas)", -"subtitle" : "parolier", -"songs" : "all" -} diff --git a/books/matteo.sb b/books/matteo.sb deleted file mode 100644 index 020e5b35..00000000 --- a/books/matteo.sb +++ /dev/null @@ -1,24 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "importantdiagramonly", - "repeatchords", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"subtitle" : "Matteo's songs", -"songs" : [ - "hubert-felix_thiefaine/sentiments_numeriques_revisites.sg", - "jean_leloup/promeneur.sg", - "maxime_le_forestier/parachutiste.sg", - "yves_simon/les_bateaux_du_metro.sg", - "soldat_louis/du_rhum_des_femmes.sg", - "soldat_louis/tirer_des_caisses.sg", - "soldat_louis/savannah.sg", - "leonard_cohen/winter_lady.sg", - "leonard_cohen/a_bunch_of_lonesome_heroes.sg", - "leonard_cohen/the_old_revolution.sg", - "jacques_higelin/je_ne_peux_plus_dire_je_t_aime.sg"] -} diff --git a/books/naheulbeuk.sb b/books/naheulbeuk.sb deleted file mode 100644 index 68173b2e..00000000 --- a/books/naheulbeuk.sb +++ /dev/null @@ -1,51 +0,0 @@ -{ -"template" : "ancient.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"footer" : "Musique du Naheulband: \\url{http://www.penofchaos.com/warham/donjon-groupe.htm}", -"license" : "license-nb.tex", -"picture" : "nb_cover", -"picturecopyright" : "Personnages par \\emph{Pen Of Chaos} / Illustrations par \\emph{Marion Poinsot}", -"subtitle" : "Recueil de chansons non-officiel", -"title" : "Le Donjon de Naheulbeuk", -"version" : "0.5", -"songs" : [ - "belyscendre/helas_madame.sg", - "belyscendre/mon_pere_veut_me_marier.sg", - "belyscendre/prends_garde_au_loup.sg", - "le_donjon_de_naheulbeuk/10_sous_dans_ma_poche.sg", - "le_donjon_de_naheulbeuk/chicken_quest.sg", - "le_donjon_de_naheulbeuk/crom.sg", - "le_donjon_de_naheulbeuk/la_hache_durandil.sg", - "le_donjon_de_naheulbeuk/le_petit_gobelin.sg", - "le_donjon_de_naheulbeuk/he_la_petite_dame.sg", - "le_donjon_de_naheulbeuk/tralala_du_nain.sg", - "le_donjon_de_naheulbeuk/bugger_off.sg", - "le_donjon_de_naheulbeuk/la_biere_du_donjon.sg", - "le_donjon_de_naheulbeuk/la_compagnie_du_chien_rugissant.sg", - "le_donjon_de_naheulbeuk/la_complainte_de_la_serveuse.sg", - "le_donjon_de_naheulbeuk/geste_heroique.sg", - "le_donjon_de_naheulbeuk/la_polka_du_menestrel.sg", - "le_donjon_de_naheulbeuk/la_vie_d_aventurier.sg", - "le_donjon_de_naheulbeuk/le_laride_du_poulet.sg", - "le_donjon_de_naheulbeuk/les_chaussettes_du_nain.sg", - "le_donjon_de_naheulbeuk/les_elfes_de_greenelven.sg", - "le_donjon_de_naheulbeuk/les_souliers_de_lady_fae.sg", - "le_donjon_de_naheulbeuk/les_epees_durandil.sg", - "le_donjon_de_naheulbeuk/maitre_du_donjon.sg", - "le_donjon_de_naheulbeuk/marche_barbare.sg", - "le_donjon_de_naheulbeuk/massacrons_nous_dans_la_taverne.sg", - "le_donjon_de_naheulbeuk/mon_ancetre_gurdil.sg", - "le_donjon_de_naheulbeuk/meme_pas_mage.sg", - "le_donjon_de_naheulbeuk/nanana_de_l_elfe.sg", - "le_donjon_de_naheulbeuk/noel_en_mordor.sg", - "le_donjon_de_naheulbeuk/troll_farceur_et_elfe_farci.sg", - "le_donjon_de_naheulbeuk/un_boulet_dans_le_groupe.sg", - "le_donjon_de_naheulbeuk/a_l_aventure_compagnons.sg" - ] -} diff --git a/books/songbook.sb b/books/songbook.sb deleted file mode 100644 index dd929c82..00000000 --- a/books/songbook.sb +++ /dev/null @@ -1,5 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"songs" : "all" -} diff --git a/books/songbook_en.sb b/books/songbook_en.sb deleted file mode 100644 index 8893f0fc..00000000 --- a/books/songbook_en.sb +++ /dev/null @@ -1,10 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "english", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"songs" : "all" -} diff --git a/books/songbook_fr.sb b/books/songbook_fr.sb deleted file mode 100644 index ae70574b..00000000 --- a/books/songbook_fr.sb +++ /dev/null @@ -1,10 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"songs" : "all" -} diff --git a/books/volume-1.sb b/books/volume-1.sb deleted file mode 100644 index c765eae6..00000000 --- a/books/volume-1.sb +++ /dev/null @@ -1,185 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"picture" : "feel-the-music", -"picturecopyright" : "foxygamergirl @ deviantart.com", -"subtitle" : "Tome 1", -"songs" : [ - "alain_bashung/gaby_oh_gaby.sg", - "amy_macdonald/mr._rock_n_roll.sg", - "amy_macdonald/this_is_the_life.sg", - "anais/mon_coeur_mon_amour.sg", - "avril_lavigne/things_i_ll_never_say.sg", - "barry_louis_polisar/all_i_want_is_you.sg", - "belle_sebastian/piazza_new_york_catcher.sg", - "bob_dylan/blowin_in_the_wind.sg", - "bob_dylan/knocking_on_heavens_door.sg", - "bruce_springsteen/bring_em_home.sg", - "bruce_springsteen/buffalo_gals.sg", - "bruce_springsteen/o_mary_don_t_you_weep.sg", - "benabar/le_diner.sg", - "benabar/quatre_murs_et_un_toit.sg", - "benabar/y_a_une_fille_qu_habite_chez_moi.sg", - "carter_family/in_the_highways.sg", - "carter_family/keep_on_the_sunny_side.sg", - "cat_stevens/my_lady_d_arbanville.sg", - "cat_stevens/sad_lisa.sg", - "cat_stevens/the_wind.sg", - "charles_aznavour/emmenez-moi.sg", - "dessins_animes/l_histoire_d_actarus.sg", - "dessins_animes/les_mysterieuses_cites_d_or.sg", - "dessins_animes/nicky_larson.sg", - "dessins_animes/tom_sawyer_debut.sg", - "dessins_animes/tom_sawyer_fin.sg", - "eels/dirty_girl.sg", - "eels/hey_man.sg", - "eels/i_like_birds.sg", - "eels/packing_blankets.sg", - "francis_cabrel/je_l_aime_a_mourir.sg", - "francis_cabrel/petite_marie.sg", - "garfunkel_and_oates/fuck_you.sg", - "georges_brassens/cupidon_s_en_fout.sg", - "georges_brassens/grand_pere.sg", - "georges_brassens/la_mauvaise_reputation.sg", - "georges_brassens/le_gorille.sg", - "georges_brassens/les_copains_d_abord.sg", - "philippe_chatel/la_chanson_du_herisson.sg", - "graeme_allwright/il_faut_que_je_m_en_aille.sg", - "graeme_allwright/johnny.sg", - "graeme_allwright/jolie_bouteille.sg", - "graeme_allwright/jusqu_a_la_ceinture.sg", - "graeme_allwright/la_mouche_bleue.sg", - "graeme_allwright/petit_garcon.sg", - "graeme_allwright/petites_boites.sg", - "graeme_allwright/ca_je_l_ai_jamais_vu.sg", - "green_day/boulevard_of_broken_dreams.sg", - "herman_dune/i_wish_i_could_see_you_soon.sg", - "howie_day/collide.sg", - "hugues_aufray/je_reviens.sg", - "hugues_aufray/le_bon_dieu_s_enervait.sg", - "hugues_aufray/le_petit_ane_gris.sg", - "hugues_aufray/n_y_pense_plus_tout_est_bien.sg", - "hugues_aufray/santiano.sg", - "hugues_aufray/tu_sens_bon_la_terre.sg", - "jacques_brel/vesoul.sg", - "jeff_buckley/hallelujah.sg", - "joe_dassin/le_chemin_de_papa.sg", - "joe_dassin/siffler_sur_la_colline.sg", - "kana/plantation.sg", - "karpatt/le_magicien.sg", - "karpatt/les_ptits_cailloux.sg", - "karpatt/melisande.sg", - "kimya_dawson/tree_hugger.sg", - "la_rue_ketanou/impossible.sg", - "la_rue_ketanou/la_rue_ketanou.sg", - "la_rue_ketanou/les_cigales.sg", - "la_rue_ketanou/les_mots.sg", - "la_rue_ketanou/ma_faute_a_toi.sg", - "la_rue_ketanou/tu_parles_trop.sg", - "le_donjon_de_naheulbeuk/10_sous_dans_ma_poche.sg", - "le_donjon_de_naheulbeuk/bugger_off.sg", - "le_donjon_de_naheulbeuk/la_biere_du_donjon.sg", - "le_donjon_de_naheulbeuk/la_vie_d_aventurier.sg", - "le_donjon_de_naheulbeuk/les_elfes_de_greenelven.sg", - "le_donjon_de_naheulbeuk/les_souliers_de_lady_fae.sg", - "le_donjon_de_naheulbeuk/les_epees_durandil.sg", - "le_donjon_de_naheulbeuk/mon_ancetre_gurdil.sg", - "le_donjon_de_naheulbeuk/troll_farceur_et_elfe_farci.sg", - "le_donjon_de_naheulbeuk/un_boulet_dans_le_groupe.sg", - "le_donjon_de_naheulbeuk/a_l_aventure_compagnons.sg", - "les_amis_d_ta_femme/cayenne.sg", - "les_amis_d_ta_femme/maree_basse.sg", - "les_cowboys_fringants/droit_devant.sg", - "les_cowboys_fringants/histoire_de_peche.sg", - "les_cowboys_fringants/la_manifestation.sg", - "les_cowboys_fringants/les_hirondelles.sg", - "les_cowboys_fringants/toune_d_automne.sg", - "les_cowboys_fringants/etoiles_filantes.sg", - "les_fatals_picards/chasse_peche_et_nature.sg", - "les_hurlements_d_leo/poemes.sg", - "les_momes_du_ce2/mamadou_avait_mal_aux_dents.sg", - "les_ogres_de_barback/accordeon_pour_les_cons.sg", - "les_ogres_de_barback/contes_vents_et_marees.sg", - "les_ogres_de_barback/grand-mere.sg", - "les_ogres_de_barback/l_air_bete.sg", - "les_ogres_de_barback/petite_societe.sg", - "les_ogres_de_barback/rue_de_panam.sg", - "les_ogres_de_barback/3_-_0.sg", - "les_ogres_de_barback/la_premiere_fois.sg", - "les_tit_s_nassels/les_tit_s_ballades.sg", - "les_tetes_raides/l_iditente.sg", - "les_tetes_raides/patalo.sg", - "les_vrp/leo.sg", - "les_wriggles/julie_la_petite_olive.sg", - "les_wriggles/monolithe.sg", - "les_wriggles/poupine_et_thierry.sg", - "linkin_park/numb.sg", - "louise_attaque/depuis_toujours.sg", - "louise_attaque/lea.sg", - "mano_negra/out_of_time_man.sg", - "manu_chao/bienvenida_a_tijuana.sg", - "manu_chao/clandestino.sg", - "manu_chao/desaparecido.sg", - "maurice_dulac/dis_a_ton_fils.sg", - "mes_souliers_sont_rouges/les_souliers_rouges.sg", - "mes_souliers_sont_rouges/sainte-cecile.sg", - "mes_souliers_sont_rouges/the_rooster.sg", - "moriarty/jimmy.sg", - "noir_desir/aux_sombres_heros_de_l_amer.sg", - "norah_jones/somewhere_over_the_rainbow.sg", - "oasis/wonderwall.sg", - "oldelaf_et_monsieur_d/cafe.sg", - "oldelaf_et_monsieur_d/nathalie.sg", - "oldelaf_et_monsieur_d/petit_pierrot.sg", - "oldelaf_et_monsieur_d/raoul_le_pitbull.sg", - "oldelaf_et_monsieur_d/rue_de_nantes.sg", - "oldelaf_et_monsieur_d/trahis.sg", - "patrick_bouchitey/jesus_reviens.sg", - "pierre_perret/lily.sg", - "pixies/where_is_my_mind.sg", - "pow_wow/le_lion_est_mort_ce_soir.sg", - "radiohead/creep.sg", - "renaud/des_que_le_vent_soufflera.sg", - "renaud/hexagone.sg", - "renaud/laisse_beton.sg", - "renaud/manu.sg", - "renaud/marche_a_l_ombre.sg", - "renaud/mistral_gagnant.sg", - "renaud/petite_fillle_des_sombres_rues.sg", - "simon_garfunkel/cecilia.sg", - "simon_garfunkel/el_condor_pasa.sg", - "simon_garfunkel/feeling_groovy.sg", - "simon_garfunkel/scarborough_fair.sg", - "simon_garfunkel/the_boxer.sg", - "simon_garfunkel/the_leaves_that_are_green.sg", - "simon_garfunkel/the_sounds_of_silence.sg", - "simon_garfunkel/wednesday_morning_3a.m.sg", - "sinsemilia/j_prefere_100_fois.sg", - "steve_waring/le_matou.sg", - "terra_naomi/say_it_s_possible.sg", - "the_beatles/hey_jude.sg", - "the_beatles/ob-la-di_ob-la-da.sg", - "the_beatles/yellow_submarine.sg", - "the_beatles/yesterday.sg", - "the_eagles/hotel_california.sg", - "the_moldy_peaches/anyone_else_but_you.sg", - "the_pogues/dirty_old_town.sg", - "the_pogues/fairytale_of_new_york.sg", - "tri_yann/la_jument_de_michao.sg", - "tri_yann/la_ville_que_j_ai_tant_aimee.sg", - "tri_yann/les_prisons_de_nantes.sg", - "tri_yann/si_mort_a_mors.sg", - "tryo/ce_que_l_on_s_aime.sg", - "tryo/l_hymne_de_nos_campagnes.sg", - "tryo/le_petit_chose.sg", - "yves_jamait/et_je_bois.sg", - "yvon_etienne/chemise_rouge.sg", - "yvon_etienne/y_a_des_nouilles_et_du_nougat.sg" - ] -} diff --git a/books/volume-2.sb b/books/volume-2.sb deleted file mode 100644 index 818da205..00000000 --- a/books/volume-2.sb +++ /dev/null @@ -1,192 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"picture" : "sound", -"picturecopyright" : "ellesh @ deviantart.com", -"subtitle" : "Tome 2", -"songs" : [ - "aaron/u_turn_lili.sg", - "alain_souchon/foule_sentimentale.sg", - "alex_beaupain/je_n_aime_que_toi.sg", - "alexis_hk/gaspard.sg", - "alicia_keys/if_aint_got_you.sg", - "anny_et_jean-marc_versini/la_danse_des_esquimaux.sg", - "antsy_pants/vampire.sg", - "as_de_trefle/jessica.sg", - "avenue_q/the_internet_is_for_porn.sg", - "beau_dommage/la_complainte_du_phoque_en_alaska.sg", - "belyscendre/mon_pere_veut_me_marier.sg", - "belyscendre/prends_garde_au_loup.sg", - "ben_harper/waiting_on_an_angel.sg", - "ben_harper/widow_of_a_living_man.sg", - "bob_dylan/mr_tambourine_man.sg", - "bob_dylan/the_times_they_are_a-changin.sg", - "boby_lapointe/la_maman_des_poissons.sg", - "britney_spears/baby_one_more_time.sg", - "bruce_springsteen/john_henry.sg", - "bruce_springsteen/pay_me_my_money_down.sg", - "cat_stevens/father_and_son.sg", - "cat_stevens/here_comes_my_baby.sg", - "claude_nougaro/armstrong.sg", - "cranberries/animal_instinct.sg", - "cranberries/zombie.sg", - "debout_sur_le_zinc/la_declaration.sg", - "debout_sur_le_zinc/les_mots_d_amour.sg", - "debout_sur_le_zinc/ma_petite_cherie.sg", - "debout_sur_le_zinc/rester_debout.sg", - "dessins_animes/boumbo.sg", - "dessins_animes/denver.sg", - "dessins_animes/dragon_ball.sg", - "dessins_animes/dragon_ball_z.sg", - "dessins_animes/inspecteur_gadget.sg", - "dessins_animes/l_oiseau_bleu.sg", - "dessins_animes/i_wanna_be_like_you.sg", - "dessins_animes/les_chevaliers_du_zodiaque.sg", - "dessins_animes/lucky_luke.sg", - "dessins_animes/sherlock_holmes.sg", - "dessins_animes/themis_et_nono.sg", - "georges_brassens/ballade_des_dames_du_temps_jadis.sg", - "georges_brassens/je_me_suis_fait_tout_petit.sg", - "georges_brassens/le_petit_cheval.sg", - "georges_brassens/a_l_ombre_du_coeur_de_ma_mie.sg", - "gilles_servat/la_blanche_hermine.sg", - "gogol_bordello/oh_no.sg", - "graeme_allwright/henrik.sg", - "graeme_allwright/le_clochard_americain.sg", - "green_day/american_idiot.sg", - "green_day/minority.sg", - "henri_des/les_betises_a_l_ecole.sg", - "henri_des/mon_cheval_gris.sg", - "hugues_aufray/debout_les_gars.sg", - "hugues_aufray/elle_descend_de_la_montagne.sg", - "indochine/j_ai_demande_a_la_lune.sg", - "indochine/l_aventurier.sg", - "jack_johnson/taylor.sg", - "jason_marz/i_m_yours.sg", - "jean-jacques_goldman/je_te_donne.sg", - "joan_baez/here_s_to_you.sg", - "joe_dassin/la_fleur_aux_dents.sg", - "joe_dassin/le_moustique.sg", - "joe_dassin/les_petits_pains_au_chocolat.sg", - "johk/la_reine_de_france.sg", - "john_lennon/working_class_hero.sg", - "jonathan_coulton/still_alive.sg", - "karpatt/des_gnons_pour_des_pelles.sg", - "karpatt/des_idees.sg", - "karpatt/le_fil.sg", - "karpatt/les_canards_en_plastique.sg", - "karpatt/leon.sg", - "la_famille_maestro/le_rat_de_l_opera.sg", - "la_rue_ketanou/la_chance.sg", - "la_rue_ketanou/la_fiancee_de_l_eau.sg", - "la_rue_ketanou/les_hommes_que_j_aime.sg", - "la_rue_ketanou/sur_les_chemins_de_la_boheme.sg", - "le_donjon_de_naheulbeuk/la_compagnie_du_chien_rugissant.sg", - "le_donjon_de_naheulbeuk/la_complainte_de_la_serveuse.sg", - "le_donjon_de_naheulbeuk/geste_heroique.sg", - "le_donjon_de_naheulbeuk/la_polka_du_menestrel.sg", - "le_donjon_de_naheulbeuk/les_chaussettes_du_nain.sg", - "le_donjon_de_naheulbeuk/marche_barbare.sg", - "le_donjon_de_naheulbeuk/massacrons_nous_dans_la_taverne.sg", - "le_donjon_de_naheulbeuk/meme_pas_mage.sg", - "le_donjon_de_naheulbeuk/noel_en_mordor.sg", - "leonard_cohen/if_it_be_your_will.sg", - "les_amis_d_ta_femme/a_las_barricadas.sg", - "les_cowboys_fringants/1994.sg", - "les_cowboys_fringants/entre_deux_taxis.sg", - "les_cowboys_fringants/la_bonne_pomme.sg", - "les_cowboys_fringants/la_reine.sg", - "les_cowboys_fringants/plus_rien.sg", - "les_cowboys_fringants/quand_tu_pars.sg", - "les_cowboys_fringants/ti-cul.sg", - "les_fatals_picards/la_ferme.sg", - "les_naufrages/l_harmonica.sg", - "les_ogres_de_barback/bumbaia.sg", - "les_ogres_de_barback/jojo.sg", - "les_ogres_de_barback/le_temps.sg", - "les_ogres_de_barback/poil_aux_yeux.sg", - "les_ogres_de_barback/ptit_chat.sg", - "les_ogres_de_barback/rue_du_temps.sg", - "les_ogres_de_barback/touche_pas_a_mon_ecole.sg", - "les_petites_bourrettes/dans_la_tete.sg", - "les_petites_bourrettes/et_si_je_t_aime.sg", - "les_petites_bourrettes/la_vieille.sg", - "les_petites_bourrettes/notre_monde.sg", - "les_vieilles_valises/emilie.sg", - "les_wriggles/plouf.sg", - "lila_downs/la_cumbia_del_mole.sg", - "los_lobos/cancion_del_mariachi.sg", - "louise_attaque/les_nuits_parisiennes.sg", - "mc_solaar/caroline.sg", - "marie_laforet/ivan_boris_et_moi.sg", - "maxime_le_forestier/comme_un_arbre.sg", - "maxime_le_forestier/la_rouille.sg", - "maxime_le_forestier/le_steak.sg", - "maxime_le_forestier/san_fransico.sg", - "maxime_le_forestier/education_sentimentale.sg", - "mes_souliers_sont_rouges/bassin_d_irlande.sg", - "mes_souliers_sont_rouges/le_cycle_du_vin.sg", - "mes_souliers_sont_rouges/nuit_humide.sg", - "michel_sardou/les_lacs_du_connemara.sg", - "neil_young/heart_of_gold.sg", - "oldelaf_et_monsieur_d/davy_crockett.sg", - "oldelaf_et_monsieur_d/j_veux_etre_muscle.sg", - "oldelaf_et_monsieur_d/michel.sg", - "oldelaf_et_monsieur_d/mon_ange.sg", - "parabellum/saturnin.sg", - "pierre_bachelet/en_l_an_2001.sg", - "pierre_bachelet/vingt_ans.sg", - "pornophonique/sad_robot.sg", - "renaud/amoureux_de_paname.sg", - "renaud/chanson_pour_pierrot.sg", - "renaud/docteur_renaud_mister_renard.sg", - "renaud/en_cloque.sg", - "renaud/manatthan-kaboul.sg", - "renaud/societe_tu_m_auras_pas.sg", - "rise_against/hero_of_war.sg", - "ritchie_valens/come_on_let_s_go.sg", - "ritchie_valens/la_bamba.sg", - "sanseverino/dimanche_dernier.sg", - "sheepbox/devil_s_way.sg", - "sheepbox/not_scared_to_die.sg", - "simon_garfunkel/april_come_she_will.sg", - "simon_garfunkel/kathy_s_song.sg", - "simon_garfunkel/me_and_julio_down_by_the_schoolyard.sg", - "simon_garfunkel/mrs_robinson.sg", - "simon_garfunkel/the_only_living_boy_in_new_york.sg", - "steve_waring/la_baleine_bleue.sg", - "system_of_a_down/roulette.sg", - "the_animals/the_house_of_rising_sun.sg", - "the_beatles/let_it_be.sg", - "the_beatles/octopus_garden.sg", - "the_beatles/twist_and_shout.sg", - "the_calling/wherever_you_will_go.sg", - "the_carpenters/breaking_up_is_hard_to_do.sg", - "the_doors/light_my_fire.sg", - "the_dubliners/whiskey_in_the_jar.sg", - "the_fray/how_to_save_a_life.sg", - "the_nightwatchman/let_freedom_ring.sg", - "the_rolling_stones/angie.sg", - "the_rolling_stones/paint_it_black.sg", - "the_rolling_stones/ruby_tuesday.sg", - "the_white_stripes/well_it_s_true_that_we_love_one_another.sg", - "the_mamas_and_the_papas/california_dream.sg", - "traditionnel/chevaliers_de_la_table_ronde.sg", - "traditionnel/la_cucaracha.sg", - "traditionnel/v_la_l_bon_vent.sg", - "traditionnel/vent_frais.sg", - "u2/sunday_bloody_sunday.sg", - "vincent_malone/l_escargot_malheureux.sg", - "yodelice/sunday_with_a_flu.sg", - "yuki_kajiura/fake_wings.sg", - "yuki_kajiura/jr.sg", - "yuki_kajiura/vanity.sg", - "edith_piaf/l_homme_a_la_moto.sg" - ] -} diff --git a/books/volume-3.sb b/books/volume-3.sb deleted file mode 100644 index f0204b1c..00000000 --- a/books/volume-3.sb +++ /dev/null @@ -1,180 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"picture" : "Mousey_Band_by_Duffzilla", -"picturecopyright" : "duffzilla @ deviantart.com", -"subtitle" : "Tome 3", -"songs" : [ - "alain_souchon/l_amour_a_la_machine.sg", - "alanis_morissette/ironic.sg", - "alex_beaupain/as_tu_deja_aime.sg", - "alex_beaupain/de_bonnes_raisons.sg", - "alex_beaupain/les_yeux_au_ciel.sg", - "alex_beaupain/ma_memoire_sale.sg", - "barbara/l_aigle_noir.sg", - "bobby_mcferrin/don_t_worry_be_happy.sg", - "bob_dylan/ballad_of_hollis_brown.sg", - "bob_dylan/don_t_think_twice_it_s_all_right.sg", - "bob_dylan/hurricane.sg", - "bob_dylan/one_more_cup_of_coffee.sg", - "boby_lapointe/framboise.sg", - "boby_lapointe/meli-melodie.sg", - "bruce_springsteen/mrs_mcgrath.sg", - "bruce_springsteen/old_dan_tucker.sg", - "cat_stevens/wild_world.sg", - "cesaria_evora/petit_pays.sg", - "charles_aznavour/les_comediens.sg", - "cookie_dingler/femme_liberee.sg", - "crep/bioman.sg", - "crep/calimero.sg", - "crep/encore.sg", - "crep/fichu_doctorat.sg", - "crep/iscream.sg", - "crep/kartopo.sg", - "crep/les_ptits_chemins.sg", - "crep/melancolie.sg", - "crep/nostalgeek.sg", - "crep/snceufeu.sg", - "crep/soiree_pepere.sg", - "daniel_balavoine/vivre_ou_survivre.sg", - "debout_sur_le_zinc/le_tanticide.sg", - "dropkick_murphys/dirty_glass.sg", - "eddie_vedder/guaranteed.sg", - "elton_john/can_you_fell_the_love_tonight.sg", - "elton_john/crocodile_rock.sg", - "elvis_presley/don_t_be_cruel.sg", - "elvis_presley/love_me_tender.sg", - "emiliana_torrini/jungle_drum.sg", - "fools_garden/lemon_tree.sg", - "france_gall/il_jouait_du_piano_debout.sg", - "francois_corbier/les_vieux_copains_de_la_tele.sg", - "georges_brassens/chanson_pour_l_auvergnat.sg", - "gerard_lenorman/la_ballade_des_gens_heureux.sg", - "gerard_lenorman/si_j_etais_president.sg", - "gipsy_kings/baila_me.sg", - "gipsy_kings/bamboleo.sg", - "gogol_bordello/alcohol.sg", - "gogol_bordello/supertheory_of_supereverything.sg", - "graeme_allwright/le_jour_de_clarte.sg", - "henri_salvador/une_chanson_douce.sg", - "herman_dune/be_a_doll_and_take_my_heart.sg", - "herman_dune/bristol.sg", - "herman_dune/my_friends_kill_my_folks.sg", - "herman_dune/pure_heart.sg", - "herman_dune/tell_me_something_i_don_t_know.sg", - "herman_dune/when_the_water_gets_cold.sg", - "herman_dune/your_name_my_game.sg", - "herve_cristiani/il_est_libre_max.sg", - "hugues_aufray/celine.sg", - "hugues_aufray/hasta_luego.sg", - "hugues_aufray/le_joueur_de_pipeau.sg", - "hugues_aufray/le_jour_ou_le_bateau_viendra.sg", - "hugues_aufray/l_epervier.sg", - "hugues_aufray/les_couleurs.sg", - "hugues_aufray/stewball.sg", - "jacques_brel/amsterdam.sg", - "jacques_brel/ces_gens_la.sg", - "jacques_brel/la_valse_a_mille_temps.sg", - "jacques_higelin/poil_dans_la_main.sg", - "jacques_higelin/tombe_du_ciel.sg", - "jcfrog/hadopi_song_iii.sg", - "jcfrog/je_t_emmene_dedans.sg", - "jcfrog/la_mauvaise_ereputation.sg", - "jcfrog/russians.sg", - "jeanette/porque_te_vas.sg", - "jean-jacques_goldman/encore_un_matin.sg", - "jean-jacques_goldman/il_changeait_la_vie.sg", - "jean-jacques_goldman/le_coureur.sg", - "joe_dassin/les_champs_elysees.sg", - "johnny_cash/it_aint_me_babe.sg", - "johnny_cash/i_walk_the_line.sg", - "johnny_cash/jackson.sg", - "johnny_cash/the_ring_of_fire.sg", - "karpatt/fan_de_maman.sg", - "karpatt/histoire_de_famille.sg", - "karpatt/les_vieilles.sg", - "karpatt/lino.sg", - "karpatt/souleve_ta_jupe.sg", - "la_compagnie_creole/ca_fait_rire_les_oiseaux.sg", - "la_compagnie_creole/la_machine_a_danser.sg", - "la_compagnie_creole/le_bal_masque.sg", - "la_maison_tellier/la_chambre_rose.sg", - "la_rue_ketanou/almarita.sg", - "la_rue_ketanou/les_tontons.sg", - "la_rue_ketanou/personne_n_a_l_prenom_d_ma_femme.sg", - "la_tete_a_toto/les_projets.sg", - "la_tete_a_toto/petit_bonhomme.sg", - "le_donjon_de_naheulbeuk/le_laride_du_poulet.sg", - "le_donjon_de_naheulbeuk/nanana_de_l_elfe.sg", - "les_amis_d_ta_femme/laisse_tomber_gros.sg", - "les_blerots_de_ravel/dans_les_gares.sg", - "les_blerots_de_ravel/le_retour_de_petrouchka.sg", - "les_blerots_de_ravel/les_ptits_plaisirs.sg", - "les_booze_brothers/i_want_sex.sg", - "les_fatals_picards/goldorak_est_mort.sg", - "les_hurlements_d_leo/a_bout_d_souffle.sg", - "les_hurlements_d_leo/ici_d_ailleurs.sg", - "les_hurlements_d_leo/le_cafe_des_jours_heureux.sg", - "les_hurlements_d_leo/une_danseuse.sg", - "les_innocents/l_autre_finistere.sg", - "les_ogres_de_barback/comment_je_suis_devenu_voyageur.sg", - "les_ogres_de_barback/l_ennui_et_le_jour.sg", - "les_ogres_de_barback/little_gentleman.sg", - "les_ogres_de_barback/ma_fille.sg", - "les_vrp/ramon_perez.sg", - "loic_lantoine/cote_punk.sg", - "los_lobos/rango_theme_song.sg", - "louise_attaque/je_t_emmene_au_vent.sg", - "louise_attaque/ton_invitation.sg", - "lylloo/ma_soiree_msn.sg", - "manau/la_tribu_de_dana.sg", - "matmatah/l_apologie.sg", - "maxime_le_forestier/mon_frere.sg", - "mes_souliers_sont_rouges/cahin_caha.sg", - "mes_souliers_sont_rouges/l_arbre_est_dans_ses_feuilles.sg", - "mes_souliers_sont_rouges/sortis_du_bois.sg", - "mes_souliers_sont_rouges/tape_la_galoche.sg", - "michel_fugain/je_n_aurai_pas_le_temps.sg", - "michel_fugain/les_acadiens.sg", - "mon_cote_punk/inch_allah.sg", - "mon_cote_punk/youssef.sg", - "nirvana/come_as_you_are.sg", - "noir_desir/le_vent_nous_portera.sg", - "noir_desir/l_homme_presse.sg", - "oasis/im_outta_time.sg", - "outkast/hey_ya.sg", - "paco_ibanez/a_galopar.sg", - "philippe_lavil/il_tape_sur_des_bambous.sg", - "pierre_perret/au_cafe_du_canal.sg", - "pierre_perret/les_jolies_colonies_de_vacances.sg", - "pierre_perret/mon_ptit_loup.sg", - "red_hot_chili_peppers/by_the_way.sg", - "red_hot_chili_peppers/californication.sg", - "red_hot_chili_peppers/can_t_stop.sg", - "red_hot_chili_peppers/dani_california.sg", - "red_hot_chili_peppers/road_trippin.sg", - "red_hot_chili_peppers/snow.sg", - "red_hot_chili_peppers/under_the_bridge.sg", - "renaud/c_est_quand_qu_on_va_ou.sg", - "renaud/la_blanche.sg", - "renaud/salut_manouche.sg", - "sting/russians.sg", - "the_beautiful_girls/la_mar.sg", - "the_connells/74_75.sg", - "the_innocence_mission/the_lakes_of_canada.sg", - "the_nightwatchman/california_s_dark.sg", - "the_pogues/the_irish_rover.sg", - "the_rolling_stones/route_66.sg", - "the_rolling_stones/you_cant_always_get_what_you_want.sg", - "tit_patapons/marchand_de_couleurs.sg", - "traditionnel/l_homme_de_cromagnon.sg", - "tri_yann/kiss_the_cildren_for_me_mary.sg", - "tri_yann/les_filles_de_redon.sg" - ] -} \ No newline at end of file diff --git a/books/volume-4.sb b/books/volume-4.sb deleted file mode 100644 index 1d4e1cbf..00000000 --- a/books/volume-4.sb +++ /dev/null @@ -1,174 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"picture" : "music_by_lauratheartist", -"picturecopyright" : "LauraTheArtist @ deviantart.com", -"subtitle" : "Tome 4", -"songs" : [ - "alain_souchon/bidon.sg", - "ben_e_king/stand_by_me.sg", - "bill_withers/just_two_of_us.sg", - "bob_marley/no_woman_no_cry.sg", - "bob_marley/redemption_song.sg", - "boby_lapointe/aragon_et_castille.sg", - "buena_vista_social_club/chan_chan.sg", - "calvin_russell/baby_i_love_you.sg", - "calvin_russell/crossroad.sg", - "calvin_russell/midnite_man.sg", - "calvin_russell/one_meat_ball.sg", - "catherine_le_forestier/la_petite_fugue.sg", - "charles_aznavour/mes_emmerdes.sg", - "christophe/aline.sg", - "christophe/les_mots_bleus.sg", - "coldplay/paradise.sg", - "crash_test_dummies/mmm_mmm.sg", - "damien_rice/cannonball.sg", - "daniel_guichard/mon_vieux.sg", - "daniel_lanois/jolie_louise.sg", - "dessins_animes/le_pudding_a_l_arsenic.sg", - "eddy_mitchell/il_ne_rentre_pas_ce_soir.sg", - "eddy_mitchell/pas_de_boogie_woogie.sg", - "eddy_mitchell/tu_peux_preparer_le_cafe_noir.sg", - "edith_piaf/padam_padam.sg", - "fleetwood_mac/temporary_one.sg", - "francis_cabrel/je_t_aimais_je_t_aime_et_je_t_aimerai.sg", - "francis_cabrel/l_encre_de_tes_yeux.sg", - "francis_cabrel/les_vidanges_du_diables.sg", - "georges_brassens/a_l_ombre_des_maris.sg", - "georges_brassens/supplique_pour_etre_enterre_sur_la_plage_de_sete.sg", - "gerald_de_palmas/sur_la_route.sg", - "herman_s_hermits/no_milk_today.sg", - "hk_saltimbanks/citoyen_du_monde.sg", - "hk_saltimbanks/on_lache_rien.sg", - "hk_saltimbanks/passer_ma_vie.sg", - "hubert-felix_thiefaine/sentiments_numeriques_revisites.sg", - "israel_kamakawiwo_ole/somewhere_over_the_rainbow.sg", - "jacques_higelin/je_ne_peux_plus_dire_je_t_aime.sg", - "jean-jacques_goldman/comme_toi.sg", - "jean-jacques_goldman/long_is_the_road.sg", - "jean_leloup/promeneur.sg", - "jean_leloup/sang_d_encre.sg", - "jeanne_moreau/les_mots_de_rien_du_tout.sg", - "jeanne_moreau/le_tourbillon_de_la_vie.sg", - "jean_pierre_mader/macumba.sg", - "jimi_hendrix/the_wind_cries_mary.sg", - "joe_dassin/ma_bonne_etoile.sg", - "johnny_hallyday/le_penitencier.sg", - "julien_clerc/ce_n_est_rien.sg", - "julien_clerc/melissa.sg", - "julien_clerc/travailler_c_est_trop_dur.sg", - "julien_dore/kiss_me_forever.sg", - "karpatt/en_pleine_mer.sg", - "karpatt/le_demenagement.sg", - "la_crevette_d_acier/moi_si_un_jour.sg", - "la_rue_ketanou/bonhomme_de_chien.sg", - "laura_veirs/ballad_of_john_vogelin.sg", - "laura_veirs/black_eyed_susan.sg", - "laura_veirs/icebound_stream.sg", - "laura_veirs/jailhouse_fire.sg", - "leonard_cohen/a_bunch_of_lonesome_heroes.sg", - "leonard_cohen/suzanne.sg", - "leonard_cohen/the_old_revolution.sg", - "leonard_cohen/winter_lady.sg", - "les_cowboys_fringants/l_horloge.sg", - "les_cowboys_fringants/paris_montreal.sg", - "les_fatals_picards/l_amour_a_la_francaise.sg", - "les_fatals_picards/la_securite_de_l_emploi.sg", - "les_fatals_picards/mon_pere_etait_tellement_de_gauche.sg", - "les_fatals_picards/seul_et_celibataire.sg", - "les_hurlements_d_leo/la_malle_en_mai.sg", - "les_ogres_de_barback/la_gare_de_caen.sg", - "louis_bertignac/ces_idees_la.sg", - "louis_chedid/tout_le_monde_se_presse.sg", - "lucienne_delyle/mon_amant_de_saint_jean.sg", - "marie_cherrier/les_baleines.sg", - "marie_cherrier/manouche.sg", - "matticus/le_p_tit_gars.sg", - "maxime_le_forestier/entre_14_et_40_ans.sg", - "maxime_le_forestier/fontenay_aux_roses.sg", - "maxime_le_forestier/je_ne_sais_rien_faire.sg", - "maxime_le_forestier/l_auto_stop.sg", - "maxime_le_forestier/parachutiste.sg", - "michel_fugain/forteresse.sg", - "m/la_seine.sg", - "negresses_vertes/sous_le_soleil_de_bodega.sg", - "nino_ferrer/mirza.sg", - "nirvana/dumb.sg", - "noir_desir/charlie.sg", - "noir_desir/elle_va_ou_elle_veut.sg", - "noir_desir/joey_i.sg", - "noir_desir/la_chaleur.sg", - "noir_desir/la_rage.sg", - "noir_desir/lazy.sg", - "noir_desir/le_fleuve.sg", - "noir_desir/les_ecorches.sg", - "noir_desir/si_rien_ne_bouge.sg", - "noir_desir/tu_m_donnes_le_mal.sg", - "oldelaf_et_monsieur_d/courseulles_sur_mer.sg", - "oldelaf_et_monsieur_d/le_monde_est_beau.sg", - "oldelaf_et_monsieur_d/les_mains_froides.sg", - "oldelaf_et_monsieur_d/mamy_blue.sg", - "oldelaf_et_monsieur_d/mon_testament.sg", - "oldelaf_et_monsieur_d/nous_les_vedettes.sg", - "oldelaf_et_monsieur_d/super_heros.sg", - "oldelaf_et_monsieur_d/vendredi.sg", - "pep_s/liberta.sg", - "philippe_chatel/la_compagnie_des_lapins_bleus.sg", - "pierre_perret/bernard_pivot.sg", - "pigalle/dans_la_salle_du_bar_tabac_de_la_rue_des_martyrs.sg", - "pigalle/le_chaland.sg", - "r_e_m/everybody_hurts.sg", - "renan_luce/la_lettre.sg", - "renan_luce/monsieur_marcel.sg", - "renaud/it_is_not_because_you_are.sg", - "renaud/je_suis_une_bande_de_jeunes.sg", - "renaud/la_ballade_nord_irlandaise.sg", - "renaud/la_chanson_du_loubard.sg", - "renaud/ma_gonzesse.sg", - "renaud/mort_les_enfants.sg", - "ridan/ulysse.sg", - "rita_mitsouko/c_est_comme_ca.sg", - "roger_glover/love_is_all.sg", - "rose/la_liste_de_rose.sg", - "sixpence_none_the_richer/kiss_me.sg", - "soan/emilie.sg", - "soan/pas_pour_lui.sg", - "soan/putain_de_ballerine.sg", - "soggy_bottom_boys/i_am_a_man_of_constant_sorrow.sg", - "soldat_louis/c_est_un_pays.sg", - "soldat_louis/du_rhum_des_femmes.sg", - "soldat_louis/savannah.sg", - "soldat_louis/tirer_des_caisses.sg", - "stealers_wheel/stuck_in_the_middle_with_you.sg", - "telephone/cendrillon.sg", - "telephone/new_york_avec_toi.sg", - "thomas_fersen/chocolat.sg", - "thomas_fersen/deux_pieds.sg", - "thomas_fersen/diane_de_poitiers.sg", - "thomas_fersen/dugenou.sg", - "thomas_fersen/je_n_ai_pas_la_gale.sg", - "thomas_fersen/la_malle.sg", - "thomas_fersen/le_balafre.sg", - "thomas_fersen/le_chat_botte.sg", - "thomas_fersen/les_malheurs_du_lion.sg", - "thomas_fersen/mon_iguanodon.sg", - "thomas_fersen/mon_macabre.sg", - "thomas_fersen/monsieur.sg", - "thomas_fersen/parfois_au_clair_de_lune.sg", - "thomas_fersen/pegase.sg", - "thomas_fersen/punaise.sg", - "thomas_fersen/que_l_on_est_bete.sg", - "thomas_fersen/zaza.sg", - "tonton_david/chacun_sa_route.sg", - "tracy_chapman/talkin_about_the_revolution.sg", - "vincent_delerm/la_natation_synchronisee.sg", - "william_balde/rayon_de_soleil.sg", - "yves_duteil/le_petit_pont_de_bois.sg", - "yves_simon/les_bateaux_du_metro.sg"] -} diff --git a/books/volume-5.sb b/books/volume-5.sb deleted file mode 100644 index a5ae5f62..00000000 --- a/books/volume-5.sb +++ /dev/null @@ -1,195 +0,0 @@ -{ -"template" : "patacrep.tmpl", -"lang" : "french", -"bookoptions" : [ - "diagram", - "lilypond", - "pictures" - ], -"booktype" : "chorded", -"picture" : "The_Music_Machine_by_hit_squad", -"picturecopyright" : "hit-squad @ deviantart.com", -"subtitle" : "Tome 5", -"songs" : [ - "3_doors_down/here_without_you.sg", - "adele/rolling_in_the_deep.sg", - "alain_souchon/la_ballade_de_jim.sg", - "alain_souchon/sous_les_jupes_des_filles.sg", - "america/a_horse_with_no_name.sg", - "anis/dans_tes_yeux.sg", - "antoine/les_elucubrations.sg", - "arlo_guthrie/hobos_lullaby.sg", - "as_de_trefle/a_l_oreille_de_ta_femme.sg", - "as_de_trefle/chanson_d_amur.sg", - "as_de_trefle/la_revolution.sg", - "as_de_trefle/pauvre_planete.sg", - "as_de_trefle/toi_toi_toi.sg", - "axel_bauer/eteins_la_lumiere.sg", - "balbino_medellin/super_heros.sg", - "belyscendre/helas_madame.sg", - "billy_ray_cyrus/achy_breaky_heart.sg", - "bloodhound_gang/fire_water_burn.sg", - "bob_dylan/i_want_you.sg", - "bob_seger/against_the_wind.sg", - "buddy_holly/everyday.sg", - "calvin_russell/5m2.sg", - "calvin_russell/down_down_down.sg", - "charles_aznavour/comme_ils_disent.sg", - "charlie_winston/like_a_hobo.sg", - "coluche/sois_faineant.sg", - "cranberries/dreaming_my_dreams.sg", - "cranberries/linger.sg", - "cranberries/no_need_to_argue.sg", - "cranberries/ode_to_my_family.sg", - "creedence_clearwater_revival/bad_moon_rising.sg", - "crep/ptit_pingouin.sg", - "daniel_powter/bad_day.sg", - "debout_sur_le_zinc/aller_simple.sg", - "debout_sur_le_zinc/comme_un_frisson.sg", - "debout_sur_le_zinc/elle_m_ennuie.sg", - "debout_sur_le_zinc/j_ai_deja_donne.sg", - "debout_sur_le_zinc/je_cherche_encore.sg", - "debout_sur_le_zinc/les_angles.sg", - "debout_sur_le_zinc/scylla.sg", - "debout_sur_le_zinc/se_dire_adieu.sg", - "debout_sur_le_zinc/sur_le_fil.sg", - "dire_straits/brothers_in_arms.sg", - "eddy_mitchell/la_derniere_seance.sg", - "etienne_daho/comme_un_boomerang.sg", - "francis_cabrel/la_corrida.sg", - "francis_cabrel/octobre.sg", - "gary_jules/mad_world.sg", - "georges_brassens/les_trompettes_de_la_renommee.sg", - "georges_brassens/l_orage.sg", - "georges_brassens/pour_me_rendre_a_mon_bureau.sg", - "georges_brassens/quatre-vingt-quinze-pour-cent.sg", - "gerard_dalton/la_sorciere_grabouilla.sg", - "gerry_rafferty/to_each_and_everyone.sg", - "gilbert_becaud/et_maintenant.sg", - "gilles_dreu/alouette.sg", - "gospel/lord_i_want_to_be_a_christian.sg", - "gotye/somebody_that_i_used_to_know.sg", - "graeme_allwright/la_ligne_holworth.sg", - "green_day/misery.sg", - "gregoire/toi_moi.sg", - "hk_saltimbanks/indignez-vous.sg", - "hk_saltimbanks/niquons_la_planete.sg", - "hoobastank/the_reason.sg", - "hubert-felix_thiefaine/542_lunes_et_7_jours_environ.sg", - "hubert-felix_thiefaine/ad_orgasmum_aeternum.sg", - "hubert-felix_thiefaine/alligators_427.sg", - "hubert-felix_thiefaine/la_deche_le_twist_et_le_reste.sg", - "hubert-felix_thiefaine/la_fille_du_coupeur_de_joints.sg", - "hubert-felix_thiefaine/la_fin_du_saint_empire_romain_germanique.sg", - "hubert-felix_thiefaine/la_mome_kaleidoscope.sg", - "hubert-felix_thiefaine/le_chant_du_fou.sg", - "hubert-felix_thiefaine/lorelei_Sebasto_Cha.sg", - "hubert-felix_thiefaine/maison_borniol.sg", - "hubert-felix_thiefaine/sweet_amanite_phalloide_queen.sg", - "iggy_pop/in_the_death_car.sg", - "jacques_brel/au_suivant.sg", - "jacques_dutronc/la_fille_du_pere_noel.sg", - "jali/espanola.sg", - "jean-jacques_goldman/et_l_on_y_peut_rien.sg", - "jean-jacques_goldman/on_ira.sg", - "joe_dassin/a_toi.sg", - "john_denver/last_hobo.sg", - "johnny_hallyday/gabrielle.sg", - "karpatt/la_chose_qui_dort_dans_mon_lit.sg", - "kenny_rogers/the_greatest.sg", - "la_chanson_du_dimanche/super_pouvoir_d_achat.sg", - "la_maison_tellier/babouin.sg", - "la_rue_ketanou/ou_je_vais.sg", - "la_rue_ketanou/sao_loucas.sg", - "le_clandestin/rue_grenelle.sg", - "le_donjon_de_naheulbeuk/chicken_quest.sg", - "le_donjon_de_naheulbeuk/crom.sg", - "le_donjon_de_naheulbeuk/he_la_petite_dame.sg", - "le_donjon_de_naheulbeuk/la_hache_durandil.sg", - "le_donjon_de_naheulbeuk/le_petit_gobelin.sg", - "le_donjon_de_naheulbeuk/maitre_du_donjon.sg", - "le_donjon_de_naheulbeuk/tralala_du_nain.sg", - "les_amis_d_ta_femme/le_tango_du_viagra.sg", - "les_booze_brothers/fields_of_athenry.sg", - "les_booze_brothers/i_m_sorry.sg", - "les_cowboys_fringants/8_secondes.sg", - "les_cowboys_fringants/ces_temps_ci.sg", - "les_cowboys_fringants/hannah.sg", - "les_fatals_picards/au_mariage_de_kevin_et_de_ma_soeur.sg", - "les_innocents/un_homme_extraordinaire.sg", - "les_ogres_de_barback/le_voyageur.sg", - "les_ogres_de_barback/rue_mazarine.sg", - "les_wriggles/petit_bonhomme.sg", - "mano_solo/je_suis_venu_vous_voir.sg", - "mano_solo/pas_du_gateau.sg", - "manu_chao/bongo_bong.sg", - "manu_chao/el_viento.sg", - "manu_chao/je_ne_t_aime_plus.sg", - "maxime_le_forestier/passer_ma_route.sg", - "michael_jackson/we_are_the_world.sg", - "michel_polnareff/goodbye_maryloo.sg", - "michel_polnareff/l_amour_avec_toi.sg", - "michel_polnareff/lettre_a_france.sg", - "michel_polnareff/love_me_please_love_me.sg", - "monty_python/always_look_on_the_bright_side_of_life.sg", - "noir_desir/lola.sg", - "noir_desir/ou_veux_tu_qu_je_regarde.sg", - "noir_desir/the_holy_economic_war.sg", - "noir_desir/toujours_etre_ailleurs.sg", - "noir_desir/un_jour_en_france.sg", - "parabellum/la_belle.sg", - "parabellum/le_dernier_trocson.sg", - "parabellum/osmose_99.sg", - "pascale_picard/smilin.sg", - "patrick_coutin/j_aime_regarder_les_filles.sg", - "phil_barney/un_enfant_de_toi.sg", - "pink_floyd/another_brick_in_the_wall.sg", - "pink_floyd/comfortably_numb.sg", - "pink_floyd/hey_you.sg", - "pink_floyd/mother.sg", - "ralph_mctell/streets_of_london.sg", - "raphael/caravane.sg", - "razorlight/america.sg", - "r_e_m/losing_my_religion.sg", - "renan_luce/le_lacrymal_circus.sg", - "renaud/la_medaille.sg", - "renaud/morgane_de_toi.sg", - "roch_voisine/helene.sg", - "roch_voisine/la_legende_oochigeas.sg", - "soan/en_chemin.sg", - "soan/the_storm.sg", - "soul_asylum/runaway_train.sg", - "suzanne_vega/luka.sg", - "telephone/le_jour_s_est_leve.sg", - "terry_bush/maybe_tomorrow.sg", - "the_beach_boys/surfin_usa.sg", - "the_bloody_irish_boys/drunk_tonight.sg", - "the_dubliners/the_wild_rover.sg", - "the_kingston_trio/greenback_dollar.sg", - "the_rolling_stones/gimme_shelter.sg", - "the_rolling_stones/mother_s_little_helper.sg", - "thomas_fersen/au_cafe_de_la_paix.sg", - "thomas_fersen/bambi.sg", - "thomas_fersen/borborygmes.sg", - "thomas_fersen/cosmos.sg", - "thomas_fersen/croque.sg", - "thomas_fersen/irene.sg", - "thomas_fersen/le_bouton.sg", - "thomas_fersen/les_cravates.sg", - "thomas_fersen/l_histoire_d_une_heure.sg", - "thomas_fersen/louise.sg", - "thomas_fersen/rititi_ratata_il_parait_qu_elles_aiment_.sg", - "thomas_fersen/saint_jean_du_doigt.sg", - "tom_petty/american_girl.sg", - "tournee_generale/avancer_mes_grolles.sg", - "traditionnel/greensleeves.sg", - "traditionnel/il_pleut_bergere.sg", - "traditionnel/sur_le_pont_d_avignon.sg", - "u2/one.sg", - "vincent_malone/bad_bili.sg", - "walz/comme_on_dit.sg", - "yves_jamait/etc.sg", - "yves_jamait/jean-louis.sg", - "yves_simon/diabolo_menthe.sg", - "yves_simon/les_bateaux_du_metro.sg"] -} diff --git a/img/Mousey_Band_by_Duffzilla.jpg b/img/Mousey_Band_by_Duffzilla.jpg deleted file mode 100644 index f1b821c3..00000000 Binary files a/img/Mousey_Band_by_Duffzilla.jpg and /dev/null differ diff --git a/img/Music_by_Katie8594.jpg b/img/Music_by_Katie8594.jpg deleted file mode 100644 index 7f7fa154..00000000 Binary files a/img/Music_by_Katie8594.jpg and /dev/null differ diff --git a/img/The_Music_Machine_by_hit_squad.jpg b/img/The_Music_Machine_by_hit_squad.jpg deleted file mode 100644 index e59148a2..00000000 Binary files a/img/The_Music_Machine_by_hit_squad.jpg and /dev/null differ diff --git a/img/by.pdf b/img/by.pdf deleted file mode 100644 index cf506f74..00000000 Binary files a/img/by.pdf and /dev/null differ diff --git a/img/capodastre.pdf b/img/capodastre.pdf deleted file mode 100644 index 9b281f28..00000000 Binary files a/img/capodastre.pdf and /dev/null differ diff --git a/img/feel-the-music.jpg b/img/feel-the-music.jpg deleted file mode 100644 index f2e61100..00000000 Binary files a/img/feel-the-music.jpg and /dev/null differ diff --git a/img/internet.png b/img/internet.png deleted file mode 100644 index 43299f17..00000000 Binary files a/img/internet.png and /dev/null differ diff --git a/img/license.pdf b/img/license.pdf deleted file mode 100644 index 8260786a..00000000 Binary files a/img/license.pdf and /dev/null differ diff --git a/img/music_by_lauratheartist.jpg b/img/music_by_lauratheartist.jpg deleted file mode 100644 index d43f7f63..00000000 Binary files a/img/music_by_lauratheartist.jpg and /dev/null differ diff --git a/img/nb_barbarian.jpg b/img/nb_barbarian.jpg deleted file mode 100644 index 162651c9..00000000 Binary files a/img/nb_barbarian.jpg and /dev/null differ diff --git a/img/nb_chest.jpg b/img/nb_chest.jpg deleted file mode 100644 index 86dd1d5d..00000000 Binary files a/img/nb_chest.jpg and /dev/null differ diff --git a/img/nb_cover.jpg b/img/nb_cover.jpg deleted file mode 100644 index 71c0a438..00000000 Binary files a/img/nb_cover.jpg and /dev/null differ diff --git a/img/nb_dwarf_01.jpg b/img/nb_dwarf_01.jpg deleted file mode 100644 index 8589d41c..00000000 Binary files a/img/nb_dwarf_01.jpg and /dev/null differ diff --git a/img/nb_dwarf_02.jpg b/img/nb_dwarf_02.jpg deleted file mode 100644 index b709fccc..00000000 Binary files a/img/nb_dwarf_02.jpg and /dev/null differ diff --git a/img/nb_elf_01.jpg b/img/nb_elf_01.jpg deleted file mode 100644 index f7bb81a6..00000000 Binary files a/img/nb_elf_01.jpg and /dev/null differ diff --git a/img/nb_elf_02.jpg b/img/nb_elf_02.jpg deleted file mode 100644 index 15e09619..00000000 Binary files a/img/nb_elf_02.jpg and /dev/null differ diff --git a/img/nb_ogre.jpg b/img/nb_ogre.jpg deleted file mode 100644 index e39b09f3..00000000 Binary files a/img/nb_ogre.jpg and /dev/null differ diff --git a/img/nb_ranger.jpg b/img/nb_ranger.jpg deleted file mode 100644 index b85949ff..00000000 Binary files a/img/nb_ranger.jpg and /dev/null differ diff --git a/img/nb_wizard.jpg b/img/nb_wizard.jpg deleted file mode 100644 index 7f4fb120..00000000 Binary files a/img/nb_wizard.jpg and /dev/null differ diff --git a/img/on-fire.pdf b/img/on-fire.pdf deleted file mode 100644 index e46f6463..00000000 Binary files a/img/on-fire.pdf and /dev/null differ diff --git a/img/remix.pdf b/img/remix.pdf deleted file mode 100644 index d78c6e65..00000000 Binary files a/img/remix.pdf and /dev/null differ diff --git a/img/sa.pdf b/img/sa.pdf deleted file mode 100644 index 51b76be2..00000000 Binary files a/img/sa.pdf and /dev/null differ diff --git a/img/share.pdf b/img/share.pdf deleted file mode 100644 index ebef7d2f..00000000 Binary files a/img/share.pdf and /dev/null differ diff --git a/img/sound.jpg b/img/sound.jpg deleted file mode 100644 index 7742c080..00000000 Binary files a/img/sound.jpg and /dev/null differ diff --git a/img/src/by-sa.svg b/img/src/by-sa.svg deleted file mode 100644 index 882db970..00000000 --- a/img/src/by-sa.svg +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/src/by.svg b/img/src/by.svg deleted file mode 100644 index f0829098..00000000 --- a/img/src/by.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - -image/svg+xml - - \ No newline at end of file diff --git a/img/src/capodastre.svg b/img/src/capodastre.svg deleted file mode 100644 index fc42972d..00000000 --- a/img/src/capodastre.svg +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/src/internet.svg b/img/src/internet.svg deleted file mode 100644 index aeec764a..00000000 --- a/img/src/internet.svg +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/src/remix.svg b/img/src/remix.svg deleted file mode 100644 index 739fac9c..00000000 --- a/img/src/remix.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - -image/svg+xml - - \ No newline at end of file diff --git a/img/src/sa.svg b/img/src/sa.svg deleted file mode 100644 index 5d10a13e..00000000 --- a/img/src/sa.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - -image/svg+xml - - \ No newline at end of file diff --git a/img/src/share.svg b/img/src/share.svg deleted file mode 100644 index c49a2a70..00000000 --- a/img/src/share.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - -image/svg+xml - - \ No newline at end of file diff --git a/lilypond/10_sous_dans_ma_poche-1.ly b/lilypond/10_sous_dans_ma_poche-1.ly deleted file mode 100644 index 7c481034..00000000 --- a/lilypond/10_sous_dans_ma_poche-1.ly +++ /dev/null @@ -1,13 +0,0 @@ -\include "header" -\paper{paper-height = 2.5\cm} - -\new \songbookstaff -{ - \relative c' - { - \time 2/4 - a'4~ a8 a16 b %\break - \repeat volta 2 {d8 c16 b~ b8 a16 b d8 c16 b~ b4 e,8 a16\trill g a8 b16 g \break d'8. c16 b8\trill a16 b } - \alternative { {c8 b\trill a8 b16 c} {c16 a b g a4\trill} } - } -} diff --git a/lilypond/10_sous_dans_ma_poche-2.ly b/lilypond/10_sous_dans_ma_poche-2.ly deleted file mode 100644 index b52d8218..00000000 --- a/lilypond/10_sous_dans_ma_poche-2.ly +++ /dev/null @@ -1,30 +0,0 @@ -\include "header" -\paper{paper-height = 4\cm} - -\new \songbookstaff -{ - \relative c' - { - \key a \minor - \time 2/4 - \partial 8 e8 - - \repeat volta 2 - { - a8\trill a16 a g8 a16 b c8 c b16\trill a b g - a8 a16 b g8 a16 b c16 a b g a4 - } - - \repeat volta 2 - { - c8 c b8.\trill a16 b16 a g fis e4 - a8 a16 b g8 a16 b - } - - \alternative - { - {c8 c b16\trill a b8} - {c16 a b g a4\trill} - } - } -} diff --git a/lilypond/8_secondes.ly b/lilypond/8_secondes.ly deleted file mode 100644 index 91a48a80..00000000 --- a/lilypond/8_secondes.ly +++ /dev/null @@ -1,19 +0,0 @@ -\include "header" -\paper { - paper-width = 8.5\cm - line-width = 8\cm - paper-height = 3\cm -} - -\score -{ << - - \relative c''' - { \key a \major - cis8\accent b\accent a\accent gis\accent a\accent gis\accent fis\accent e\accent - fis4 a cis,4. fis8 fis8 fis fis a gis8. fis16 e8 fis cis4 \times 2/3 {b8 cis b} a4_^ e_^ - b'8 b b cis d4 cis8 b b a b e a a a4 - a8\accent a\accent a\accent a\accent a\accent a\accent b\accent a\accent cis4\accent b\accent a\accent gis\accent - } - >> -} \ No newline at end of file diff --git a/lilypond/A_l_aventure_compagnons.ly b/lilypond/A_l_aventure_compagnons.ly deleted file mode 100644 index d11a340a..00000000 --- a/lilypond/A_l_aventure_compagnons.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 5.6\cm} - -\new \songbookstaff -{ - \key ees \major - \time 2/4 - \relative c'' - { - << {g'2 f8. g16 aes4~ aes4 g8. f16 ees8. d16} \\ {bes'2 aes8. g16 f4~ f4 ees8. d16 c8. bes16} >> - << {c4}\\{aes4} >> bes2 - c8. bes16 c8. d16 ees8. g16 f8. d16 ees4 << {g4~ g4}\\{bes4~ bes} >> ees,8. g16 - \repeat volta 4 { bes8. g16 ees8. g16 bes8. g16 ees8. g16 } - \alternative { {bes8. g16 \times 2/3 { bes,8 c d } \times 2/3 { ees f g } ees8. g16} { bes4 << {g4~ g2}\\{bes4~ bes2} >> } } - } -} diff --git a/lilypond/Bonhomme_de_chien.ly b/lilypond/Bonhomme_de_chien.ly deleted file mode 100644 index 4da2b221..00000000 --- a/lilypond/Bonhomme_de_chien.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper{ - paper-height = 2.4\cm - paper-width = 13.0\cm - line-width = 12.0\cm -} - -\new \songbookstaff -{ - \time 4/4 - \relative c'' - { - {a4. g16 f16 g4. f16 e16 f8 g16 f e8 d e16 d c d e8} - {f16 e d4. e16 f g4. f16 e f e f e f8 e16 d e d c d e8 d} - {a'4. g16 f16 g4. f16 e16 f8 g16 f e8 d e16 d c d e8 d16 e} - {f4. g16 f g4. f16 e f4. e16 d e d c d e4} - } -} diff --git a/lilypond/C_est_un_pays.ly b/lilypond/C_est_un_pays.ly deleted file mode 100644 index 8b7e5dd7..00000000 --- a/lilypond/C_est_un_pays.ly +++ /dev/null @@ -1,9 +0,0 @@ -\include "header" -\paper{paper-height = 2.6\cm} - -{ - \time 4/4 - \relative c'' - { - a2 e' d c4 b a2 e' d c4 b c2 g' f e4 d c2 g' f1 g1} -} diff --git a/lilypond/Chanson_d_amur.ly b/lilypond/Chanson_d_amur.ly deleted file mode 100644 index 95a57e4c..00000000 --- a/lilypond/Chanson_d_amur.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - - - - -{ - \key g \minor \time 4/4 - \relative c' - - { - \repeat volta 2 {c8 d ees g f a c a - bes d bes g bes4 g8 d - c d ees g f a c a} - \alternative { - {bes d4. bes8 d4 bes8} - {bes1}} - } - -} diff --git a/lilypond/Chanson_pour_Pierrot.ly b/lilypond/Chanson_pour_Pierrot.ly deleted file mode 100644 index d2f672ad..00000000 --- a/lilypond/Chanson_pour_Pierrot.ly +++ /dev/null @@ -1,13 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key fis \minor - \relative c' - { - \time 6/8 - r8 fis8 gis a8 b cis d8 e fis gis8 a b cis2. - r8 cis8 b a8 gis fis fis8 e d d8 cis b cis2. - } -} diff --git a/lilypond/Cupidon_s_en_fout.ly b/lilypond/Cupidon_s_en_fout.ly deleted file mode 100644 index 72078f78..00000000 --- a/lilypond/Cupidon_s_en_fout.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key a \minor - \time 2/4 - \relative c'' - { - r8 a16 b c8 a c a b g e - c16 d e8 c d d e e a - a16 b c a e'8~ e c b g e - c16 d e c e c d8 d e e a2 - } -} - - diff --git a/lilypond/Dans_la_tete.ly b/lilypond/Dans_la_tete.ly deleted file mode 100644 index 085e7229..00000000 --- a/lilypond/Dans_la_tete.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \relative c'' - { - \key a \minor - \time 6/8 - a4.~ a8 g a - a4.~ a8 g a - a4.~ a8 g a - b4.~ b8 a g - a4 c8 c4 b8 - c4.~ c8 b a e2. - b'4.~ b8 a g - c4 d8 c4 b8 - c4.~ c8 b c c2. - } -} diff --git a/lilypond/Droit_devant-1.ly b/lilypond/Droit_devant-1.ly deleted file mode 100644 index b772ec97..00000000 --- a/lilypond/Droit_devant-1.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key d \minor - \relative c'' - { - \repeat volta 2 - { - a8. bes16 c8 d c bes a4 a8. bes16 a8 g a g f4 - e8. f16 g8 a g f e4 e8. f16 e8 d e d c4 - } - } -} - diff --git a/lilypond/Droit_devant-2.ly b/lilypond/Droit_devant-2.ly deleted file mode 100644 index 687b1cd9..00000000 --- a/lilypond/Droit_devant-2.ly +++ /dev/null @@ -1,12 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \key d \minor - \relative c'' - { - e4 c g c8 b a4 c e f d1 - } - -} diff --git a/lilypond/Education_sentimentale.ly b/lilypond/Education_sentimentale.ly deleted file mode 100644 index 71fcd877..00000000 --- a/lilypond/Education_sentimentale.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 2.5\cm} - -\new \songbookstaff -{ - \key c \major - \time 3/4 - \relative c''{ - e8 f e d c b a gis a b c a d e f e - << - {d4 r2. } \\ - {r8 g,8 f' e d4 g,4} - >> - << - {e'8 f e d c b a g a b c a d c b4. c8 c2.} \\ - {g'8 a g f e d c b c d e c f e d4. c8 c2.} - >> - } -} - diff --git a/lilypond/En_chemin.ly b/lilypond/En_chemin.ly deleted file mode 100644 index a1531a99..00000000 --- a/lilypond/En_chemin.ly +++ /dev/null @@ -1,50 +0,0 @@ -\include "header" -\paper{ - paper-height =3\cm - paper-width= 10\cm - line-width= 10\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \key e \minor - \numericTimeSignature - \time 4/4 - \repeat volta 2 { - 4-. b'\2-. g'\3-. e'\3-. dis'\3-. e'\3-. fis'\3-. 8-. fis'\3-. - 4-. b'\2-. g'\3-. e'\3-. dis'\3-. e'\3-. 2\prall - } - 8. 16 8 8 4. 8~ - 1\prall - % 8. 16 8 8 4. 8~ - % 1\prall -} -\score { - << - - \new Staff - - { - \override Staff.StringNumber #'transparent = -##t - \clef "G_8" \symbols } - %\chords { e1:m } - \new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - \symbols } - >> -} diff --git a/lilypond/Entre_deux_taxis.ly b/lilypond/Entre_deux_taxis.ly deleted file mode 100644 index 67cd6a1b..00000000 --- a/lilypond/Entre_deux_taxis.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key c \major - \time 4/4 - \relative c'' - { - g4 g g a8. b16 b2. - g4 a a8. a16 a8 a g a b1 - e4 e8. e16 e8 e d c b2. - b8. b16 a4 b2 a8. g16 e1 - } -} - diff --git a/lilypond/Et_si_je_t_aime.ly b/lilypond/Et_si_je_t_aime.ly deleted file mode 100644 index f92b5f8f..00000000 --- a/lilypond/Et_si_je_t_aime.ly +++ /dev/null @@ -1,27 +0,0 @@ -\include "header" -\paper{paper-height = 5.2\cm} - -\new \songbookstaff -{ - \relative c''' - { - \key c \major - \time 2/4 - \partial 8 g8 - %harmonica - c4. g8 a8 g4 e8 f2~ f4 g8 f8 e2 f8 e4 c8 d2~ d8 - d16 e16 f8 d8 e8 d4 c8 f8 e4 c8 d2~ d8 - d16 e16 f8 d8 e8 d4 c8 f8 e4 c8 g'2 - - %guitare - \repeat volta 2 - { - g8 f4 e8 c8 d4 e8 d4~ d8 d16 e16 f8 e4 d8 - } - e8 d4 c8 f8 e4 c8 d4~ d8 d16 e16 f8 e4 d8 e8 d4 c8 f8 e4 c8 g'2 - - } - - -} - diff --git a/lilypond/Eteins_la_lumiere.ly b/lilypond/Eteins_la_lumiere.ly deleted file mode 100644 index 43b5e430..00000000 --- a/lilypond/Eteins_la_lumiere.ly +++ /dev/null @@ -1,47 +0,0 @@ -\include "header" -\paper{ - paper-height =3.5\cm - paper-width= 10\cm - line-width= 10\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \key a \minor - \numericTimeSignature - \time 4/4 - \repeat volta 2 { - 8 g,\6 a, c\5 a, g,\6 ~ - 8 g,\6 a, c\5 a, g,\6 - 4 4 84 8~ - 8 8 4 84 8 } -} -\score { - << - - \new Staff - - { - \override Staff.StringNumber #'transparent = -##t - \clef "G_8" \symbols } - \chords { \set chordChanges = ##t \powerChords a1:1.5 | a1:1.5 | d4 d4.:sus4 d4. | d4 d4.:sus4 d4. } - \new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - \symbols } - >> -} diff --git a/lilypond/Etoiles_filantes-1.ly b/lilypond/Etoiles_filantes-1.ly deleted file mode 100644 index 9672860d..00000000 --- a/lilypond/Etoiles_filantes-1.ly +++ /dev/null @@ -1,13 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \relative c' - { - \repeat volta 2 - { - e'8 d e a, e' d e a, d c d g, d' c d g, - } - } -} diff --git a/lilypond/Etoiles_filantes-2.ly b/lilypond/Etoiles_filantes-2.ly deleted file mode 100644 index 1b2c0c13..00000000 --- a/lilypond/Etoiles_filantes-2.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \relative c'' - { - \repeat volta 2 - { - a4 a8. b16 c8 d e d b4 b8. b16 b8 c b a - g4 g8. g16 g8 a b a - } - - \alternative - { - {a4. a8 g' f4 e8} {a,1} - } - } -} - diff --git a/lilypond/Everybody_hurts.ly b/lilypond/Everybody_hurts.ly deleted file mode 100644 index 11b62b16..00000000 --- a/lilypond/Everybody_hurts.ly +++ /dev/null @@ -1,28 +0,0 @@ -\include "header" -\paper{ - paper-height = 3.1\cm - paper-width= 7.1\cm -} - -symbols = { - - d8 a d' fis' d' a d a d' fis' d' a - g, g d' g' d' g g, g d' fis, g d' - e, b, e e' b g e, b, e e' b g - a, e a e' b g a, e a a, g, fis, -} - -\score { - - << - - %\new Staff { \clef "G_8" \symbols } - \chords {d1. g e:m a } - \new TabStaff { - \numericTimeSignature - \time 12/8 - \symbols } - - >> -} - diff --git a/lilypond/Fairytale_of_New_York.ly b/lilypond/Fairytale_of_New_York.ly deleted file mode 100644 index 7848edf1..00000000 --- a/lilypond/Fairytale_of_New_York.ly +++ /dev/null @@ -1,27 +0,0 @@ -\include "header" -\paper{paper-height = 2.8\cm} - -\new \songbookstaff -{ - \key d \major - \time 2/4 - \partial 8 a'8 - \relative c'' - { - b8 g cis e a, d, g fis e8. d16 d4 - } - - \time 6/8 - a'8.^\markup { - ( - \smaller \general-align #Y #DOWN \note #"4" #1 - = - \smaller \general-align #Y #DOWN \note #"4." #1 - ) } - - \relative c'' - { - b16 a8 fis d fis a8. b16 a8 e8. fis16 e8 - fis e d b a b a b cis d4. - } -} diff --git a/lilypond/Fuck_you.ly b/lilypond/Fuck_you.ly deleted file mode 100644 index 121435f4..00000000 --- a/lilypond/Fuck_you.ly +++ /dev/null @@ -1,15 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \key c \major - \time 4/4 - \relative c''{ - c4 g8 e4 c'8 g4 - b4 g8 g4 b8 g4 - f4 f8 c4 f8 a4 - b4 g8 g4 b8 g4 - } -} - diff --git a/lilypond/Geste_heroique-1.ly b/lilypond/Geste_heroique-1.ly deleted file mode 100644 index 45e97bfd..00000000 --- a/lilypond/Geste_heroique-1.ly +++ /dev/null @@ -1,38 +0,0 @@ -\include "header" -\paper{paper-height = 5.0\cm} - - -musique = -{ - \parallelMusic #'(voiceA voiceB voiceC voiceD) - { - \repeat volta 2 {a'2 a'4 g' a' b' c''2 c''4 e'' d'' c'' c'' b' c''2 } | - \repeat volta 2 {e'2 e'4 d' e' g' g'2 g'4 g' fis' g' a' g' g'2 } | - \repeat volta 2 {c'2 c'4 b c' d' e'2 e'4 c' a e' d' d' e'2 } | - \repeat volta 2 {a2 a4 e a g c2 c4 c d e f g c2 } | - - \repeat volta 2 {c''2 b'4 b' a' a' gis'2 gis' fis'8 gis' a'4 a' gis' a'2 } | - \repeat volta 2 {g'2 g'4 g' e' f' e'2 e' d'4 e'4 e' e' cis'2 } | - \repeat volta 2 {e'2 d'4 e' c' d' b2 c' a4 c'4 b b a2 } | - \repeat volta 2 {c'2 g4 e a d e2 c d4 a,4 e e a,2 } | - } -} -\score -{ - \new PianoStaff - << - \musique - \new Staff - { - \key a \minor - << \voiceA \\ \voiceB >> - } - \new Staff - { - \key a \minor - \clef bass - << \voiceC \\ \voiceD >> - } - >> -} - diff --git a/lilypond/Geste_heroique-2.ly b/lilypond/Geste_heroique-2.ly deleted file mode 100644 index e77682bc..00000000 --- a/lilypond/Geste_heroique-2.ly +++ /dev/null @@ -1,22 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 2/4 - \key c \major - \repeat volta 2 - { - e8 f g8 e d4 e8 g c,4 d8 f e d16 c b4 - c8. d16 c d c b a8 b c e b c b4 - } - \alternative - { - {a8. b16 cis4} - {a2\trill} - } - } -} - diff --git a/lilypond/Hannah_1.ly b/lilypond/Hannah_1.ly deleted file mode 100644 index 1d87155a..00000000 --- a/lilypond/Hannah_1.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 1.2\cm} - - - - -{ - \key d \major \time 4/4 - \relative c'' - { - d8. cis16 d8 a' g2 - cis,4 d8 e fis e d cis - b4 d e fis8 g - cis,2 b} - -} diff --git a/lilypond/Hannah_2.ly b/lilypond/Hannah_2.ly deleted file mode 100644 index e9b1781a..00000000 --- a/lilypond/Hannah_2.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - - - - -{ - \key d \major \time 4/4 - \relative c'' - { - e4. d16 e fis8 e d d - e4. a16 e g8 fis e4 - fis4. b8 b a16 g fis4 - fis4. cis'8 b2} - -} diff --git a/lilypond/Heart_of_gold.ly b/lilypond/Heart_of_gold.ly deleted file mode 100644 index 712c4c0d..00000000 --- a/lilypond/Heart_of_gold.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key g \major - \time 2/4 - \partial 4 {g'8 b'} - \relative c'' - { - d4 c16 b8. a4 g8 d8~ d2 - r4 d'4 g4 e16 d8. e4 d8 b8~ b2 - r4 g16 g8 g16 b16 b8 b16 b16 b8 b16 a4 b8 g8~ g2 - } -} - diff --git a/lilypond/Holy_economic_war.ly b/lilypond/Holy_economic_war.ly deleted file mode 100644 index 94f3f742..00000000 --- a/lilypond/Holy_economic_war.ly +++ /dev/null @@ -1,51 +0,0 @@ -\include "header" -\paper{ - paper-height = 3 \cm - paper-width= 13.4\cm - line-width= 13.2\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - \repeat volta 2 { - 8 g, - 8 g, } - \alternative { - { a,4 g,16 a, \bendAfter#1 c8 a,8 4. } - { a,4 c16 a, \bendAfter#1 g,8 a,8 4. } -} -\repeat volta 2 { - a,16^"riff" e a e c8 a, c16 e a e c16 e a e } -} - -\score { - << - - \new Staff - - { - \override Staff.StringNumber #'transparent = -##t - \clef "G_8" \symbols } - \chords { c4 g c g | a1:m | a1:m | a2:m c4 g4 } - \new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - \symbols } - >> -} diff --git a/lilypond/Il_pleut_bergere.ly b/lilypond/Il_pleut_bergere.ly deleted file mode 100644 index f28e6f3c..00000000 --- a/lilypond/Il_pleut_bergere.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper{paper-height = 4.8\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 6/8 - \key g \major - \partial 8 b8 - d4 b8 d4 b8 g4. d4. - g8. fis16 g8 a4 a8 b2. - b8. a16 b8 c4 c8 d4. b4. d8. e16 d8 d (c) b b4. (a4.) - a8. b16 a8 a4 c8 b4. d4. - c8. b16 a8 b4 g8 b4. (a4) b8 - d4 b8 d4 b8 c4. e4. d8. e16 d8 a4 b8 g2. - } -} diff --git a/lilypond/J_ai_deja_donne.ly b/lilypond/J_ai_deja_donne.ly deleted file mode 100644 index e9a3a120..00000000 --- a/lilypond/J_ai_deja_donne.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper { - paper-width = 8.5\cm - line-width = 8\cm - paper-height = 2.5\cm -} - -\score -{ << - - \relative c'' - { \key g \major - \repeat volta 2 {g16 fis e4 d8 e4. fis16 g b c a4 g8 fis8. g16 a4} - b4 e,8. b'16 c4 e,8. b'16 a4. g8 a16 b16 a4.~ a2 - r8 a16 g fis8 g a2 r8 a16 g fis8 e dis1 - } - >> -} \ No newline at end of file diff --git a/lilypond/Jessica.ly b/lilypond/Jessica.ly deleted file mode 100644 index ff57850d..00000000 --- a/lilypond/Jessica.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper{paper-height = 1.2\cm} - -\new \songbookstaff -{ - \key c \major - \time 2/4 - \relative c'' - { - \repeat volta 2 - { - c2 d2 e8. f16 g8. f16~ f8. e16 d4 - c2 d2 e8. f16 g8. c16~ c8. g16 e8. d16 - } - c2 - } -} - diff --git a/lilypond/Keep_on_the_sunny_side.ly b/lilypond/Keep_on_the_sunny_side.ly deleted file mode 100644 index 157d133c..00000000 --- a/lilypond/Keep_on_the_sunny_side.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key bes \major - \time 2/4 - \relative c' - { - r8 f g a bes4 d8. bes16 c8 bes a g f2~ - f4 bes8 d f4 f8. g16 f8 d bes d c2~ - c4 c8 d ees4 d8 c f8. g16 f8 ees d8. d16 d8 c bes4 - bes8 d c8. c16 d8 c a f g a bes2 - } -} - - diff --git a/lilypond/Kiss_me_forever.ly b/lilypond/Kiss_me_forever.ly deleted file mode 100644 index b51dc272..00000000 --- a/lilypond/Kiss_me_forever.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{ - paper-height = 0.8\cm - paper-width = 3\cm - line-width = 2.7\cm -} - -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - \autoBeamOff - a8[ a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - a8[ a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - } - } ->> \ No newline at end of file diff --git a/lilypond/Kiss_the_children.ly b/lilypond/Kiss_the_children.ly deleted file mode 100644 index e7a11c95..00000000 --- a/lilypond/Kiss_the_children.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key c \minor - \time 6/8 - \relative c' - { - \partial 8 c8 - g'4 g8 f8. d16 f8 g4. r4 - c,8 c'4 bes8 d4 f,8 g4. r8. - g16 g bes c4 bes16 g bes4 d,8 f4. r4 - g8 g4 g8 f4 d8 c2. - } -} - diff --git a/lilypond/L_harmonica.ly b/lilypond/L_harmonica.ly deleted file mode 100644 index cb3b62cc..00000000 --- a/lilypond/L_harmonica.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 5.0\cm} - -\new \songbookstaff -{ - \key a \minor - \time 2/4 - \partial 4 e''8. d''16 - \relative c'' - { - c8 a a g e a a c b g16 a b8 g a4. - e'16 d c8 a a g e a a e' e8. d16 c8 b a4. - g8 c8. c16 c8 e d8. d16 d8 e c c a c b4. - e16 d c8 a a g e a a e' e8. d16 c8 b a2 - } -} - diff --git a/lilypond/La_biere_du_donjon.ly b/lilypond/La_biere_du_donjon.ly deleted file mode 100644 index 4ec50f10..00000000 --- a/lilypond/La_biere_du_donjon.ly +++ /dev/null @@ -1,15 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 6/8 - \key a \minor - \partial 8 e8 - b4 e8 c4 e8 e16 d c8 b c a e' %\break - b4 e8 c4 e8 e16 d c8 b a4. - } -} - diff --git a/lilypond/La_blanche.ly b/lilypond/La_blanche.ly deleted file mode 100644 index 58856201..00000000 --- a/lilypond/La_blanche.ly +++ /dev/null @@ -1,15 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \key d \major - \relative c'' - { - \time 6/8 - e16 fis g a g fis e4. - e16 fis g a g fis e4. - b'16 a g a g fis e4. - e16 fis g a g fis e fis e d cis b ais8 ais cis fis4. dis8 dis fis b4. - } -} diff --git a/lilypond/La_compagnie_du_chien_rugissant.ly b/lilypond/La_compagnie_du_chien_rugissant.ly deleted file mode 100644 index 0cc95317..00000000 --- a/lilypond/La_compagnie_du_chien_rugissant.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \relative c'' - { - \key c \minor - \time 6/8 - \partial 8 c8 - ees8. f16 g8 f8. ees16 d8 c d bes c4. - } -} - diff --git a/lilypond/La_cumbia_del_mole.ly b/lilypond/La_cumbia_del_mole.ly deleted file mode 100644 index 573330fc..00000000 --- a/lilypond/La_cumbia_del_mole.ly +++ /dev/null @@ -1,22 +0,0 @@ -\include "header" -\paper{paper-height = 2.5\cm} - -\new \songbookstaff -{ - \key e \minor - \time 2/2 - \relative c''' - { - \repeat volta 2 - { - g2 fis8 e4 dis8 e4. b8~ b4 e4 - } - \alternative - { - { dis4. c4 b4 a8 b1 } - - { dis4. e4 fis4 dis8 e4. b4 g4 fis8 e1 } - } - } -} - diff --git a/lilypond/La_danse_des_esquimaux.ly b/lilypond/La_danse_des_esquimaux.ly deleted file mode 100644 index 16982618..00000000 --- a/lilypond/La_danse_des_esquimaux.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \key e \major - \time 2/4 - \relative c'' - { - \repeat volta 2 - { - e8 e16 fis gis8 e a fis gis e dis fis e dis cis2 - } - \repeat volta 2 - { - a'8 \times 2/3{a16 gis fis} f8 gis fis cis fis gis fis8 fis4 d8 cis2 - } - } -} - diff --git a/lilypond/La_declaration.ly b/lilypond/La_declaration.ly deleted file mode 100644 index e1eaacae..00000000 --- a/lilypond/La_declaration.ly +++ /dev/null @@ -1,19 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \key e \minor - \time 4/4 - \relative c'' - { - \repeat volta 2 - { - b4 g8 e c' a~ a4 - r8 b g e dis e fis g - e4. b'8 a4. g16 fis - g2 fis2 - } - } -} - diff --git a/lilypond/La_fiancee_de_l_eau.ly b/lilypond/La_fiancee_de_l_eau.ly deleted file mode 100644 index 33e23022..00000000 --- a/lilypond/La_fiancee_de_l_eau.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 3.7\cm} - -\new \songbookstaff -{ - \key d \minor - \time 6/8 - \relative c'''{ - a4. g f e8 d e - d4. e f4 g8 a bes c - bes4. a bes c8 bes a - a4. g f8 e d - e d c b c d - e d c b4 a8 b4. c d e2. - } -} - diff --git a/lilypond/La_jument_de_Michao.ly b/lilypond/La_jument_de_Michao.ly deleted file mode 100644 index ce17d5d5..00000000 --- a/lilypond/La_jument_de_Michao.ly +++ /dev/null @@ -1,90 +0,0 @@ -\include "header" -\paper{paper-height = 13.7\cm} - -\new \songbookstaff -{ - \key a \minor - \relative c'' - { - \time 2/4 - a8. d16 c8 b - \repeat volta 2 - { - a8. b16 a8 g - a8. d16 c8 b a8 a16 b a8 g - } - \alternative - { - {a8. d16 c8 b } {a4 a8 a8} - } - - \repeat volta 2 - { - a8 a16 b c8 b16 a g4 - c8 b16 c d8 c16 b a8 g - } - - \alternative - { - {a4 a8 a8} {a8. d16 c8 b} - } - - a8. b16 a8 g - a8. g16 a8 b c8. b16 a8 g a4 e8 a16 a - - \repeat volta 2 - { - a8 a16 b c8 b16 a g4 - c8 b16 c d8 c16 b a8 g - } - \alternative - { - {a4 e8 a} {a8 a16 a16 d8 c8} - } - - \repeat volta 2 - { - a8 a16 a d8 c - b8. b16 a8 b c8. b16 a8 g - } - \alternative - { - {a8. a16 d8 c8} {a4 e'4} - } - - \repeat volta 2 - { - e4 d8 f e4 - e4 d4 c8 b - } - \alternative - { - {e4 e4} {a,4 c4} - } - - \repeat volta 2 - { - e4 c8 a b4 - c4 d4 c8 b - } - \alternative - { - {e4 c4} {a2} - } - - a'2 f2 c4 d - - \repeat volta 2 - { - e4 c e4 d8 c b4 e4 - } - \alternative - { - {f4 d8 c} {d4 b8 c} - } - - a2 c2 d2 f4 e c2 - c2 d2 f4 g4 e2 - } -} - diff --git a/lilypond/La_premiere_fois.ly b/lilypond/La_premiere_fois.ly deleted file mode 100644 index 47f43b12..00000000 --- a/lilypond/La_premiere_fois.ly +++ /dev/null @@ -1,15 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \key ees \major - \time 6/8 - \partial 4. c'8 d' ees' - \relative c'' - { - g2.~ g8 bes bes bes aes g g4. ees~ ees8 ees d c d ees \break - g2.~ g8 c c c bes aes g2. - } -} - diff --git a/lilypond/La_reine.ly b/lilypond/La_reine.ly deleted file mode 100644 index f19cb640..00000000 --- a/lilypond/La_reine.ly +++ /dev/null @@ -1,36 +0,0 @@ -\include "header" -\paper{paper-height = 8.8\cm} - - -\new \songbookstaff -{ - \key e \minor - \time 2/2 - \relative c''{ - b8 e4 b8 e4 b4 c b b b - b8 e4 b8 e4 b c b\trill a2 - a2 fis'2 g4 fis\trill e e fis2 g4 fis\trill e1 - - fis1 g e2 g4 fis8 e d1 - e2. d8 c b2. g4 a4. b16 a g4 fis - - e8 e16 e e8 g c b4 g8 - e8 e16 e e8 g fis'4 e - - << - {fis1 | g | e2 g4 fis8 e | d1 | - e2. d8 c | b2. g4 | a4. b16 a g4 fis | - e8 e16 e e8 g c b4 g8} - \\ - { - d'4. g8 g4 d' | c b2 a4 | g4 e g a | - \times 2/3 {b8 [c b]} \times 2/3{ a8 [b a]} g4 g | - a8 g a4 b c | b e e e | dis2 b2 | e1} - >> - - e,,8 e16 e e8 g c b4 g8 - e8 e16 e e8 g c b4 g8 - e4 b e b - } -} - diff --git a/lilypond/La_revolution.ly b/lilypond/La_revolution.ly deleted file mode 100644 index ecf08bc3..00000000 --- a/lilypond/La_revolution.ly +++ /dev/null @@ -1,6 +0,0 @@ -\include "header" -\paper{paper-height = 1.2\cm} { - \key bes \minor \time 4/4 - \relative c' -{ - \repeat volta 2 {f8( bes4.) \times 2/3 {c8( des c)} bes8\staccato ges\staccato bes8\staccato ges2 \times 2/3 {ees8( f ges)} ees8}}} diff --git a/lilypond/La_seine_riff1.ly b/lilypond/La_seine_riff1.ly deleted file mode 100644 index a2c89bba..00000000 --- a/lilypond/La_seine_riff1.ly +++ /dev/null @@ -1,11 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.1\cm - paper-width = 2.5\cm - line-width = 2.2\cm -} - -\new TabStaff \relative c, { - \numericTimeSignature - r2 f8 e f gis -} \ No newline at end of file diff --git a/lilypond/La_seine_rythm.ly b/lilypond/La_seine_rythm.ly deleted file mode 100644 index 1b77a74b..00000000 --- a/lilypond/La_seine_rythm.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper{ - paper-height = 2.4\cm - paper-width = 7.1\cm -} - -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - a8^"Rythm verse" a~ a16 a a a a8 a~ a16 a a a - a8^"Rythm chorus" a16 a \override NoteHead #'style = #'cross a8. \revert NoteHead #'style a16 a8 a16 a \override NoteHead #'style = #'cross a8. \revert NoteHead #'style a16 - a4.^"Rythm bridge" a8~ a2 - - } - } ->> \ No newline at end of file diff --git a/lilypond/La_sorciere_Grabouilla.ly b/lilypond/La_sorciere_Grabouilla.ly deleted file mode 100644 index 83d4e60b..00000000 --- a/lilypond/La_sorciere_Grabouilla.ly +++ /dev/null @@ -1,28 +0,0 @@ -\include "header" -\paper{paper-height = 6.1\cm} - -\new \songbookstaff -{ - \key e \minor - \time 2/4 - \relative c' - { - r4 r8 e8 - \repeat volta 2 - { - b'8 b a b g4. g8 fis fis g fis e4 - dis8 e e4 dis8 e e4 dis8 e e4 dis8 e e4. e8 - } - - a8 a a fis g4. g8 fis fis g a b4. b8 - c c c a b4. g8 fis fis g fis e4 - dis8 e e4 dis8 e e4 dis8 e e4 dis8 e e4. e8 - - \repeat volta 2 - { - c'4 a b g a8 a g a b2 - c4 a b g a8 a g fis e2 - } - } -} - diff --git a/lilypond/La_tribu_de_Dana.ly b/lilypond/La_tribu_de_Dana.ly deleted file mode 100644 index 1236ad1b..00000000 --- a/lilypond/La_tribu_de_Dana.ly +++ /dev/null @@ -1,27 +0,0 @@ -\include "header" -\paper -{ - paper-width = 15\cm - line-width = 14.5\cm - paper-height = 1.4\cm -} - -\new \songbookstaff -{ - \key c \minor - \time 2/4 - \partial 8 g'8 - \relative c'' - { - \repeat volta 2 - { - c8\trill bes c d ees4. d16 ees f8 ees d\trill c - } - \alternative - { - {ees4 d8 g,8} {ees'8 f ees d\trill } - } - c4. c8 bes4 ees8 d c4 c8 bes16 a16 g8 a bes\trill g - c4. d8 bes bes ees8 d c c\trill bes4 c2 - } -} diff --git a/lilypond/La_vie_d_aventurier.ly b/lilypond/La_vie_d_aventurier.ly deleted file mode 100644 index ac05e84c..00000000 --- a/lilypond/La_vie_d_aventurier.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key a \minor - \partial 8 e'8 - \relative c'' - { - a4. b8 c8 d4 c8 b8 a4 g8 a4. e8 %\break - a4. c16 b c8 d4 e8 d2~ d4. d8 %\break - e4. d16 e d8 c4 b8 c8 b4 g8 a4. e8 %\break - a4. b16 a g8 e4 g8 a1 - } -} - diff --git a/lilypond/Le_cafe_des_jours_heureux.ly b/lilypond/Le_cafe_des_jours_heureux.ly deleted file mode 100644 index 6f09347a..00000000 --- a/lilypond/Le_cafe_des_jours_heureux.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \relative c' - { - \time 2/2 - \key e \minor - e8. fis16 g8. a16 b4 e b2. - b4 c2. c4 b2. g4 a2. a4 g2~ g8. e16 fis8. g16 fis2~ fis8. e16 g8. fis16 e1 - } -} - diff --git a/lilypond/Le_dernier_troscon.ly b/lilypond/Le_dernier_troscon.ly deleted file mode 100644 index 95890e01..00000000 --- a/lilypond/Le_dernier_troscon.ly +++ /dev/null @@ -1,48 +0,0 @@ -\include "header" -\paper{ - paper-height = 2 \cm - paper-width= 6.7\cm - line-width= 8\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - \repeat volta 4 { - 4 f\5 e\5 g\4 - f\4 a\4 g\4 8 e\4 - d4 f\4 e\4 g\4 - f\4 e\4 d c\5 -} -} - -\score { - << - - \new Staff - - { - \override Staff.StringNumber #'transparent = -##t - \clef "G_8" \symbols } - %\chords { d2 c | f c | d c | f c } - \new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - \symbols } - >> -} diff --git a/lilypond/Le_joueur_de_pipeau.ly b/lilypond/Le_joueur_de_pipeau.ly deleted file mode 100644 index 0c00b089..00000000 --- a/lilypond/Le_joueur_de_pipeau.ly +++ /dev/null @@ -1,12 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \key d \minor - \relative c'' - { - \time 3/4 - a4.( bes8 a g) f4.( g8 a c) a4.( bes8 c d) a2. - } -} diff --git a/lilypond/Le_jour_s_est_leve.ly b/lilypond/Le_jour_s_est_leve.ly deleted file mode 100644 index c487dffb..00000000 --- a/lilypond/Le_jour_s_est_leve.ly +++ /dev/null @@ -1,52 +0,0 @@ -\include "header" -\paper{ - paper-height = 4\cm - paper-width= 8\cm - line-width= 8\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - 2 - 2 - 2 - d16\5 dis\5 f8\4 f16\4 g16\4 gis8\4 - - 2 - 2 - 2 - d8\5 dis\5 f\4 d8\5 - -} - -\score { - << - - \new Staff - - { - \override Staff.StringNumber #'transparent = -##t - \clef "G_8" \symbols } - %\chords { c2 | f2| g1 | c2 | f2| g1 } - \new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - \symbols } - >> -} diff --git a/lilypond/Le_laride_du_poulet.ly b/lilypond/Le_laride_du_poulet.ly deleted file mode 100644 index 44faffc4..00000000 --- a/lilypond/Le_laride_du_poulet.ly +++ /dev/null @@ -1,21 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key a \minor - \time 2/4 - \relative c'' - { - \partial 8 a8 - \repeat volta 2 - { - a8 b c8. c16 b8 b a g a b c8. c16 b8 b a a - } - \repeat volta 2 - { - a8 a e'8. d16 c8 d b a a a e'8. d16 c8 d b a - } - } -} - diff --git a/lilypond/Le_moustique.ly b/lilypond/Le_moustique.ly deleted file mode 100644 index 12699771..00000000 --- a/lilypond/Le_moustique.ly +++ /dev/null @@ -1,21 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \relative c'' - { - \key f \major - \time 2/4 - \partial 8 c8 - \repeat volta 2 - { - f4 d e c8 d8\(d8\) d4 a8 bes4. c8 e8 e c4 d a8 c8\(c8\) bes4 g8 - } - \alternative - { - { f4. c'8 } - { f,2 } - } - } -} diff --git a/lilypond/Le_p_tit_gars.ly b/lilypond/Le_p_tit_gars.ly deleted file mode 100644 index b7eba149..00000000 --- a/lilypond/Le_p_tit_gars.ly +++ /dev/null @@ -1,23 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.1\cm - line-width = 14.5\cm - paper-width = 15\cm -} - -\new \songbookstaff -{ - \relative c'' - { - \key a \minor - \time 2/4 - \repeat volta 2 - { - a8 c a c e d c b - b g b d g f e d - c b a b c d c b - c d e d b d c b - a2 - } - } -} diff --git a/lilypond/Le_rat_de_l_opera-1.ly b/lilypond/Le_rat_de_l_opera-1.ly deleted file mode 100644 index 70f5e8c2..00000000 --- a/lilypond/Le_rat_de_l_opera-1.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper{paper-height = 6.0\cm} - -\new \songbookstaff -{ - \key a \major - \time 3/8 - \relative c'' - { - r4 cis16 b a gis a b cis d e8. eis16 fis gis - a8. gis16 b a gis4 fis16 r - fis4 d16 cis cis b b a gis a b ais b e dis e cis8 - r16 d cis b a gis a b cis d e dis e eis fis gis - a gis a cis b a gis4 fis16 r - fis4 d16 cis cis b b a gis a b ais b e dis e a,4. - } -} - diff --git a/lilypond/Le_rat_de_l_opera-2.ly b/lilypond/Le_rat_de_l_opera-2.ly deleted file mode 100644 index f15946a7..00000000 --- a/lilypond/Le_rat_de_l_opera-2.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 3.8\cm} - -\new \songbookstaff -{ - \key a \major - \time 3/8 - \relative c'' - { - r4 r16 cis-. d-. e-. fis-. gis-. a-. b-. - cis4.~ cis16 cis cis cis cis cis - cis (b) b b b b b (a) a a a a - a (gis) gis gis gis gis gis (fis) fis fis fis fis - fis (e) e e e e dis8 dis dis d4. - } -} - diff --git a/lilypond/Le_vent_nous_portera.ly b/lilypond/Le_vent_nous_portera.ly deleted file mode 100644 index bdb2e557..00000000 --- a/lilypond/Le_vent_nous_portera.ly +++ /dev/null @@ -1,19 +0,0 @@ -\include "header" -\paper{paper-height = 2.6\cm} - -\new \songbookstaff -{ - \key e \minor - \time 2/4 - \relative c'' - { - \repeat volta 2 - { - b8( g b g b g b c) - b( g b g b g a fis) - a( fis a fis a fis a c) - b( g b g b g b c) - } - } -} - diff --git a/lilypond/Lea.ly b/lilypond/Lea.ly deleted file mode 100644 index 5a6f0e2c..00000000 --- a/lilypond/Lea.ly +++ /dev/null @@ -1,13 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key a \minor - \time 2/4 - \relative c'' - { - e8. f16 g8 a g f e4 e16 f e d e8 c b c a4 - e'8. f16 g8 a g16 a g f e4 e16 f e d e8 c << {e2} \\ {b2} >> - } -} diff --git a/lilypond/Les_hommes_que_j_aime.ly b/lilypond/Les_hommes_que_j_aime.ly deleted file mode 100644 index 1e77ff33..00000000 --- a/lilypond/Les_hommes_que_j_aime.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \relative c'' - { - \key d \minor - \time 2/4 - \repeat volta 2 - { - a8 a4 f8 e4. d16 e16 f8 d16 e f8 e d8 d e f - a8 a4 bes8 c4. bes8 c16 bes a8\(a8\) g a2 - } - } -} diff --git a/lilypond/Les_mains_froides.ly b/lilypond/Les_mains_froides.ly deleted file mode 100644 index 727ce529..00000000 --- a/lilypond/Les_mains_froides.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 4/4 - \key d \minor - \partial 2. a4 f d - e e8 e e4 d8. c16 d4 a'4 f d e e8 e e4 d8. c16 d1 - } -} - diff --git a/lilypond/Les_souliers_de_Lady_Fae-1.ly b/lilypond/Les_souliers_de_Lady_Fae-1.ly deleted file mode 100644 index 9cbdead5..00000000 --- a/lilypond/Les_souliers_de_Lady_Fae-1.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key e \minor - \time 6/8 - \relative c' - { - b'8. a16 g fis e8 fis16 g a8 b a g a g16 fis e8 %\break - b'8. a16 g fis e8 fis16 g a8 c b a b4. - } -} - diff --git a/lilypond/Les_souliers_de_Lady_Fae-2.ly b/lilypond/Les_souliers_de_Lady_Fae-2.ly deleted file mode 100644 index 92a5335a..00000000 --- a/lilypond/Les_souliers_de_Lady_Fae-2.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key a \minor - \time 6/8 - \relative c'' - { - a8 b16 c d8 e8 d e f e d e4. - a,8 b16 c d8 e8 c e d8 b d c8 b16 a g8 - - a8 b16 c d8 e8 d e f e d e4. - d8 b d c8 b16 a g8 a8 b c a4. - } -} diff --git a/lilypond/Les_souliers_rouges.ly b/lilypond/Les_souliers_rouges.ly deleted file mode 100644 index aabd84cc..00000000 --- a/lilypond/Les_souliers_rouges.ly +++ /dev/null @@ -1,27 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key g \major - \time 2/4 - \relative c'' - { - r8 g'16 fis e d b a g2 - r8 g'16 fis e d b a g'2 - - \new Voice - { - \set countPercentRepeats = ##t - \repeat "percent" 3 { a,16 b b b a b b b } - } - - \repeat volta 2 - { - g8 g16 g g8 e d8 g16 g a8 a16 a b8 - g16 g g8 e d8 g16 g a8 a16 a - } - g2 - } -} - diff --git a/lilypond/Lino.ly b/lilypond/Lino.ly deleted file mode 100644 index 0f24266f..00000000 --- a/lilypond/Lino.ly +++ /dev/null @@ -1,19 +0,0 @@ -\include "header" -\paper{paper-height = 1.4\cm} - -\new \songbookstaff -{ - \key d \minor - \time 4/4 - \relative c'' - { - \repeat volta 2 - { - d2~ d8 e4 f8 a1 - } - \alternative - { - {g2. f4 e2. f8 e} {g2. bes4 a1} - } - } -} diff --git a/lilypond/Losing_my_religion_bridge.ly b/lilypond/Losing_my_religion_bridge.ly deleted file mode 100644 index d124eb7e..00000000 --- a/lilypond/Losing_my_religion_bridge.ly +++ /dev/null @@ -1,52 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.5 \cm - paper-width= 5.2\cm - line-width= 5\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - \repeat volta 2 { - - - e'8 e' e' d' d' d' d' d' - c' c' c' a a a a a - } - - -} - -\score { - << - \chords { c1| a1:m } - \new Staff - - { - - \override Staff.StringNumber #'transparent = -##t - - \clef "G_8" \symbols } - - % \new TabStaff { - % \override Staff.Clef #'stencil = #(lambda (grob) - % (grob-interpret-markup grob TAB)) - % \symbols } - >> -} diff --git a/lilypond/Losing_my_religion_intro.ly b/lilypond/Losing_my_religion_intro.ly deleted file mode 100644 index a8dbdef2..00000000 --- a/lilypond/Losing_my_religion_intro.ly +++ /dev/null @@ -1,64 +0,0 @@ -\include "header" -\paper{ - paper-height = 5.5 \cm - paper-width= 8\cm - line-width= 7.5\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - r2 8 d a, | - \repeat volta 2 { - - \improvisationOn - 4~ 8 ~ ~ - - \improvisationOff - 8 d a, - } - \alternative { - { \improvisationOn - 4~ 8 ~ ~ - - \improvisationOff - 8 d a, } - { \improvisationOn - 4 8 ~ - 4 8 ~ } -} - -} - -\score { - << - \chords { r1| f1 | f1 | a1:m | a1:m a1:m g1 } - \new Staff - - { - - \override Staff.StringNumber #'transparent = -##t - - \clef "G_8" \symbols } - - %\new TabStaff { - % \override Staff.Clef #'stencil = #(lambda (grob) - % (grob-interpret-markup grob TAB)) - % \symbols } - >> -} diff --git a/lilypond/Ma_gonzesse.ly b/lilypond/Ma_gonzesse.ly deleted file mode 100644 index 5bd56d07..00000000 --- a/lilypond/Ma_gonzesse.ly +++ /dev/null @@ -1,12 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key c \major - \time 4/4 - \relative c'' - { - g4 c4. g8 a c g' f f e c4 g8 a e4~ e4. e8 f g f4 d2 c8 d f g a b c4 a g f e2 d8 e f a4. b4 a2 g2 - } -} diff --git a/lilypond/Macumba.ly b/lilypond/Macumba.ly deleted file mode 100644 index f46cbdb9..00000000 --- a/lilypond/Macumba.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{ - paper-height = 0.9\cm - paper-width = 3.0\cm - line-width = 2.7\cm -} - -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - \autoBeamOff - a8[ a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - a8[ a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - } - } ->> \ No newline at end of file diff --git a/lilypond/Mamadou_avait_mal_aux_dents.ly b/lilypond/Mamadou_avait_mal_aux_dents.ly deleted file mode 100644 index 7c6279a2..00000000 --- a/lilypond/Mamadou_avait_mal_aux_dents.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 5.0\cm} - -\new \songbookstaff -{ - \key c \major - \time 2/4 - \relative c'' - { - c8 d e8 e16 e~ e8 f16 e d4 - b8 c d8 d16 d~ d8 e16 d c4 - a8 b c8 c16 c~ c8 d16 c b4 - gis8 a b8 b16 b~ b8 c16 b a4 - - a8 a a8 a16 a~ a8 a16 a d4 - d8 d d8 d16 d~ d8 e16 f e4 - r8 e8 e4 d4 e4 - } -} - diff --git a/lilypond/Marchand_de_couleurs.ly b/lilypond/Marchand_de_couleurs.ly deleted file mode 100644 index 7ea1e689..00000000 --- a/lilypond/Marchand_de_couleurs.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key a \minor - \time 12/8 - \relative c'' - { - a4. e' c f - a,4. e' c g' - a,4 a'8 e4. c8 e c f4. - a,4 a'8 e4. c8 e c g'4. - } -} - diff --git a/lilypond/Midnite_man.ly b/lilypond/Midnite_man.ly deleted file mode 100644 index 08531be9..00000000 --- a/lilypond/Midnite_man.ly +++ /dev/null @@ -1,24 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.4\cm - paper-width= 4.0\cm - line-width= 3.7\cm -} - -symbols = { - \numericTimeSignature - \time 4/4 - \autoBeamOff - \partial 4. e,8 - g,[ gis,] | - \autoBeamOn a,4 - \autoBeamOff - \repeat percent 3 { 8[ ]} -} - -\score { - << - \new Staff { \clef "G_8" \symbols } - % \new TabStaff { \symbols } - >> -} diff --git a/lilypond/Morgane_de_toi.ly b/lilypond/Morgane_de_toi.ly deleted file mode 100644 index 91972e28..00000000 --- a/lilypond/Morgane_de_toi.ly +++ /dev/null @@ -1,12 +0,0 @@ -\include "header" -\paper{paper-height = 1.2\cm} - -\new \songbookstaff -{ - \key c \major - \time 4/4 - \relative c' - { - r4 f8 g a g f4 e8 e f e~ e2 r4 e8 f g f e4 d8 d d d~ d4 - } -} diff --git a/lilypond/Mrs_McGrath.ly b/lilypond/Mrs_McGrath.ly deleted file mode 100644 index 99c796ed..00000000 --- a/lilypond/Mrs_McGrath.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key d \minor - \time 6/8 - \relative c'' - { - \partial 8 { d,8} - d4 a'8 a4 a8 a8 g f a4. - a4 a8 a8 g f g4 c,8 c4.~ c4. - r4 c8 c4 g'8 g4 g8 g8 f e g4. - g4 g8 g8 f e f4 d8 d4.~ d2. - } -} - diff --git a/lilypond/New_york_avec_toi.ly b/lilypond/New_york_avec_toi.ly deleted file mode 100644 index 9f3ee872..00000000 --- a/lilypond/New_york_avec_toi.ly +++ /dev/null @@ -1,22 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.1\cm - line-width = 5.8\cm - paper-width = 5.6\cm -} - -symbols = { - \numericTimeSignature - \time 4/4 - \repeat volta 2 { - 8 c cis - r2 -} -} - -\score { - << - %\new Staff { \clef "G_8" \symbols } - \new TabStaff { \symbols } - >> -} \ No newline at end of file diff --git a/lilypond/Noel_en_Mordor.ly b/lilypond/Noel_en_Mordor.ly deleted file mode 100644 index 65430ca0..00000000 --- a/lilypond/Noel_en_Mordor.ly +++ /dev/null @@ -1,22 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key c \minor - \time 2/4 - \partial 4 g'8 g' - \relative c'' - { - c bes c d ees4 - d8 ees f4 ees8 d ees4 - g,8 g c bes c d ees 4 - d8 ees f f ees d c2 - \repeat volta 4 - { - g4 g8 g f4. g8 aes g f ees d2 - } - } -} - - diff --git a/lilypond/Notre_monde.ly b/lilypond/Notre_monde.ly deleted file mode 100644 index 7ff92e2a..00000000 --- a/lilypond/Notre_monde.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key e \minor - \time 4/4 - \relative c' - { - \repeat volta 2 - {r8 e g a b4 d b g' b, d8 b8~ b8 d4 b8 a4 b8 a8~ a1} - \repeat volta 2 - {r8 a4 b8 c2~ c8 b4 a8 b2~ b8 a4 g8 a4 b8 a8~ a1} - } -} - diff --git a/lilypond/Nuit_humide_1.ly b/lilypond/Nuit_humide_1.ly deleted file mode 100644 index b4832bf2..00000000 --- a/lilypond/Nuit_humide_1.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 4.0\cm} - -\new \songbookstaff -{ - \key e \minor - \time 2/4 - \tempo 2 = 60 - \relative c'' - { - b8 c d g, a b d, e fis g a4 b2 - b8 c d g, a b d, e fis g a b a g fis4 - b8 c d g, a b d, e fis g a4 b2 - b8 c d g, a b a g fis e d4 e2 - } -} - diff --git a/lilypond/Nuit_humide_2.ly b/lilypond/Nuit_humide_2.ly deleted file mode 100644 index f54c9bf7..00000000 --- a/lilypond/Nuit_humide_2.ly +++ /dev/null @@ -1,18 +0,0 @@ -\include "header" -\paper{paper-height = 4.0\cm} - -\new \songbookstaff -{ - \key e \minor - \time 4/4 - \tempo 2 = 60 - \relative c'' - { - e4 b8 e e4 \times 2/3{g8 fis e} d4 e4 <<{e2}\\{b2}>> - g8 a b a g fis e d e fis g a b4 c8 b - e4 b8 e e4 \times 2/3{g8 fis e} d4 e4 <<{e2}\\{b2}>> - g8 a b a g fis g a b b \times 2/3{a' g fis} e2 - } -} - - diff --git a/lilypond/One_more_cup_of_coffee.ly b/lilypond/One_more_cup_of_coffee.ly deleted file mode 100644 index 422a4e2c..00000000 --- a/lilypond/One_more_cup_of_coffee.ly +++ /dev/null @@ -1,28 +0,0 @@ -\include "header" -\paper -{ - paper-width = 15.5\cm - line-width = 15\cm - paper-height = 1.5\cm -} - -\new \songbookstaff -{ - \key a \minor - \time 2/4 - \partial 8 a'8 - \relative c'' - { - b8 a4 g8 f4.\trill g8 - << - {a8 g4 f8 e2} - \\ - {f4 f' e2} - >> - r4 c16 b a e - c4. a8 g8 g'8~ g4~ g8 b4 a16 g - | f16 a c f a8 c8~ c8 d4 c8 | b4.\trill a8 | gis2 | - r4 c,4 | d4. c8 | b16 a g4 a8 | e2 | - } -} - diff --git a/lilypond/Ou_je_vais.ly b/lilypond/Ou_je_vais.ly deleted file mode 100644 index 3444b93b..00000000 --- a/lilypond/Ou_je_vais.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{paper-height = 1.2\cm} - -\new \songbookstaff -{ - \key d \minor - \relative c'{ - \repeat volta 2 { - d8 e f g a4 g8 f g4 f8 e d2 - d8 e f g a4 c bes a8 g a2 - } - } -} - diff --git a/lilypond/Pauvre_planete.ly b/lilypond/Pauvre_planete.ly deleted file mode 100644 index f6e3ba58..00000000 --- a/lilypond/Pauvre_planete.ly +++ /dev/null @@ -1,21 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - - - - -{ - \key d \major \time 4/4 - \relative c' -' - { - \repeat volta 4 {g8 fis e fis g fis g a b1 - fis8 e d e fis2} - \alternative{ - {e8 fis g fis e4} - {e8 fis e d cis b} - {e8 fis g fis e4} - {e8 fis e d cis b} - } - } -} diff --git a/lilypond/Petit_Pierrot.ly b/lilypond/Petit_Pierrot.ly deleted file mode 100644 index 6d138a45..00000000 --- a/lilypond/Petit_Pierrot.ly +++ /dev/null @@ -1,35 +0,0 @@ -\include "header" -\paper{ - paper-height = 2.6\cm -} - -\new \songbookstaff -{ - \relative c'' - { - \key a \minor - \time 6/8 - - \repeat volta 2 - { - b4. b8 d b c4. c8 d c b4. b8 c b - } - \alternative - { - {a4 a16 b c8 b a} {a2.} - } - - \repeat volta 2 - { - << - {e'4.~ e8 f e f4.~ f8 e d f4. e4 d8 e2. } - \\ - {c4.~ c8 d c d4.~ d8 c b d4. c4 b8 a4 a16 b c8 b a} - >> - } - -% e f e f e d e d e c - - - } -} diff --git a/lilypond/Rue_de_Paname.ly b/lilypond/Rue_de_Paname.ly deleted file mode 100644 index 4cac5e18..00000000 --- a/lilypond/Rue_de_Paname.ly +++ /dev/null @@ -1,15 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key bes \major - \time 6/8 - \relative c'' - { - bes4 bes8 bes a bes c4. d4 c8 bes4. d4 bes8 << {c2.}\\{r4. f,8 g a} >> - bes4 bes8 bes a bes c4. d4 c8 d4 d8 bes4 d8 c4. a4. - \repeat volta 2 {bes4 g8 g a bes a2.} - bes4 g8 g a bes a4. a4 bes8 c4. d4 bes8 c2. - } -} diff --git a/lilypond/Rue_de_Paname_acc.ly b/lilypond/Rue_de_Paname_acc.ly deleted file mode 100644 index 88868536..00000000 --- a/lilypond/Rue_de_Paname_acc.ly +++ /dev/null @@ -1,12 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - -\new \songbookstaff -{ - \key bes \major - \time 6/8 - \relative c'' - { - d4. f4 d8 c4.~ c8 bes c d4. d8 f d c4. a8 bes c d4. d8 g d c4. a8 bes c d4 d8 d ees d c c d ees d c \repeat volta 2 {d8 g, bes d g d c2.} d8 g, bes d g d c4.~ c8 bes a bes4. ees4 bes8 a2. - } -} diff --git a/lilypond/Rue_du_temps.ly b/lilypond/Rue_du_temps.ly deleted file mode 100644 index e223ff32..00000000 --- a/lilypond/Rue_du_temps.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \key d \minor - \time 6/8 - \relative c'' - { - \repeat volta 2 - { - a4. a8 g f e4. e8 f e d4 a'8 a g f e2. - } - } -} - diff --git a/lilypond/Sad_Lisa.ly b/lilypond/Sad_Lisa.ly deleted file mode 100644 index ccb9df29..00000000 --- a/lilypond/Sad_Lisa.ly +++ /dev/null @@ -1,19 +0,0 @@ -\include "header" -\paper{paper-height = 5.0\cm} - -\new \songbookstaff -{ - \key e \minor - \time 4/4 - \partial 4 b'4 - \relative c'' - { - e4 fis8 g4 fis4~ fis8 e8 fis g4 fis4. g16 fis e2~ e4. - g8 fis4 d8 e4 fis8 g4 a2 b2~ b4 - g8 a b4. a8~ a8 b8 d4 g,2 a1 - g8 fis g8 a8~ a4 g4 fis8 e fis g8~ g4. - g8 fis e d e8~ e4 fis8 g a4. b8~ b2~ b2. - g8 a b4. a8~ a8 b8 d4 g,2 a2 - } -} - diff --git a/lilypond/Sad_robot.ly b/lilypond/Sad_robot.ly deleted file mode 100644 index db911656..00000000 --- a/lilypond/Sad_robot.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key d \minor - \time 2/4 - \relative c'' - { - d8 a' d, a e' f c' a, e' a, a a~ a2 - c8 g' c, g d' e b' d, a' d, d d~ d2 - } -} - diff --git a/lilypond/Saint-Jean-du-Doigt.ly b/lilypond/Saint-Jean-du-Doigt.ly deleted file mode 100644 index e17f2e80..00000000 --- a/lilypond/Saint-Jean-du-Doigt.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 3.6\cm} - - - - -{ - \key f \major \time 4/4 - \relative c' - { - \repeat volta 2 {f8 g a8. g16 f8 e f d f g a8. g16 f8 e f4} - \alternative { -{g8 a bes8. g16 g8 bes a f f f e g f e d4} {a'8 d c8. bes16 f8 g a a f f a g f g e4}} - } - -} diff --git a/lilypond/Sainte_Cecile.ly b/lilypond/Sainte_Cecile.ly deleted file mode 100644 index 60037949..00000000 --- a/lilypond/Sainte_Cecile.ly +++ /dev/null @@ -1,26 +0,0 @@ -\include "header" -\paper{paper-height = 5.0\cm} - -\new \songbookstaff -{ - \key d \minor - \time 2/4 - \relative c'{ - \repeat volta 2 - { - d8.\trill e16 f8 d g16 f e8 f4 - d8.\trill e16 f8 d e16 f e d c4 - d8.\trill e16 f8 d g16 f e8 f4 - d8.\trill e16 f8 bes a16 g f e d4 - } - - \repeat volta 2 - { - d'8. bes16\trill a8 bes g16 a bes g a4 - d8. bes16\trill a8 bes c16 d c bes a4 - d8. bes16\trill a8 bes g16 a bes g a4 - d,8.\trill e16 f8 bes a16 g f e d4 - } - } -} - diff --git a/lilypond/Saturnin.ly b/lilypond/Saturnin.ly deleted file mode 100644 index b6ec48a0..00000000 --- a/lilypond/Saturnin.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 3.8\cm} - -\new \songbookstaff -{ - \relative c'' - { - \key a \major - \time 2/4 - \partial 4 a4 - fis4. fis8 fis4 a4 fis4. e8 e2 - d4. d8 e8 d cis d e2 cis4 a'4 - fis4. fis8 fis4 a4 fis4. e8 e2 - dis4. dis8 e dis e fis gis4 fis4 e4 d4 cis2 - } -} - diff --git a/lilypond/Souleve_ta_jupe.ly b/lilypond/Souleve_ta_jupe.ly deleted file mode 100644 index e690479f..00000000 --- a/lilypond/Souleve_ta_jupe.ly +++ /dev/null @@ -1,21 +0,0 @@ -\include "header" -\paper{paper-height = 5.0\cm} - -\new \songbookstaff -{ - \key d \minor - \time 4/4 - \relative c'' - { - \partial 4 a16 a a' g - - a8. f16~ f8 f8 g8. f16~ f8 g8 a8. f16~ f2 - a,16 a a' g - a8. f16~ f8 f8 g8. f16~ f8 e8\trill d2. - a16 a a' g - a8. f16~ f8 f8 g8. c16~ c8 bes8 bes8. a16~ a2 - a,16 a a' g - a8. f16~ f8 f8 g8. f16~ f8 e8\trill d1 - } -} - diff --git a/lilypond/Stuck_in_the_middle.ly b/lilypond/Stuck_in_the_middle.ly deleted file mode 100644 index 0c00afa5..00000000 --- a/lilypond/Stuck_in_the_middle.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{ - paper-height = 0.9\cm - line-width = 2.7\cm - paper-width = 3.0\cm -} - -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - \autoBeamOff - a8[ a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - \override NoteHead #'style = #'cross a[ \revert NoteHead #'style a] - } - } ->> \ No newline at end of file diff --git a/lilypond/Sur_le_pont_d_avignon.ly b/lilypond/Sur_le_pont_d_avignon.ly deleted file mode 100644 index 73ee3571..00000000 --- a/lilypond/Sur_le_pont_d_avignon.ly +++ /dev/null @@ -1,16 +0,0 @@ -\include "header" -\paper{paper-height = 2.6\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 2/4 - \key g \major - \partial 4 g8 g8 - g4 a8 a a4 b8 c d g, fis g a d, - g g g4 a8 a a4 b8 c d g, a fis g4 - g8 g g g g a8~ a8 g8~ g4 - g8 g g g a4 g - } -} diff --git a/lilypond/The_boxer.ly b/lilypond/The_boxer.ly deleted file mode 100644 index 6bc30cfe..00000000 --- a/lilypond/The_boxer.ly +++ /dev/null @@ -1,13 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key c \major - \time 4/4 - \relative c' - { - e2 g c,4 d e2 d2~ d4. g8 g2~ g4. f8 e4 g c4. g8 e4 g a e g2 f2 f2 e8 e d c d2 c2 - } -} - diff --git a/lilypond/The_ring_of_fire.ly b/lilypond/The_ring_of_fire.ly deleted file mode 100644 index dc6ff83f..00000000 --- a/lilypond/The_ring_of_fire.ly +++ /dev/null @@ -1,15 +0,0 @@ -\include "header" -\paper{paper-height = 2.3\cm} - -\new \songbookstaff -{ - \key g \major - \relative c'' - { - \time 3/4 - \partial 2 - r8 b8 c cis - d8 d16 d r8 d16 d e8 c d2. - b8 b16 b r8 b16 b c8 a b2. - } -} diff --git a/lilypond/Toi_toi_toi.ly b/lilypond/Toi_toi_toi.ly deleted file mode 100644 index becf62b0..00000000 --- a/lilypond/Toi_toi_toi.ly +++ /dev/null @@ -1,20 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - - - - -{ - \time 4/4 - \relative c'' - - { - \partial 8 {g8} \repeat volta 2 {a8 a a a b a4 d8 - d e d b d4. b8 - c c c c d c4 c8} - \alternative { - {c8 a b c d c b g} - {c8 a b c d c b4}} - } - -} diff --git a/lilypond/Tom_Sawyer_1.ly b/lilypond/Tom_Sawyer_1.ly deleted file mode 100644 index bac999bc..00000000 --- a/lilypond/Tom_Sawyer_1.ly +++ /dev/null @@ -1,14 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.1\cm -} - -\new \songbookstaff -{ - \key c \major - \time 2/4 - \relative c'' - { - e,4 c g'2 a4 c8. d16 e8 c4 g8 a4 c8. d16 e8 c d4 c2 - } -} diff --git a/lilypond/Tom_Sawyer_2.ly b/lilypond/Tom_Sawyer_2.ly deleted file mode 100644 index a41ae481..00000000 --- a/lilypond/Tom_Sawyer_2.ly +++ /dev/null @@ -1,13 +0,0 @@ -\include "header" -\paper{paper-height = 3.8\cm} - -\new \songbookstaff -{ - \key c \major - \time 2/4 - \relative c''{ - e4 c g'2 a4 a8. a16 g8 e4 c8 a'4 a8. a16 g8 e d c d2~ d4 - e8 f g4 g8. g16 f8 e d c a c4 a8 g4 c8 d e8 g4 g,8 e' e d d c2 - } -} - diff --git a/lilypond/Ton_invitation_1.ly b/lilypond/Ton_invitation_1.ly deleted file mode 100644 index aea18219..00000000 --- a/lilypond/Ton_invitation_1.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 4/4 - \key b \minor - \repeat volta 2 - { - g8 a4 ais8 b2 g8 b4 ais8 fis2 - } - - } -} - diff --git a/lilypond/Ton_invitation_2.ly b/lilypond/Ton_invitation_2.ly deleted file mode 100644 index a45fb5d8..00000000 --- a/lilypond/Ton_invitation_2.ly +++ /dev/null @@ -1,29 +0,0 @@ -\include "header" -\paper{paper-height = 3.8\cm} - -\new \songbookstaff -{ - \relative c'' - { - \time 4/4 - \key b \minor - \repeat volta 2 - { - g8 a4 ais8 b2 g8 b4 ais8 fis2 - } - fis8\trill d4 cis8 b2 - d8 d4 e8 cis2 - d8 d4 cis8 b4. d16 d - d8 e4 d8 cis4 d'8 d - - \repeat volta 2 - { - cis8 d16 cis~ cis8 d16 cis b4 a b4. g8 fis2 - } - \alternative - { - {fis8\trill a4 ais8 b2 g8 b4 g8 fis4 d'8 d8} {fis,1} - } - } -} - diff --git a/lilypond/Toujours_etre_ailleurs_rythm.ly b/lilypond/Toujours_etre_ailleurs_rythm.ly deleted file mode 100644 index 5f5889be..00000000 --- a/lilypond/Toujours_etre_ailleurs_rythm.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{ - paper-height = 1.1\cm - paper-width = 5.2\cm -} - -<< - \chords { d1:m | f2 g2 } - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - a4 a8 a~ a a a a - a4 a a a - } - } ->> \ No newline at end of file diff --git a/lilypond/V_la_l_bon_vent.ly b/lilypond/V_la_l_bon_vent.ly deleted file mode 100644 index 345182ff..00000000 --- a/lilypond/V_la_l_bon_vent.ly +++ /dev/null @@ -1,22 +0,0 @@ -\include "header" -\paper{paper-height = 2.5\cm} - -\new \songbookstaff -{ - \relative c' - { - \key a \minor - \time 2/4 - \repeat volta 2 - { - e8 a a4 e8 a16 a a4 - e8 a a8 a16 b - } - \alternative - { - {c8 c b8 b } {c8 b a4} - } - r8 e8 a c b a g b a e a c b a g b a - e a c b a a g e2 - } -} diff --git a/lilypond/Vanity.ly b/lilypond/Vanity.ly deleted file mode 100644 index 2c25d028..00000000 --- a/lilypond/Vanity.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 1.1\cm} - -\new \songbookstaff -{ - \key a \minor - \time 2/4 - \relative c'' - { - \repeat volta 2 - { - a8 b c e8~ e8 c d4 b2 - a8 b c e8~ e8 c d c b a g4 - } - } -} - diff --git a/lilypond/comfortably_numb.ly b/lilypond/comfortably_numb.ly deleted file mode 100644 index f605ca73..00000000 --- a/lilypond/comfortably_numb.ly +++ /dev/null @@ -1,57 +0,0 @@ -\include "header" -\paper{ - paper-height = 2.5 \cm - paper-width= 8\cm - line-width= 7.5\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - - - - \improvisationOn - 4 8 16 88 16 - 4 8 16 88 16 - 4 8 8 4 8 16 - 4 8 16 88 16 - \improvisationOff - - - - -} - -\score { - << - \chords { b1:m | a1 | g4. fis8 e2:m | b1:m } - \new Staff - - { - - \override Staff.StringNumber #'transparent = -##t - - \clef "G_8" \symbols } - - %\new TabStaff { - % \override Staff.Clef #'stencil = #(lambda (grob) - % (grob-interpret-markup grob TAB)) - % \symbols } - >> -} diff --git a/lilypond/gimme_shelter_rythm.ly b/lilypond/gimme_shelter_rythm.ly deleted file mode 100644 index fdc346e2..00000000 --- a/lilypond/gimme_shelter_rythm.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{ - paper-height = 0.6\cm - paper-width = 4.5\cm -} - -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - a4^"" a a8 a a a~ a a a a a a a a - - - } - } ->> \ No newline at end of file diff --git a/lilypond/greensleeves.ly b/lilypond/greensleeves.ly deleted file mode 100644 index 63c040f5..00000000 --- a/lilypond/greensleeves.ly +++ /dev/null @@ -1,21 +0,0 @@ -\include "header" -\paper{paper-height = 6.5\cm} - -%\new \songbookstaff -{ - \key a \minor - \time 6/8 - \partial 8 a'8 - \relative c''{ - c4 d8 e8. (f16) e8 d4 b8 g8. (a16) b8 - c4 a8 a8. (gis16) a8 b4 gis8 e4 a8 - c4 d8 e8. (f16 e8) d4 b8 g8. (a16) b8 - c8. (b16) a8 gis8. (fis16) gis8 a4 a8 a4. - - g'4. g8. (fis16) e8 d4 b8 g8. (a16) b8 - c4 (a8) a8. (gis16) a8 b4 gis8 e4. - g'4. g8. (fis16) e8 d4 b8 g8. (a16) b8 - c8. (b16) a8 gis8. (fis16) gis8 a4. a4. - } -} - diff --git a/lilypond/hey_you.ly b/lilypond/hey_you.ly deleted file mode 100644 index 6fcd1b6d..00000000 --- a/lilypond/hey_you.ly +++ /dev/null @@ -1,47 +0,0 @@ -\include "header" -\paper{ - paper-height =2.5\cm - paper-width= 10\cm - line-width= 10\cm -} - -TAB = \markup { - \raise #1.5 - \sans - \bold - \huge - \override #'(baseline-skip . 2.5) - \left-align - \center-column { - T - A - B - } -} - -symbols = { - \numericTimeSignature - \time 4/4 - \repeat volta 2 { - 16 b\4 e'\3 g'\2 e'\3 b\4 g'\2 e'\3 - 16 b\4 e'\3 g'\2 e'\3 b\4 g'\2 e'\3 - e'\2 a\4 d'\3 a'\1 f'\2 d'\3 a'\1 d'\3 - e'\2 a\4 d'\3 a'\1 f'\2 d'\3 a'\1 d'\3 - } -} -\score { - << - - \new Staff - - { - \override Staff.StringNumber #'transparent = -##t - \clef "G_8" \symbols } - %\chords { c2 | f2| g1 | c2 | f2| g1 } - \new TabStaff { - \override Staff.Clef #'stencil = #(lambda (grob) - (grob-interpret-markup grob TAB)) - \symbols } - >> -} diff --git a/lilypond/in_the_death_car.ly b/lilypond/in_the_death_car.ly deleted file mode 100644 index f10983c1..00000000 --- a/lilypond/in_the_death_car.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{paper-height = 2.4\cm} - -\new \songbookstaff -{ - \key e \minor - \time 4/4 - \relative c'' - { - r8 b8 b b g g e e c1 - r8 a'8 a a fis fis c c b1 - r8 b'8 b b g g e e - r8 a a g fis4 e - r8 dis dis e fis e e dis e1 - } -} - diff --git a/lilypond/les_ecorches.ly b/lilypond/les_ecorches.ly deleted file mode 100644 index 2d2a8fb2..00000000 --- a/lilypond/les_ecorches.ly +++ /dev/null @@ -1,23 +0,0 @@ -\include "header" -\paper{ - paper-height = 2.5\cm - paper-width= 7.2\cm -} - -symbols = { - \numericTimeSignature - \time 12/8 - \repeat volta 4 { - a,4 a,8 eis (e) e c (a,) a, g, (e,) e8 -} - \repeat volta 4 { - g,4 g,8 eis (d) d c (b,) b, g,4 d8 - } -} - -\score { - << - \new Staff { \clef "G_8" \symbols } - \new TabStaff { \symbols } - >> -} \ No newline at end of file diff --git a/lilypond/mothers_little_helper.ly b/lilypond/mothers_little_helper.ly deleted file mode 100644 index bb77cd52..00000000 --- a/lilypond/mothers_little_helper.ly +++ /dev/null @@ -1,17 +0,0 @@ -\include "header" -\paper{ - paper-height = 1\cm - paper-width = 6\cm -} - -<< - \new RhythmicStaff { - \new Voice = "myRhythm" { - \numericTimeSignature - \time 4/4 - a4^"verse" a8-> a a8 a a-> a - a4^"chorus" a-> a8 a a-> a - - } - } ->> \ No newline at end of file diff --git a/macos/clean.sh b/macos/clean.sh deleted file mode 100755 index 0cda9a79..00000000 --- a/macos/clean.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# -echo "manually performs 'make clean'" -rm -rf *.aux *.d *.toc *.out *.log *.nav *.snm *.sbx *.sxd -echo "remove temporary covers" -rm -rf covers/ diff --git a/macos/cleanall.sh b/macos/cleanall.sh deleted file mode 100755 index ef3ca003..00000000 --- a/macos/cleanall.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -# -echo "manually performs 'make cleanall'" -`dirname $0`/clean.sh -rm -rf *.pdf diff --git a/macos/make.sh b/macos/make.sh deleted file mode 100755 index 6a1ad16c..00000000 --- a/macos/make.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# -echo "build tex file from songbook file" -./songbook.py --songbook=books/$1.sb --output=$1.tex - -echo "first pdf compilation" -/usr/texbin/pdflatex $1.tex - -echo "build indexes" -./songbook-makeindex.py $1_title.sxd > $1_title.sbx -./songbook-makeindex.py $1_auth.sxd > $1_auth.sbx - -echo "second compilation to include indexes" -/usr/texbin/pdflatex $1.tex diff --git a/makefile b/makefile deleted file mode 100644 index bbe65c1f..00000000 --- a/makefile +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (c) 2008-2010 Alexandre Dupas -# -# 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, 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. -# - -BOOKS_DIR=books/ -SONGBOOKS := $(wildcard $(BOOKS_DIR)/*.sb) -TARGETS = $(SONGBOOKS:$(BOOKS_DIR)/%.sb=%) -LIBRARY=./ - -PDF = $(TARGETS:%=%.pdf) - -#CHORDS = chords.tex -#CHORDS_SRC = $(shell ls $(LIBRARY)/songs/*/*.sg) - -DATE = $(shell date +%d)-$(shell date +%m)-$(shell date +%Y) - -PRINT=printf "%s\n" -PRINTTAB=printf "\t%s\n" - -MAKE_SONGBOOK=./songbook.py -MAKE_INDEX=./songbook-makeindex.py -MAKE_CHORDS=./utils/songbook-gtab.py - -ifeq ($(shell which lilypond),) - LILYPOND=$(ECHO) "** lilypond not found" >&2 ; $(ECHO) lilypond - LILYFILE='' -else - LILYPOND=lilypond - LILY_SRC:=$(wildcard $(LIBRARY)/lilypond/*.ly) - LILYFILE=$(LILY_SRC:%.ly=%.pdf) -endif - -LATEX=pdflatex $(LATEX_OPTIONS) -############################################################ -### Targets - -default: songbook.pdf - -all: $(PDF) - -pdf: $(PDF) - xpdf $< - -lilypond: $(LILYFILE) - -clean: - @rm -f $(TARGETS:%=%.d) $(TARGETS:%=%.tex) $(TARGETS:%=%.aux) \ - $(TARGETS:%=%.toc) $(TARGETS:%=%.out) $(TARGETS:%=%.log) \ - $(TARGETS:%=%.nav) $(TARGETS:%=%.snm) - @rm -f *.sbx *.sxd *.sxc - @rm -f *.pyc - -cleanall: clean - @rm -f $(PDF) - @rm -f $(LILYFILE) - -depend: - -############################################################ - - -$(PDF): %.pdf: %.tex %.aux - -%.aux: %.tex - $(LATEX) $< - -%.sbx: %.sxd - $(MAKE_INDEX) $< > $@ - -%.tex: $(BOOKS_DIR)/%.sb - $(MAKE_SONGBOOK) --library=$(LIBRARY) -s $< -o $@ - -%.d: $(BOOKS_DIR)/%.sb - $(MAKE_SONGBOOK) --library=$(LIBRARY) -s $< -d -o $@ - -%.pdf: %.ly - @$(LILYPOND) --format=pdf -e '(define-public songbookstaff "$(SONGBOOKSTAFF)")' --output=$(@:%.pdf=%) $< - -#$(CHORDS): $(CHORDS_SRC) -# $(MAKE_CHORDS) -o $@ - -archive: cleanall - tar -czvf songbook.tar.gz \ - --exclude-vcs \ - --exclude=$(BOOKS_DIR)/default.sb \ - --exclude=perso/* --exclude=perso \ - --exclude=build/* --exclude=build \ - --exclude=data/* --exclude=data \ - --exclude=*tar.gz \ - --transform 's/songbook/songbook-$(DATE)/1' \ - ../songbook - -ifeq (.pdf,$(suffix $(MAKECMDGOALS))) -include $(MAKECMDGOALS:%.pdf=%.d) -else ifneq ($(MAKECMDGOALS),clean) - ifneq ($(MAKECMDGOALS),cleanall) - include $(TARGETS:%=%.d) - endif -endif diff --git a/readme.md b/readme.md index 0d242703..f07e4787 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,7 @@ Songbook Compilation Chain # Description + This package provides a compilation toolchain that produce LaTeX songbook using the LaTeX songs package. A new LaTeX document class is provided to allow specific customisation and new command like embedded @@ -13,21 +14,40 @@ to the CC-BY-SA licence. Other document are subject to the GNU GPLv2 except if another licence is precised in the header. -# Clone Patacrep repos +# Python version + +Songbook is compatible with Python 2.7 (no Python3 since [one of the +library](http://plastex.sourceforge.net/) we are using is not). + +# Download + +Clone Patacrep repos: > git clone git://github.com/crep4ever/songbook-core.git > git clone git://github.com/crep4ever/songbook-data.git -> mv songbook-data songbook-core/songs # Run -> cd songbook-core -> make +> /songbook > +Look for existing songbook files in /books. For example: + +> /songbook /books/songbook_en.sb +> songbook_en.pdf + +# Quick and dirty deb packages + +Install `python-stdeb`, then: + +> python setup.py --command-packages=stdeb.command bdist_deb +> sudo dpkg -i deb_dist/python-songbook-core_-1_all.deb + # Documentation + http://www.patacrep.com/data/documents/doc_en.pdf # Contact & Forums + * http://www.patacrep.com * crep@team-on-fire.com diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 00000000..5d58cdcf --- /dev/null +++ b/setup.cfg @@ -0,0 +1,10 @@ +[bdist_rpm] +requires = python >= 2.7 + python-unidecode + python-jinja2 + texlive + texlive-framed + texlive-nfssext-cfr + lilypond + + diff --git a/setup.py b/setup.py new file mode 100755 index 00000000..9afb38db --- /dev/null +++ b/setup.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +"""Installation script for songbook. + +$ python setup.py install +""" +from distutils.core import setup +from distutils.command.install import install as _install +from songbook_core import __STR_VERSION__ + +import sys +import os +import site + + +def link_songbook(): + if sys.platform.startswith('darwin'): + source = os.path.join(site.PREFIXES[0], + 'bin', + 'songbook') + dest = '/usr/local/bin/songbook' + if os.path.isfile(dest): + print("File {dest} already exist, skipping.".format(dest=dest)) + else: + os.symlink(source, dest) + elif sys.platform.startswith('win32'): + script = os.path.join(site.PREFIXES[0], + 'Scripts', + 'songbook') + dest = script + '.py' + bat_name = script + '.bat' + if os.path.isfile(dest): + os.unlink(dest) + os.rename(script, dest) + content = "python {songbook} %* \n".format(songbook=dest) + with open(bat_name, 'w') as bat_file: + bat_file.write(content) + + +class install(_install): + def run(self): + _install.run(self) + link_songbook() + + +setup(cmdclass={'install': install}, + name='songbook-core', + version=__STR_VERSION__, + description='Songbook compilation chain', + author='The Songbook team', + author_email='crep@team-on-fire.com', + url='https://github.com/patacrep/songbook-core', + packages=['songbook_core'], + license="GPLv2 or any later version", + scripts=['songbook'], + requires=[ + "argparse", "codecs", "distutils", "fnmatch", "glob", "json", + "locale", "logging", "os", "plasTeX", "re", "subprocess", "sys", + "textwrap", "unidecode", "jinja2" + ], + package_data={'songbook_core': ['data/latex/*', + 'data/templates/*', + 'data/examples/*.sb', + 'data/examples/*/*.sg', + 'data/examples/*/*.ly', + 'data/examples/*/*.jpg', + 'data/examples/*/*.png', + 'data/examples/*/*.png', + 'data/examples/*/*/header']}, + classifiers=[ + "Environment :: Console", + "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", + "Natural Language :: English", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS :: MacOS X" + "Programming Language :: Python :: 2.7", + "Topic :: Utilities", + ], + platforms=["GNU/Linux", "Windows", "MacOsX"], +) diff --git a/songbook b/songbook new file mode 100755 index 00000000..678e243e --- /dev/null +++ b/songbook @@ -0,0 +1,137 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# + +"""Command line tool to compile songbooks using the songbook library.""" + +import argparse +import json +import locale +import logging +import os.path +import textwrap +import sys + +from songbook_core.build import SongbookBuilder, DEFAULT_STEPS +from songbook_core import __STR_VERSION__ +from songbook_core import errors + +# Logging configuration +logging.basicConfig(level=logging.INFO) +LOGGER = logging.getLogger() + +# pylint: disable=too-few-public-methods +class ParseStepsAction(argparse.Action): + """Argparse action to split a string into a list.""" + def __call__(self, __parser, namespace, values, __option_string=None): + if not getattr(namespace, self.dest): + setattr(namespace, self.dest, []) + setattr( + namespace, + self.dest, + ( + getattr(namespace, self.dest) + + [value.strip() for value in values[0].split(',')] + ), + ) + +class VerboseAction(argparse.Action): + """Set verbosity level with option --verbose.""" + def __call__(self, *_args, **_kwargs): + LOGGER.setLevel(logging.DEBUG) + +def argument_parser(args): + """Parse argumnts""" + parser = argparse.ArgumentParser(description="A song book compiler") + + parser.add_argument('--version', help='Show version', action='version', + version='%(prog)s ' + __STR_VERSION__) + + parser.add_argument('book', nargs=1, help=textwrap.dedent("""\ + Book to compile. + """)) + + parser.add_argument('--datadir', '-d', nargs=1, type=str, action='store', + help=textwrap.dedent("""\ + Data location. Expected (not necessarily required) + subdirectories are 'songs', 'img', 'latex', 'templates'. + """)) + + parser.add_argument('--verbose', '-v', nargs=0, action=VerboseAction, + help=textwrap.dedent("""\ + Show details about the compilation process. + """)) + + parser.add_argument('--steps', '-s', nargs=1, type=str, + action=ParseStepsAction, + help=textwrap.dedent("""\ + Steps to run. Default is "{steps}". + Available steps are: + "tex" produce .tex file from templates; + "pdf" compile .tex file; + "sbx" compile index files; + "clean" remove temporary files; + any string beginning with '%%' (in this case, it will be run + in a shell). Several steps (excepted the custom shell + command) can be combinend in one --steps argument, as a + comma separated string. + """.format(steps=','.join(DEFAULT_STEPS))), + default=None, + ) + + options = parser.parse_args(args) + + return options + + +def main(): + """Main function:""" + + # set script locale to match user's + try: + locale.setlocale(locale.LC_ALL, '') + except locale.Error as error: + # Locale is not installed on user's system, or wrongly configured. + sys.stderr.write("Locale error: {}\n".format(error.message)) + + options = argument_parser(sys.argv[1:]) + + songbook_path = options.book[0] + + basename = os.path.basename(songbook_path)[:-3] + + try: + with open(songbook_path) as songbook_file: + songbook = json.load(songbook_file) + except Exception as error: # pylint: disable=broad-except + LOGGER.error(error) + LOGGER.error("Error while loading file '{}'.".format(songbook_path)) + sys.exit(1) + + + if options.datadir is not None: + songbook['datadir'] = options.datadir[0] + elif 'datadir' in songbook.keys(): + if not os.path.isabs(songbook['datadir']): + songbook['datadir'] = os.path.join(os.path.dirname(songbook_path), + songbook['datadir'] + ) + else: + songbook['datadir'] = os.path.dirname(songbook_path) + + try: + sb_builder = SongbookBuilder(songbook, basename) + sb_builder.unsafe = True + + sb_builder.build_steps(options.steps) + except errors.SongbookError as error: + LOGGER.error(error) + LOGGER.error( + "Running again with option '-v' may give more information." + ) + sys.exit(1) + + sys.exit(0) + +if __name__ == '__main__': + main() diff --git a/songbook-client.png b/songbook-client.png deleted file mode 100644 index 48ad445c..00000000 Binary files a/songbook-client.png and /dev/null differ diff --git a/songbook-makeindex.py b/songbook-makeindex.py deleted file mode 100755 index 494b9889..00000000 --- a/songbook-makeindex.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Generate indexes files for the Crep's chordbook compilation. This is -# a replacement for the original makeindex program written in C that -# produces an index file (.sbx) from a file generated by the latex -# compilation of the songbook (.sxd). -# -# Usage : songbook-makeindex.py src -# src is the .sxd file generated by latex -# - -import sys -import os.path -import glob -import re -from optparse import OptionParser -import sortindex -import locale - -# Pattern set to ignore latex command in title prefix -keywordPattern = re.compile(r"^%(\w+)\s?(.*)$") -firstLetterPattern = re.compile(r"^(?:\{?\\\w+\}?)*[^\w]*(\w)") - -class index: - data = dict() - keywords = dict() - - def filter(self, key): - letter = firstLetterPattern.match(key).group(1) - if re.match('\d',letter): - letter = '0-9' - return (letter.upper(), key) - - def keyword(self, key, word): - if not self.keywords.has_key(key): - self.keywords[key] = [] - self.keywords[key].append(word) - - def compileKeywords(self): - self.prefix_patterns = [] - if 'prefix' in self.keywords: - for prefix in self.keywords['prefix']: - self.prefix_patterns.append(re.compile(r"^(%s)\b\s*(.*)$" % prefix)) - - def add(self, key, number, link): - for pattern in self.prefix_patterns: - match = pattern.match(key) - if match: - key = "%s (%s)" % (match.group(2), match.group(1)) - break # Only one match per key - (first, key) = self.filter(key) - if not self.data.has_key(first): - self.data[first] = dict() - if not self.data[first].has_key(key): - self.data[first][key] = [] - self.data[first][key].append({'num':number, 'link':link}) - - def refToStr(self, ref): - if sys.version_info >= (2,6): - return '\\hyperlink{{{0[link]}}}{{{0[num]}}}'.format(ref) - else: - return '\\hyperlink{%(link)s}{%(num)s}' % ref - - def entryToStr(self, key, entry): - if sys.version_info >= (2,6): - return '\\idxentry{{{0}}}{{{1}}}\n'.format(key, '\\\\'.join(map(self.refToStr, entry))) - else: - return '\\idxentry{%s}{%s}\n' % (key, '\\\\'.join(map(self.refToStr, entry))) - - def idxBlockToStr(self, letter, entries): - str = '\\begin{idxblock}{'+letter+'}'+'\n' - for key in sorted(entries.keys(), key=sortindex.sortkey): - str += self.entryToStr(key, entries[key]) - str += '\\end{idxblock}'+'\n' - return str - - def entriesToStr(self): - str = "" - for letter in sorted(self.data.keys()): - str += self.idxBlockToStr(letter, self.data[letter]) - return str - -def processSXDEntry(tab): - return (tab[0], tab[1], tab[2]) - -def processSXD(filename): - file = open(filename) - data = [] - for line in file: - data.append(line.strip()) - file.close() - - type = data[0] - i = 1 - idx = index() - - if len(data) > 1: - while data[i].startswith('%'): - keywords = keywordPattern.match(data[i]).groups() - idx.keyword(keywords[0],keywords[1]) - i += 1 - - idx.compileKeywords() - for i in range(i,len(data),3): - entry = processSXDEntry(data[i:i+3]) - idx.add(entry[0],entry[1],entry[2]) - return idx - -def usage(exitCode=None): - print "usage: songbook-makeindex.py [options] source" - sys.exit(exitCode) - -def main(): - locale.setlocale(locale.LC_ALL, '') - usage = "usage: %prog [options] FILE" - parser = OptionParser(usage) - parser.add_option("-o", "--output", dest="filename", - help="write result into FILE", metavar="FILE") - (options, args) = parser.parse_args() - - # Args processing - if len(args) != 1: - parser.error("incorrect number of arguments") - if not os.path.exists(args[0]): - parser.error("inexistant input file") - - # Options processing - if options.filename: - output = open(options.filename,"w") - else: - output = sys.stdout - - # Actual processing - idx = processSXD(args[0]) - output.write(idx.entriesToStr()) - -if __name__ == '__main__': - main() diff --git a/songbook.py b/songbook.py deleted file mode 100755 index 0ac8255b..00000000 --- a/songbook.py +++ /dev/null @@ -1,257 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# - -import getopt, sys -import os.path -import re -import json -import locale -import shutil -import locale -import platform - -from utils.utils import recursiveFind - -reTitle = re.compile('(?<=beginsong\\{)(.(? 0: - out.write(formatDefinition('songslist', songslist(library, songs, prefixes))) - out.write('\\makeatother\n') - - # output template - commentPattern = re.compile(r"^\s*%") - f = open("templates/"+template) - content = [ line for line in f if not commentPattern.match(line) ] - - for index, line in enumerate(content): - if re.compile("getLibraryImgDirectory").search(line): - line = line.replace("\\getLibraryImgDirectory", library + "img/") - content[index] = line - if re.compile("getLibraryLilypondDirectory").search(line): - line = line.replace("\\getLibraryLilypondDirectory", library + "lilypond/") - content[index] = line - - f.close() - out.write(''.join(content)) - - out.close() - -def makeDepend(sb, library, output): - name = output[:-2] - - indexPattern = re.compile(r"^[^%]*\\(?:newauthor|new)index\{.*\}\{(.*?)\}") - lilypondPattern = re.compile(r"^[^%]*\\(?:lilypond)\{(.*?)\}") - - # check for deps (in sb data) - deps = []; - if sb["songs"] == "all": - deps += recursiveFind(os.path.join(library, 'songs'), '*.sg') - else: - deps += map(lambda x: library + "songs/" + x, sb["songs"]) - - # check for lilypond deps (in songs data) if necessary - lilypond = [] - if "bookoptions" in sb and "lilypond" in sb["bookoptions"]: - for filename in deps: - tmpl = open(filename) - lilypond += matchRegexp(lilypondPattern, tmpl) - tmpl.close() - - # check for index (in template file) - if "template" in sb: - filename = sb["template"] - else: - filename = "patacrep.tmpl" - tmpl = open("templates/"+filename) - idx = map(lambda x: x.replace("\getname", name), matchRegexp(indexPattern, tmpl)) - tmpl.close() - - # write .d file - out = open(output, 'w') - out.write('{0} {1} : {2}\n'.format(output, name+".tex", ' '.join(deps))) - out.write('{0} : {1}\n'.format(name+".pdf", ' '.join(map(lambda x: x+".sbx",idx)+map(lambda x: library+"lilypond/"+x+".pdf", lilypond)))) - out.write('\t$(LATEX) {0}\n'.format(name+".tex")) - out.write('{0} : {1}\n'.format(' '.join(map(lambda x: x+".sxd",idx)), name+".aux")) - out.close() - -def usage(): - print "No usage information yet." - -def main(): - locale.setlocale(locale.LC_ALL, '') # set script locale to match user's - try: - opts, args = getopt.getopt(sys.argv[1:], - "hs:o:l:d", - ["help","songbook=","output=","depend","library="]) - except getopt.GetoptError, err: - # print help and exit - print str(err) - usage() - sys.exit(2) - - songbook = None - depend = False - output = None - library = './' - - for o, a in opts: - if o in ("-h", "--help"): - usage() - sys.exit() - elif o in ("-s", "--songbook"): - songbook = a - elif o in ("-d", "--depend"): - depend = True - elif o in ("-o", "--output"): - output = a - elif o in ("-l", "--library"): - if not a.endswith('/'): - a += '/' - library = a - else: - assert False, "unhandled option" - - if songbook and output: - f = open(songbook) - sb = json.load(f) - f.close() - - if depend: - makeDepend(sb, library, output) - else: - makeTexFile(sb, library, output) - -if __name__ == '__main__': - main() diff --git a/songbook_core/__init__.py b/songbook_core/__init__.py new file mode 100644 index 00000000..96f0724e --- /dev/null +++ b/songbook_core/__init__.py @@ -0,0 +1,14 @@ +"""Global variables.""" + +from pkg_resources import resource_filename +import os + +# Version + +__VERSION__ = (3, 7, 2) +__STR_VERSION__ = '.'.join([str(number) for number in __VERSION__]) + +# Directory containing shared data (default templates, custom LaTeX packages, +# etc.) + +__DATADIR__ = os.path.abspath(resource_filename(__name__, 'data')) diff --git a/songbook_core/authors.py b/songbook_core/authors.py new file mode 100644 index 00000000..cea20439 --- /dev/null +++ b/songbook_core/authors.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Authors string management.""" + +def split_author_names(string): + r"""Split author between first and last name. + + The last space separates first and last name, but spaces following a + backslash or a command are not separators. + Examples: + - Edgar Allan Poe => Poe, Edgar Allan + - Edgar Allan \emph {Poe} => \emph {Poe}, Edgar Allan + - The Rolling\ Stones => Rolling\ Stones, The + - The {Rolling Stones} => {Rolling Stones}, The + """ + ignore_space = False + last_space = index = 0 + brace_count = 0 + for char in string: + index += 1 + if brace_count == 0: + if char == "\\": + ignore_space = True + elif not char.isalnum() and ignore_space: + ignore_space = False + elif char == " ": + last_space = index + if char == "}": + brace_count += 1 + if char == "{": + brace_count -= 1 + return string[:last_space], string[last_space:] + + +def split_sep_author(string, sep): + """Split authors string according to separators. + + Arguments: + - string: string containing authors names ; + - sep: regexp matching a separator. + + >>> split_sep_author("Tintin and Milou", '^(.*) and (.*)$') + ["Tintin", "Milou"] + """ + authors = [] + match = sep.match(string) + while match: + authors.append(match.group(2)) + string = match.group(1) + match = sep.match(string) + authors.append(string) + return authors + +################################################################################ +### Process authors tools. +################################################################################ + +def processauthors_removeparen(authors_string): + """Remove parentheses + + See docstring of processauthors() for more information. + """ + opening = 0 + dest = "" + for char in authors_string: + if char == '(': + opening += 1 + elif char == ')' and opening > 0: + opening -= 1 + elif opening == 0: + dest += char + return dest + +def processauthors_split_string(authors_string, sep): + """Split strings + + See docstring of processauthors() for more information. + """ + authors_list = [authors_string] + for sepword in sep: + dest = [] + for author in authors_list: + dest.extend(split_sep_author(author, sepword)) + authors_list = dest + return authors_list + +def processauthors_remove_after(authors_list, after): + """Remove stuff before "after" + + See docstring of processauthors() for more information. + """ + dest = [] + for author in authors_list: + for afterword in after: + match = afterword.match(author) + if match: + author = match.group(1) + break + dest.append(author) + return dest + +def processauthors_ignore_authors(authors_list, ignore): + """Ignore ignored authors + + See docstring of processauthors() for more information. + """ + dest = [] + for author in authors_list: + ignored = False + for ignoreword in ignore: + if author.find(str(ignoreword)) != -1: + ignored = True + break + if not ignored: + dest.append(author) + return dest + +def processauthors_clean_authors(authors_list): + """Clean: remove empty authors and unnecessary spaces + + See docstring of processauthors() for more information. + """ + return [ + author.lstrip() + for author + in authors_list + if author.lstrip() + ] + +def processauthors_invert_names(authors_list): + """Move first names after last names + + See docstring of processauthors() for more information. + """ + dest = [] + for author in authors_list: + first, last = split_author_names(author) + if first: + dest.append("%(last)s, %(first)s" % { + 'first': first.lstrip(), + 'last': last.lstrip(), + }) + else: + dest.append(last.lstrip()) + return dest + +def processauthors(authors_string, after=None, ignore=None, sep=None): + r"""Return a list of authors + + For example, we are processing: + # processauthors( + # "Lyrics by William Blake (from Milton, 1808), + music by Hubert Parry (1916), + and sung by The Royal\ Choir~of~Nowhere + (just here to show you how processing is done)", + # after = ["by"], + # ignore = ["anonymous"], + # sep = [re.compile('^(.*) and (.*)$')], + # ) + + + The "authors_string" string is processed as: + + 1) First, parenthesis (and its content) are removed. + # "Lyrics by William Blake, music by Hubert Parry, + and sung by The Royal\ Choir~of~Nowhere" + + 2) String is split, separators being comma and words from "sep". + # ["Lyrics by William Blake", "music by Hubert Parry", + "sung by The Royal\ Choir~of~Nowhere"] + + 3) Everything before words in "after" is removed. + # ["William Blake", "Hubert Parry", "The Royal\ Choir~of~Nowhere"] + + 4) Strings containing words of "ignore" are dropped. + # ["William Blake", "Hubert Parry", The Royal\ Choir~of~Nowhere"] + + 5) First names are moved after last names + # ["Blake, William", "Parry, Hubert", Royal\ Choir~of~Nowhere, The"] + """ + + if not sep: + sep = [] + if not after: + after = [] + if not ignore: + ignore = [] + + return processauthors_invert_names( + processauthors_clean_authors( + processauthors_ignore_authors( + processauthors_remove_after( + processauthors_split_string( + processauthors_removeparen( + authors_string + ), + sep), + after), + ignore) + ) + ) + diff --git a/songbook_core/build.py b/songbook_core/build.py new file mode 100644 index 00000000..9adaa79d --- /dev/null +++ b/songbook_core/build.py @@ -0,0 +1,297 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Build a songbook, according to parameters found in a .sb file.""" + +import codecs +import glob +import logging +import os.path +import re +from subprocess import Popen, PIPE, call + +from songbook_core import __DATADIR__ +from songbook_core import errors +from songbook_core.files import recursive_find +from songbook_core.index import process_sxd +from songbook_core.songs import Song, SongbookContent +from songbook_core.templates import TexRenderer + +LOGGER = logging.getLogger(__name__) +EOL = "\n" +DEFAULT_AUTHWORDS = { + "after": ["by"], + "ignore": ["unknown"], + "sep": ["and"], + } +DEFAULT_STEPS = ['tex', 'pdf', 'sbx', 'pdf', 'clean'] +GENERATED_EXTENSIONS = [ + "_auth.sbx", + "_auth.sxd", + ".aux", + ".log", + ".out", + ".sxc", + ".tex", + "_title.sbx", + "_title.sxd", + ] + + + +# pylint: disable=too-few-public-methods +class Songbook(object): + """Represent a songbook (.sb) file. + + - Low level: provide a Python representation of the values stored in the + '.sb' file. + - High level: provide some utility functions to manipulate these data. + """ + + def __init__(self, raw_songbook, basename): + super(Songbook, self).__init__() + self.basename = basename + # Default values: will be updated while parsing raw_songbook + self.config = { + 'template': "default.tex", + 'lang': 'english', + 'sort': [u"by", u"album", u"@title"], + 'content': None, + 'datadir': os.path.abspath('.'), + } + self.songslist = None + self._parse_raw(raw_songbook) + + @staticmethod + def _set_songs_default(config): + """Set the default values for the Song() class. + + Argument: + - config : a dictionary containing the configuration + """ + Song.sort = config['sort'] + if 'titleprefixwords' in config: + Song.prefixes = config['titleprefixwords'] + else: + Song.prefixes = [] + Song.authwords['after'] = [ + re.compile(r"^.*%s\b(.*)" % after) + for after + in config['authwords']["after"] + ] + Song.authwords['ignore'] = config['authwords']['ignore'] + Song.authwords['sep'] = [ + re.compile(r"^(.*)%s (.*)$" % sep) + for sep in ([ + " %s" % sep for sep in config['authwords']["sep"] + ] + [',']) + ] + + def _parse_raw(self, raw_songbook): + """Parse raw_songbook. + + The principle is: some special keys have their value processed; others + are stored verbatim in self.config. + """ + self.config.update(raw_songbook) + self.config['datadir'] = os.path.abspath(self.config['datadir']) + + # Compute song list + if self.config['content'] is None: + self.config['content'] = [( + "song", + os.path.relpath( + filename, + os.path.join(self.config['datadir'], 'songs'), + )) + for filename + in recursive_find( + os.path.join(self.config['datadir'], 'songs'), + '*.sg', + ) + ] + else: + content = self.config["content"] + self.config["content"] = [] + for elem in content: + if isinstance(elem, str) or isinstance(elem, unicode): + self.config["content"].append(("song", elem)) + elif isinstance(elem, list): + self.config["content"].append((elem[0], elem[1])) + else: + raise errors.SBFileError( + "Syntax error: could not decode the content " + "of {0}".format(self.basename) + ) + + # Ensure self.config['authwords'] contains all entries + for (key, value) in DEFAULT_AUTHWORDS.items(): + if key not in self.config['authwords']: + self.config['authwords'][key] = value + + def _parse_songs(self): + """Parse content included in songbook.""" + self.contentlist = SongbookContent(self.config['datadir']) + self.contentlist.append_list(self.config['content']) + + def write_tex(self, output): + """Build the '.tex' file corresponding to self. + + Arguments: + - output: a file object, in which the file will be written. + """ + self._parse_songs() + renderer = TexRenderer( + self.config['template'], + self.config['datadir'], + self.config['lang'], + ) + + context = renderer.get_variables() + context.update(self.config) + context['titleprefixkeys'] = ["after", "sep", "ignore"] + context['content'] = self.contentlist + context['filename'] = output.name[:-4] + + self._set_songs_default(context) + renderer.render_tex(output, context) + + +class SongbookBuilder(object): + """Provide methods to compile a songbook.""" + + # if False, do not expect anything from stdin. + interactive = False + # if True, allow unsafe option, like adding the --shell-escape to pdflatex + unsafe = False + # Options to add to pdflatex + _pdflatex_options = [] + # Dictionary of functions that have been called by self._run_once(). Keys + # are function; values are return values of functions. + _called_functions = {} + + def __init__(self, raw_songbook, basename): + # Representation of the .sb songbook configuration file. + self.songbook = Songbook(raw_songbook, basename) + # Basename of the songbook to be built. + self.basename = basename + + def _run_once(self, function, *args, **kwargs): + """Run function if it has not been run yet. + + If it as, return the previous return value. + """ + if function not in self._called_functions: + self._called_functions[function] = function(*args, **kwargs) + return self._called_functions[function] + + def _set_latex(self): + """Set TEXINPUTS and LaTeX options.""" + if not 'TEXINPUTS' in os.environ.keys(): + os.environ['TEXINPUTS'] = '' + os.environ['TEXINPUTS'] += os.pathsep + os.path.join( + __DATADIR__, + 'latex', + ) + os.environ['TEXINPUTS'] += os.pathsep + os.path.join( + self.songbook.config['datadir'], + 'latex', + ) + + if self.unsafe: + self._pdflatex_options.append("--shell-escape") + if not self.interactive: + self._pdflatex_options.append("-halt-on-error") + + def build_steps(self, steps=None): + """Perform steps on the songbook by calling relevant self.build_*() + + Arguments: + - steps: list of steps to perform to compile songbook. Available steps + are: + - tex: build .tex file from templates; + - pdf: compile .tex using pdflatex; + - sbx: compile song and author indexes; + - clean: remove temporary files, + - any string beginning with a sharp sign (#): it is interpreted as a + command to run in a shell. + """ + if not steps: + steps = DEFAULT_STEPS + + for step in steps: + if step == 'tex': + self.build_tex() + elif step == 'pdf': + self.build_pdf() + elif step == 'sbx': + self.build_sbx() + elif step == 'clean': + self.clean() + elif step.startswith("#"): + self.build_custom(step[1:]) + else: + # Unknown step name + raise errors.UnknownStep(step) + + def build_tex(self): + """Build .tex file from templates""" + LOGGER.info("Building '{}.tex'…".format(self.basename)) + with codecs.open( + "{}.tex".format(self.basename), 'w', 'utf-8', + ) as output: + self.songbook.write_tex(output) + + def build_pdf(self): + """Build .pdf file from .tex file""" + LOGGER.info("Building '{}.pdf'…".format(self.basename)) + self._run_once(self._set_latex) + process = Popen( + ["pdflatex"] + self._pdflatex_options + [self.basename], + stdin=PIPE, + stdout=PIPE, + stderr=PIPE) + if not self.interactive: + process.stdin.close() + log = '' + line = process.stdout.readline() + while line: + log += line + line = process.stdout.readline() + LOGGER.debug(log) + + process.wait() + + if process.returncode: + raise errors.LatexCompilationError(self.basename) + + def build_sbx(self): + """Make index""" + LOGGER.info("Building indexes…") + sxd_files = glob.glob("%s_*.sxd" % self.basename) + for sxd_file in sxd_files: + LOGGER.debug("Processing " + sxd_file) + idx = process_sxd(sxd_file) + with codecs.open(sxd_file[:-3] + "sbx", "w", "utf-8") as index_file: + index_file.write(idx.entries_to_str()) + + @staticmethod + def build_custom(command): + """Run a shell command""" + LOGGER.info("Running '{}'…".format(command)) + exit_code = call(command, shell=True) + if exit_code: + raise errors.StepCommandError(command, exit_code) + + def clean(self): + """Clean (some) temporary files used during compilation. + + Depending of the LaTeX modules used in the template, there may be others + that are not deleted by this function.""" + LOGGER.info("Cleaning…") + for ext in GENERATED_EXTENSIONS: + if os.path.isfile(self.basename + ext): + try: + os.unlink(self.basename + ext) + except Exception as exception: + raise errors.CleaningError(self.basename + ext, exception) diff --git a/songbook_core/data/examples/README b/songbook_core/data/examples/README new file mode 100644 index 00000000..942bbf37 --- /dev/null +++ b/songbook_core/data/examples/README @@ -0,0 +1,3 @@ +Run the following command to build an example song book. + +$ PATH/TO/songbook.py example.sb diff --git a/songbook_core/data/examples/example-layout.sb b/songbook_core/data/examples/example-layout.sb new file mode 100644 index 00000000..e252ed5d --- /dev/null +++ b/songbook_core/data/examples/example-layout.sb @@ -0,0 +1,22 @@ +{ +"template" : "layout.tex", +"bookoptions" : [ + "importantdiagramonly", + "repeatchords", + "lilypond", + "pictures" + ], +"booktype" : "chorded", +"lang" : "french", +"authwords" : { + "sep" : ["and", "et"] + }, + "datadir" : ".", + "content" : [["section", "Traditional"], + "chevaliers_de_la_table_ronde.sg", + "greensleeves.sg", + "vent_frais.sg", + ["section", "Example"], + "example-fr.sg", + "example-en.sg"] +} diff --git a/songbook_core/data/examples/example-patacrep.sb b/songbook_core/data/examples/example-patacrep.sb new file mode 100644 index 00000000..dcb27587 --- /dev/null +++ b/songbook_core/data/examples/example-patacrep.sb @@ -0,0 +1,22 @@ +{ +"template" : "patacrep.tex", +"bookoptions" : [ + "importantdiagramonly", + "repeatchords", + "lilypond", + "pictures" + ], +"booktype" : "chorded", +"lang" : "french", +"authwords" : { + "sep" : ["and", "et"] + }, + "datadir" : ".", + "content" : [["section", "Traditional"], + "chevaliers_de_la_table_ronde.sg", + "greensleeves.sg", + "vent_frais.sg", + ["section", "Example"], + "example-fr.sg", + "example-en.sg"] +} diff --git a/songbook_core/data/examples/example-songs.sb b/songbook_core/data/examples/example-songs.sb new file mode 100644 index 00000000..40ed8ebc --- /dev/null +++ b/songbook_core/data/examples/example-songs.sb @@ -0,0 +1,22 @@ +{ +"template" : "songs.tex", +"bookoptions" : [ + "importantdiagramonly", + "repeatchords", + "lilypond", + "pictures" + ], +"booktype" : "chorded", +"lang" : "french", +"authwords" : { + "sep" : ["and", "et"] + }, + "datadir" : ".", + "content" : [["section", "Traditional"], + "chevaliers_de_la_table_ronde.sg", + "greensleeves.sg", + "vent_frais.sg", + ["section", "Example"], + "example-fr.sg", + "example-en.sg"] +} diff --git a/songbook_core/data/examples/example.sb b/songbook_core/data/examples/example.sb new file mode 100644 index 00000000..a003440e --- /dev/null +++ b/songbook_core/data/examples/example.sb @@ -0,0 +1,21 @@ +{ +"bookoptions" : [ + "importantdiagramonly", + "repeatchords", + "lilypond", + "pictures" + ], +"booktype" : "chorded", +"lang" : "french", +"authwords" : { + "sep" : ["and", "et"] + }, + "datadir" : ".", + "content" : [["section", "Traditional"], + "chevaliers_de_la_table_ronde.sg", + "greensleeves.sg", + "vent_frais.sg", + ["section", "Example"], + "example-fr.sg", + "example-en.sg"] +} \ No newline at end of file diff --git a/songbook_core/data/examples/img/README b/songbook_core/data/examples/img/README new file mode 100644 index 00000000..ae8a29d8 --- /dev/null +++ b/songbook_core/data/examples/img/README @@ -0,0 +1,3 @@ +This repository is automatically included as LaTeX graphics path. That is, any +image in this directory can be included in your LaTeX document specifying only +its base name. diff --git a/songbook_core/data/examples/img/treble_a.png b/songbook_core/data/examples/img/treble_a.png new file mode 100644 index 00000000..88383972 Binary files /dev/null and b/songbook_core/data/examples/img/treble_a.png differ diff --git a/songbook_core/data/examples/latex/README b/songbook_core/data/examples/latex/README new file mode 100644 index 00000000..2cf69445 --- /dev/null +++ b/songbook_core/data/examples/latex/README @@ -0,0 +1 @@ +This directory is automatically included in LaTeX path. Thus you can add custom modules in it. diff --git a/songbook_core/data/examples/songs/README b/songbook_core/data/examples/songs/README new file mode 100644 index 00000000..523c8e4a --- /dev/null +++ b/songbook_core/data/examples/songs/README @@ -0,0 +1 @@ +Songs, as .sg files, are expected to be in this directory. diff --git a/lilypond/header b/songbook_core/data/examples/songs/_lilypond/header similarity index 100% rename from lilypond/header rename to songbook_core/data/examples/songs/_lilypond/header diff --git a/songbook_core/data/examples/songs/chevaliers_de_la_table_ronde.sg b/songbook_core/data/examples/songs/chevaliers_de_la_table_ronde.sg new file mode 100644 index 00000000..77dfa869 --- /dev/null +++ b/songbook_core/data/examples/songs/chevaliers_de_la_table_ronde.sg @@ -0,0 +1,70 @@ +\selectlanguage{french} +\songcolumns{2} +\beginsong{Chevaliers de la table ronde} + [by={Traditionnel},cov={traditionnel},album={France}] + + \cover + \gtab{C}{X32010} + \gtab{G7}{320001} + \gtab{F}{1:022100} + + \begin{verse} + Cheva\[C]liers de la Table Ronde + Goûtons \[G7]voir si le vin est \[C]bon + \rep{2} + \end{verse} + + \begin{chorus} + Goûtons \[F]voir, \echo{oui, oui, oui} + Goûtons \[C]voir, \echo{non, non, non} + Goûtons \[G7]voir si le vin est bon + \rep{2} + \end{chorus} + + \begin{verse} + S'il est bon, s'il est agréable + J'en boirai jusqu'à mon plaisir + \end{verse} + + \begin{verse} + J'en boirai cinq à six bouteilles + Et encore, ce n'est pas beaucoup + \end{verse} + + \begin{verse} + Si je meurs, je veux qu'on m'enterre + Dans une cave où il y a du bon vin + \end{verse} + + \begin{verse} + Les deux pieds contre la muraille + Et la tête sous le robinet + \end{verse} + + \begin{verse} + Et les quatre plus grands ivrognes + Porteront les quatre coins du drap + \end{verse} + + \begin{verse} + Pour donner le discours d'usage + On prendra le bistrot du coin + \end{verse} + + \begin{verse} + Et si le tonneau se débouche + J'en boirai jusqu'à mon plaisir + \end{verse} + + \begin{verse} + Et s'il en reste quelques gouttes + Ce sera pour nous rafraîchir + \end{verse} + + \begin{verse} + Sur ma tombe, je veux qu'on inscrive + \emph{Ici gît le roi des buveurs} + \end{verse} + +\endsong + diff --git a/examples/example-en.sg b/songbook_core/data/examples/songs/example-en.sg similarity index 91% rename from examples/example-en.sg rename to songbook_core/data/examples/songs/example-en.sg index 33c9e477..7009cc68 100644 --- a/examples/example-en.sg +++ b/songbook_core/data/examples/songs/example-en.sg @@ -21,10 +21,10 @@ % Sad robot: the song's title % Pornophonique : the artist's name -% 8-bit-lagerfeuer : the file "8-bit-lagerfeuer.jpg" that corresponds to the album art +% traditionnel : the file "8-bit-lagerfeuer.jpg" that corresponds to the album art % 8 bit lagerfeuer : the album whose song is extracted from \beginsong{Sad robot} - [by={Pornophonique},cov={8-bit-lagerfeuer},album={8 bit lagerfeuer}] + [by={Pornophonique},cov={traditionnel},album={8 bit lagerfeuer}] % inserts the album art (8-bit-lagerfeuer.jpg) \cover @@ -45,7 +45,7 @@ % use the \rep{n} macro for a sentence repeated n times % use the \echo{text} macro for background singing lyrics - \lilypond{Sad_robot} % inserts the music sheet corresponding to the Sad_robot.ly file in the ./lilypond directory + %\lilypond{Sad_robot} % inserts the music sheet corresponding to the Sad_robot.ly file in the same directory as this .sg file. % verse environments are automatically numbered \begin{verse} diff --git a/examples/example-fr.sg b/songbook_core/data/examples/songs/example-fr.sg similarity index 90% rename from examples/example-fr.sg rename to songbook_core/data/examples/songs/example-fr.sg index 2eeddd95..c9264096 100644 --- a/examples/example-fr.sg +++ b/songbook_core/data/examples/songs/example-fr.sg @@ -23,10 +23,10 @@ % Sad robot: le titre de la chanson % Pornophonique : le nom de l'artiste -% 8-bit-lagerfeuer : le fichier "8-bit-lagerfeuer.jpg" correspondant à la pochette de l'album +% traditionnel : le fichier "8-bit-lagerfeuer.jpg" correspondant à la pochette de l'album % 8 bit lagerfeuer : le nom de l'album dont la chanson est extraite \beginsong{Sad robot} - [by={Pornophonique},cov={8-bit-lagerfeuer},album={8 bit lagerfeuer}] + [by={Pornophonique},cov={traditionnel},album={8 bit lagerfeuer}] % insère la pochette de l'album (8-bit-lagerfeuer.jpg) \cover @@ -47,7 +47,7 @@ % utilisez la macro \rep{n} pour une phrase répétée n fois % utilisez la macro \echo{text} pour les phrases chantées en arrière plan - \lilypond{Sad_robot} % insère la partition correspondant au fichier Sad_robot.ly du répertoire ./lilypond + %\lilypond{Sad_robot} % insère la partition correspondant au fichier Sad_robot.ly du répertoire de ce fichier .sg \begin{verse} His \[Dm]steely skin is covered @@ -64,14 +64,14 @@ \[F]Can you feel the pain Of the \[C]sad, sad robot And it's \[Dm]driving him insane - \end{verse} + \end{verse*} \begin{verse*} He can't \[Dm]turn back time nor history So his \[F]life became a misery He \[C]has to face the destiny Nobody \[Dm]cares anymore - \end{verse} + \end{verse*} \end{repeatedchords} \begin{chorus} diff --git a/songbook_core/data/examples/songs/greensleeves.ly b/songbook_core/data/examples/songs/greensleeves.ly new file mode 100644 index 00000000..1fd2bccb --- /dev/null +++ b/songbook_core/data/examples/songs/greensleeves.ly @@ -0,0 +1,19 @@ +\include "_lilypond/header" +\paper{paper-height = 6.5\cm} + +{ + \key a \minor + \time 6/8 + \partial 8 a'8 + \relative c''{ + c4 d8 e8. (f16) e8 d4 b8 g8. (a16) b8 + c4 a8 a8. (gis16) a8 b4 gis8 e4 a8 + c4 d8 e8. (f16 e8) d4 b8 g8. (a16) b8 + c8. (b16) a8 gis8. (fis16) gis8 a4 a8 a4. + + g'4. g8. (fis16) e8 d4 b8 g8. (a16) b8 + c4 (a8) a8. (gis16) a8 b4 gis8 e4. + g'4. g8. (fis16) e8 d4 b8 g8. (a16) b8 + c8. (b16) a8 gis8. (fis16) gis8 a4. a4. + } +} diff --git a/songbook_core/data/examples/songs/greensleeves.sg b/songbook_core/data/examples/songs/greensleeves.sg new file mode 100644 index 00000000..469fab99 --- /dev/null +++ b/songbook_core/data/examples/songs/greensleeves.sg @@ -0,0 +1,150 @@ +\selectlanguage{english} +\songcolumns{2} +\beginsong{Greensleeves} + [by={Traditionnel},cov={traditionnel},album={Angleterre}] + + \cover + \gtab{Am}{X02210} + \gtab{G}{320003} + \gtab{E}{022100} + \gtab{C}{X32010} + + \lilypond{greensleeves} + + \begin{verse} + A\[Am]las, my love, ye \[G]do me wrong + To \[Am]cast me oft dis\[E]curteously + And \[Am]{I have} loved \[G]you so long + De\[Am]lighting \[E]in your \[Am]companie + \end{verse} + + \begin{chorus} + \[C]Greensleeves was \[G]all my joy + \[Am]Greensleeves was \[E]my delight + \[C]Greensleeves was my \[G]heart of gold + And \[Am]who but \[E]Ladie \[Am]Greensleeves + \end{chorus} + + \begin{repeatedchords} + \begin{verse} + I \[Am]have been readie \[G]at your hand + To \[Am]grant what ever \[E]you would crave + I \[Am]have both waged \[G]life and land + Your \[Am]love and \[E]good will \[Am]for to have + \end{verse} + + \begin{verse} + I \[Am]bought thee kerchers \[G]to thy head + That \[Am]were wrought fine and \[E]gallantly + I \[Am]kept thee both at \[G]boord and bed + Which \[Am]cost my \[E]purse well \[Am]favouredly + \end{verse} + + \begin{verse} + I \[Am]bought thee peticotes \[G]of the best + The \[Am]cloth so fine as \[E]fine might be + I \[Am]gave thee jewels \[G]for thy chest + And \[Am]all this \[E]cost I \[Am]spent on thee + \end{verse} + + \begin{verse} + Thy \[Am]smock of silke, both \[G]faire and white + With \[Am]gold embrodered \[E]gorgeously + Thy \[Am]peticote of \[G]sendall right + And \[Am]this I \[E]bought thee \[Am]gladly + \end{verse} + + \begin{verse} + Thy \[Am]girdle of gold \[G]so red + With \[Am]pearles bed\[E]ecked sumtuously + The \[Am]like no other \[G]lasses had + And \[Am]yet thou \[E]wouldest not \[Am]love me + \end{verse} + + \begin{verse} + Thy \[Am]purse, and eke thy gay \[G]guilt knives + Thy \[Am]pincase, gallant \[E]to the eie + No \[Am]better wore the \[G]burgesse wives + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + Thy \[Am]crimson stockings, \[G]all of silk + With \[Am]golde all \[E]wrought above the knee + Thy \[Am]pumps, as white as \[G]was the milk + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + Thy \[Am]gown was of the \[G]grassie green + Thy \[Am]sleeves of satten \[E]hanging by + Which \[Am]made thee be our \[G]harvest queen + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + Thy \[Am]garters fringed \[G]with the golde + And \[Am]silver aglets \[E]hanging by + Which \[Am]made thee blithe for \[G]to beholde + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + My gayest gelding I thee gave + To ride where ever liked thee + No ladie ever was so brave + And \[Am]yet thou \[E]wouldst not \[Am]love me + And yet thou wouldst not love me + \end{verse} + + \begin{verse} + My \[Am]men were clothed \[G]all in green + And \[Am]they did ever \[E]wait on thee + All \[Am]this was gallant \[G]to be seen + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + They \[Am]set thee up, they \[G]took thee downe + They \[Am]served thee with hu\[E]militie + Thy \[Am]foote might not once \[G]touch the ground + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + For \[Am]everie morning, \[G]when thou rose + I \[Am]sent thee dainties, \[E]orderly + To \[Am]cheare thy stomack from \[G]all woes + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + Thou \[Am]couldst desire no \[G]earthly thing + But \[Am]stil thou hadst it \[E]readily + Thy \[Am]musicke still to \[G]play and sing + And \[Am]yet thou \[E]wouldst not \[Am]love me + \end{verse} + + \begin{verse} + And \[Am]who did pay for \[G]all this geare + That \[Am]thou didst spend when \[E]pleased thee? + Even \[Am]{I that} am re\[G]jected here + And \[Am]thou dis\[E]dainst to \[Am]love me + \end{verse} + + \begin{verse} + Wei, \[Am]{I wil} pray to \[G]God on hie + That \[Am]thou my constancie \[E]maist see + And \[Am]that yet once be\[G]fore I die + Thou \[Am]will vouch\[E]safe to \[Am]love me + \end{verse} + + \begin{chorus} + \[C]Greensleeves, now \[G]farewel, adue! + \[Am]God I pray to \[E]prosper thee + \[C]For I am stil thy \[G]lover true + Come \[Am]once a\[E]gaine, and \[Am]love me! + \end{chorus} + \end{repeatedchords} + +\endsong diff --git a/songbook_core/data/examples/songs/traditionnel.jpg b/songbook_core/data/examples/songs/traditionnel.jpg new file mode 100644 index 00000000..e7d441cb Binary files /dev/null and b/songbook_core/data/examples/songs/traditionnel.jpg differ diff --git a/songbook_core/data/examples/songs/vent_frais.sg b/songbook_core/data/examples/songs/vent_frais.sg new file mode 100644 index 00000000..36584ad7 --- /dev/null +++ b/songbook_core/data/examples/songs/vent_frais.sg @@ -0,0 +1,19 @@ +\selectlanguage{french} +\songcolumns{2} +\beginsong{Vent frais} + [by={Traditionnel},cov={traditionnel},album={France}] + + \cover + \gtab{Dm}{XX0231} + \gtab{Am}{X02210} + + \begin{verse} + \[Dm]Vent \[Am]frais + \[Dm]Vent du ma\[Am]tin + \[Dm]Vent qui \[Am]souffle + Au \[Dm]sommet des grands \[Am]pins + \[Dm]Joie du \[Am]vent qui \[Dm]souffle + A\[Am]llons dans le grand \dots + \end{verse} + +\endsong diff --git a/songbook_core/data/examples/templates/README b/songbook_core/data/examples/templates/README new file mode 100644 index 00000000..95fb96d1 --- /dev/null +++ b/songbook_core/data/examples/templates/README @@ -0,0 +1 @@ +Templates are looked for in this directory. diff --git a/songbook_core/data/latex/SongbookUtils.sty b/songbook_core/data/latex/SongbookUtils.sty new file mode 100644 index 00000000..251e1063 --- /dev/null +++ b/songbook_core/data/latex/SongbookUtils.sty @@ -0,0 +1,399 @@ +% Songbook Package -- version 0.1 for LaTeX2e +% +% This package provides macro for automatic songbook +% generation. See http://github.com/patacrep/songbook-core/ + +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{SongbookUtils}[2014/04/13 Songbook Package, version 0.1] + +\RequirePackage{graphicx,xcolor} % +\RequirePackage{epstopdf} % +\RequirePackage{fancybox} +\RequirePackage{xstring} +\RequirePackage{framed} +\RequirePackage{currfile} +\RequirePackage{ifthen} +\RequirePackage{tikz} + +% tabs: display the guitar tabs +\newif{\iftabs} +\DeclareOption{tabs}{\tabstrue} + +% lilypond: display Lilypond music sheets +\newif{\iflilypond} +\DeclareOption{lilypond}{\lilypondtrue} + +\newif{\iflilypondauto} +\DeclareOption{lilypond}{\lilypondautotrue\lilypondtrue} + +% diagram: display chord diagrams at the beginning +\newif{\ifdiagram} +\DeclareOption{diagram}{\diagramtrue} + +% importantdiagramonly: only display important chords +\newif{\ifimportantdiagramonly} +\DeclareOption{importantdiagramonly}{\importantdiagramonlytrue\diagramtrue} + +% pictures: display song covers and songbook titlepage picture +\newif{\ifpictures} +\DeclareOption{pictures}{\picturestrue} + +% repeatchords: display chords in every verse if the song allows it +\newif{\ifrepeatchords} +\DeclareOption{repeatchords}{\repeatchordstrue} + +% onesongperpage: force single page for each song +\newif{\ifonesongperpage} +\DeclareOption{onesongperpage}{\onesongperpagetrue} + +%%% Instruments +% ukulele: display ukulele tabs +\newif{\ifukulele} +\DeclareOption{ukulele}{\ukuleletrue} + +% guitar: display guitar tabs +\newif{\ifguitar} +\DeclareOption{guitar}{\guitartrue} + +% Remaining options are passed to the songs package +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{songs}} + +\ProcessOptions\relax + +\RequirePackage{songs} % + +\iflyric + \tabsfalse % + \lilypondfalse% + \diagramfalse% + \picturesfalse% + \renewcommand{\colbotglue}{0pt plus .5\textheight minus 0pt}% +\fi + +% Patch for Debian TeXLive 2012 +% A bug may produce corrupted PDF +\pdfobjcompresslevel=0 + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Multilanguage management + +\def\lang#1{\def\mainlanguage{#1}} + +\AtBeginDocument{ + % Default names (english) + \def\songlistname{Songs list} + \def\originalsongname{Original song:} + \def\introname{intro} + \def\outroname{outro} + \def\bridgename{bridge} + \def\chorusname{chorus} + \def\versename{verse} + \def\soloname{solo} + \def\patternname{pattern} + \def\rythmname{rythm} + \def\transpositionname{transposition:} + \def\songindexname{Songs Index} + \def\authorindexname{Authors Index} + \def\chordlistname{Chords list} + +\IfStrEq{\mainlanguage}{french}{ + % French names + \def\songlistname{Liste des chansons} + \def\originalsongname{Chanson originale :} + \def\introname{intro} + \def\outroname{outro} + \def\bridgename{pont} + \def\chorusname{refrain} + \def\versename{couplet} + \def\soloname{solo} + \def\patternname{motif} + \def\rythmname{rythme} + \def\transpositionname{transposition :} + \def\songindexname{Index des chansons} + \def\authorindexname{Index des auteurs} + \def\chordlistname{Liste des accords} + }{} +} + +\def\andname{and} +\def\lastandname{\unskip, and} + +% End of multilanguage management +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Add some informations to the songs +\newlength{\coverheight} +\setlength{\coverheight}{2cm} +\newlength{\coverspace} +\setlength{\coverspace}{0.1cm} +\newcommand{\songcover}{} +\newcommand{\songalbum}{} +\newsongkey{cov}{\let\songcover\@empty}{\def\songcover{\currfiledir#1}} +\newsongkey{vcov}{\let\songcover\@empty}{\def\songcover{#1}} +\newsongkey{album}{\let\songalbum\@empty}{\def\songalbum{#1}} +\newsongkey{url}{\let\songurl\@empty}{\def\songurl{#1}} +\newsongkey{original}{\let\songoriginal\@empty}{\def\songoriginal{#1}} + +% Insert cover pictures +\newcommand\cover{% + \ifpictures% + \ifx\songcover\@empty\else% + \mbox{% + \includegraphics[width=\coverheight]{\songcover}% + \hspace{\coverspace}% + }% + \fi% + \fi% +} + +% display album in song header +\renewcommand{\extendprelude}{ + {\bfseries\showauthors} + {\footnotesize\it\songalbum} + \IfStrEq{\songurl}{}{}{ + \href{\songurl}{\includegraphics[width=.3cm]{internet}} + } +} + +% display original song name in the postlude +\renewcommand{\extendpostlude}{ + {\footnotesize% + \IfStrEq{\songoriginal}{}{}{ + \originalsongname + \songoriginal + } + } +} + +\let\utab\gtab +\let\utab@Original\utab +\newcommand{\utab@Hidden}[2]{}% + +\let\gtab@Original\gtab +\newcommand{\gtab@Hidden}[2]{}% + +\ifdiagram% + \ifimportantdiagramonly% + \renewcommand{\gtab}{\@ifstar + \gtab@Original% + \gtab@Hidden% + } + \renewcommand{\utab}{\@ifstar + \utab@Original% + \utab@Hidden% + } + \else% + \renewcommand{\gtab}{\@ifstar + \gtab@Original% + \gtab@Original% + } + \renewcommand{\utab}{\@ifstar + \utab@Original% + \utab@Original% + } + \fi% +\else% + \renewcommand{\gtab}{\@ifstar + \gtab@Hidden% + \gtab@Hidden% + } + \renewcommand{\utab}{\@ifstar + \utab@Hidden% + \utab@Hidden% + } +\fi% + +\ifguitar% +\else + \renewcommand{\gtab}{\@ifstar + \gtab@Hidden% + \gtab@Hidden% + } +\fi% + +\ifukulele% +\else + \renewcommand{\utab}{\@ifstar + \utab@Hidden% + \utab@Hidden% + } +\fi% + +% End of the new informations +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Lilypond + +% On-the-fly compilation of lilypond files +\iflilypondauto + \epstopdfDeclareGraphicsRule{.ly}{pdf}{.pdf}{lilypond --format=pdf --output=\Gin@base\ETE@suffix\space #1} + \AppendGraphicsExtensions{.ly} +\fi + +% Conditional inclusion of lilypond sheet music. +\newcommand{\lilypond}[1]{% + \iflilypond% + \includegraphics{\currfiledir#1}% + \fi% +} +\newcommand{\vlilypond}[1]{% + \iflilypond% + \includegraphics{#1}% + \fi% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Useful commands +\newcommand{\image}[2][]{% + \ifpictures% + \begin{flushright}% + \includegraphics[#1]{#2}% + \end{flushright}% + \fi% +} + +\newcommand*{\Intro}{% + \introname% +}% +\newcommand*{\Outro}{% + \outroname% +}% +\newcommand*{\Bridge}{% + \bridgename% +}% +\newcommand*{\Chorus}{% + \chorusname% +}% +\newcommand*{\Verse}{% + \versename% +}% +\newcommand*{\Solo}{% + \soloname% +}% +\newcommand*{\Pattern}{% + \patternname% +}% +\newcommand*{\Rythm}{% + \rythmname% +}% +\newcommand*{\Adlib}{% + \emph{ad~lib.}% +}% + +% Use a new framed command for bridges +\renewcommand{\FrameCommand}[1]{ + \begin{tikzpicture} + \node[rectangle] (rect) { + \begin{minipage}{.8\textwidth} + #1 + \end{minipage} + }; + \draw[very thick, dashed] (rect.north west) -- (rect.south west); + \end{tikzpicture} +} +\newenvironment{bridge} +{% + \begin{framed} + \vspace{-.4cm} + \begin{verse*} +} +{% + \end{verse*} + \vspace{-.2cm} + \end{framed} +} + +%% \SB@chordsoff with a greater for the line spacing +\newcommand{\CB@chordshidden}{% + \def\SB@bracket##1]{\ignorespaces}% + \let\SB@rechord\relax% + \let\SB@ch\SB@ch@off% + \ifSB@measurespec% + \ifmeasures\SB@measureson\else\SB@measuresoff\fi% + \else% + \SB@measuresoff% + \fi% + \ifSB@preamble\let\colbotglue{\z@\@plus.5\textheight}\fi% + \SB@setbaselineskip% +} + +\newenvironment{repeatedchords}{% + \ifrepeatchords% + \else% + \CB@chordshidden% + \fi +}{}% + +\def\removefirstch@r#1{} +\newcommand{\transposition}[1]{% + \ifrepeatchords% + \transpose{#1} + \else% + \musicnote{% + \transpositionname~ + \ifthenelse{#1>0}{#1$\Uparrow$}{\removefirstch@r#1$\Downarrow$}% + }% + \fi% +}% + +% Definition of environment "tab" +\iftabs + \RequirePackage{tabs} +\else + \RequirePackage{verbatim} + \newenvironment{tab}{\comment}{\endcomment} +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% One song per page? + +\ifonesongperpage% +\renewcommand\songcolumns[1]{% + \SB@cnt#1\relax% + \ifSB@preamble\else{\SB@clearpage}\fi% + \SB@numcols\SB@cnt% + \ifnum\SB@numcols>\z@% + \SB@colwidth-\columnsep% + \multiply\SB@colwidth\SB@numcols% + \advance\SB@colwidth\columnsep% + \advance\SB@colwidth\textwidth% + \divide\SB@colwidth\SB@numcols% + \else% + \ifrepchorus\SB@warnrc\fi% + \fi% +} +\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Enhance \textnote and \musicnote, to display them according to the current language. + +\let\@textnoteold\textnote +\renewcommand{\textnote}[2][]{% + \vspace{.1cm} + \IfStrEq{}{#1}{\@textnoteold{#2}}{ + \iflanguage{#1}{\@textnoteold{#2}}{} + } +} + +\let\@musicnoteold\musicnote +\renewcommand{\musicnote}[2][]{% + \vspace{.1cm} + \IfStrEq{}{#1}{\@musicnoteold{#2}}{ + \iflanguage{#1}{\@musicnoteold{#2}}{} + } +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\endinput diff --git a/songbook_core/data/latex/chords.sty b/songbook_core/data/latex/chords.sty new file mode 100644 index 00000000..c3c05caf --- /dev/null +++ b/songbook_core/data/latex/chords.sty @@ -0,0 +1,354 @@ +% Chords package for patacrep songbook +% Define command \chords to display list of chords, for guitar or ukulele +\ProvidesPackage{chords} +\RequirePackage{songs} +\newcommand*{\Sharp}{\nolinebreak\hspace{-.05em}\raisebox{.6ex}{\,\small\bf \#}} +\newcommand*{\Flat}{\nolinebreak\hspace{-.05em}\raisebox{.6ex}{\,\small$\mathbf{\flat}$}} +\newcommand*{\chordrule}{\mbox{\hspace{1cm}\rule[0.5cm]{15cm}{0.02cm}}\vspace{-.4cm}} +\newcommand*{\chordname}[1]{\makebox[3cm]{\raisebox{.5cm}{\large \textbf{#1}}}} + +\newcommand{\chordnameAsharp}{\printnoteA{}\Sharp = \printnoteB{}\Flat} +\newcommand{\chordnameA}{\printnoteA{}} +\newcommand{\chordnameB}{\printnoteB{}} +\newcommand{\chordnameCsharp}{\printnoteC{}\Sharp = \printnoteD{}\Flat} +\newcommand{\chordnameC}{\printnoteC{}} +\newcommand{\chordnameDsharp}{\printnoteD{}\Sharp = \printnoteE{}\Flat} +\newcommand{\chordnameD}{\printnoteD{}} +\newcommand{\chordnameE}{\printnoteE{}} +\newcommand{\chordnameFsharp}{\printnoteF{}\Sharp = \printnoteG{}\Flat} +\newcommand{\chordnameF}{\printnoteF{}} +\newcommand{\chordnameGsharp}{\printnoteG{}\Sharp = \printnoteA{}\Flat} +\newcommand{\chordnameG}{\printnoteG{}} + +\AtBeginDocument{ + % Default names (english) + \newcommand{\guitarchordsname}{Guitar chords} + \newcommand{\ukulelechordsname}{Ukulele chords} + + \IfStrEq{\mainlanguage}{french}{ + % French names + \renewcommand{\guitarchordsname}{Accords de guitare} + \renewcommand{\ukulelechordsname}{Accords de ukulélé} + }{} +} + + +\newcommand{\chords}{ + \begin{songs}{} + %hide song number + \definecolor{SongNumberBgColor}{HTML}{FFFFFF} + \renewcommand{\snumbgcolor}{SongNumberBgColor} + \renewcommand{\printsongnum}[1]{} + \setlength{\songnumwidth}{0.1cm} + \songcolumns{1} + + \ifguitar + \beginsong{\guitarchordsname} + \chordname{\chordnameC} + \gtab{\printnoteC{}}{~:X32010} + \gtab{\printnoteC{}7}{~:X32310} + \gtab{\printnoteC{}m}{3:X02210} + \gtab{\printnoteC{}m7}{3:X02010} + \hspace{1cm} + \gtab*{\printnoteC{}7M}{~:332000} + \gtab*{\printnoteC{}4}{~:X32011} + \gtab*{\printnoteC{}7}{1:X2120X} + \gtab*{\printnoteC{}6}{~:XX2213} + \chordrule + + \chordname{\chordnameCsharp} + \gtab{\printnoteC{}\#}{4:X02220} + \gtab{\printnoteC{}\#7}{4:X02020} + \gtab{\printnoteC{}\#m}{4:X02210} + \gtab{\printnoteC{}\#m7}{5:XX2213} + \hspace{1cm} + \gtab*{\printnoteC{}\#7M}{1:X32000} + \gtab*{\printnoteC{}\#4}{2:X21000} + \gtab*{\printnoteC{}\#7}{2:X2120X} + \gtab*{\printnoteC{}\#6}{1:X02010} + \chordrule + + \chordname{\chordnameD} + \gtab{\printnoteD{}}{~:XX0232} + \gtab{\printnoteD{}7}{~:XX0212} + \gtab{\printnoteD{}m}{~:XX0231} + \gtab{\printnoteD{}m7}{~:XX0211} + \hspace{1cm} + \gtab*{\printnoteD{}7M}{~:X00222} + \gtab*{\printnoteD{}4}{~:X00233} + \gtab*{\printnoteD{}7}{3:X2120X} + \gtab*{\printnoteD{}6}{~:X00202} + \chordrule + + \chordname{\chordnameDsharp} + \gtab{\printnoteD{}\#}{6:X02220} + \gtab{\printnoteD{}\#7}{6:X02020} + \gtab{\printnoteD{}\#m}{6:X02210} + \gtab{\printnoteD{}\#m7}{~:XX1322} + \hspace{1cm} + \gtab*{\printnoteD{}\#7M}{3:022010} + \gtab*{\printnoteD{}\#4}{4:X21000} + \gtab*{\printnoteD{}\#7}{4:X2120X} + \gtab*{\printnoteD{}\#6}{1:X00202} + \chordrule + + \chordname{\chordnameE} + \gtab{\printnoteE{}}{~:022100} + \gtab{\printnoteE{}7}{~:020100} + \gtab{\printnoteE{}m}{~:022000} + \gtab{\printnoteE{}m7}{~:022030} + \hspace{1cm} + \gtab*{\printnoteE{}7M}{~:021100} + \gtab*{\printnoteE{}4}{~:02220} + \gtab*{\printnoteE{}7}{5:X2120X} + \gtab*{\printnoteE{}6}{~:022120} + \chordrule + + \chordname{\chordnameF} + \gtab{\printnoteF{}}{1:022100} + \gtab{\printnoteF{}7}{1:020100} + \gtab{\printnoteF{}m}{1:022000} + \gtab{\printnoteF{}m7}{1:020000} + \hspace{1cm} + \gtab*{\printnoteF{}7M}{~:XX3210} + \gtab*{\printnoteF{}4}{1:022200} + \gtab*{\printnoteF{}7}{6:X2120X} + \gtab*{\printnoteF{}6}{~:XX0211} + \chordrule + + \chordname{\chordnameFsharp} + \gtab{\printnoteF{}\#}{2:022100} + \gtab{\printnoteF{}\#7}{2:020100} + \gtab{\printnoteF{}\#m}{2:022000} + \gtab{\printnoteF{}\#m7}{2:020000} + \hspace{1cm} + \gtab*{\printnoteF{}\#7M}{~:XX4321} + \gtab*{\printnoteF{}\#4}{2:022200} + \gtab*{\printnoteF{}\#7}{7:X2120X} + \gtab*{\printnoteF{}\#6}{~:XX1322} + \chordrule + + \chordname{\chordnameG} + \gtab{\printnoteG{}}{~:320003} + \gtab{\printnoteG{}7}{~:320001} + \gtab{\printnoteG{}m}{3:022000} + \gtab{\printnoteG{}m7}{3:020000} + \hspace{1cm} + \gtab*{\printnoteG{}7M}{~:XX0002} + \gtab*{\printnoteG{}4}{3:022200} + \gtab*{\printnoteG{}7}{3:020200} + \gtab*{\printnoteG{}6}{~:320000} + \chordrule + + \chordname{\chordnameGsharp} + \gtab{\printnoteG{}\#}{4:022100} + \gtab{\printnoteG{}\#7}{4:020100} + \gtab{\printnoteG{}\#m}{4:022000} + \gtab{\printnoteG{}\#m7}{4:020000} + \hspace{1cm} + \gtab*{\printnoteG{}\#7M}{3:XX4321} + \gtab*{\printnoteG{}\#4}{4:022200} + \gtab*{\printnoteG{}\#7}{~:XX1122} + \gtab*{\printnoteG{}\#6}{~:XX1111} + \chordrule + + \chordname{\chordnameA} + \gtab{\printnoteA{}}{~:X02220} + \gtab{\printnoteA{}7}{~:X02020} + \gtab{\printnoteA{}m}{~:X02210} + \gtab{\printnoteA{}m7}{~:X02213} + \hspace{1cm} + \gtab*{\printnoteA{}7M}{~:X02120} + \gtab*{\printnoteA{}4}{~:X02230} + \gtab*{\printnoteA{}7}{~:X02233} + \gtab*{\printnoteA{}6}{~:XX2222} + \chordrule + + \chordname{\chordnameAsharp} + \gtab{\printnoteA{}\#}{1:X02220} + \gtab{\printnoteA{}\#7}{1:X02020} + \gtab{\printnoteA{}\#m}{1:X02210} + \gtab{\printnoteA{}\#m7}{1:X02010} + \hspace{1cm} + \gtab*{\printnoteA{}\#7M}{1:X02120} + \gtab*{\printnoteA{}\#4}{1:X02230} + \gtab*{\printnoteA{}\#7}{~:XX3344} + \gtab*{\printnoteA{}\#6}{~:XX3333} + \chordrule + + \chordname{\chordnameB} + \gtab{\printnoteB{}}{2:X02220} + \gtab{\printnoteB{}7}{X21202} + \gtab{\printnoteB{}m}{2:X02210} + \gtab{\printnoteB{}m7}{~:X00202} + \hspace{1cm} + \gtab*{\printnoteB{}7M}{2:X02120} + \gtab*{\printnoteB{}4}{2:X02230} + \gtab*{\printnoteB{}7}{~:X22202} + \gtab*{\printnoteB{}6}{~:XX4444} + + \begin{verse*} + \musicnote[french]{Accordage standard : {\nolyrics \[\printnoteE{} \printnoteA{} \printnoteD{} \printnoteG{} \printnoteB{} \printnoteE{}]}} + \musicnote[english]{Standard tuning: {\nolyrics \[\printnoteE{} \printnoteA{} \printnoteD{} \printnoteG{} \printnoteB{} \printnoteE{}]}} + \end{verse*} + + \endsong + \fi + + \ifukulele + \beginsong{\ukulelechordsname} + + \chordname{\chordnameC} + \utab{\printnoteC{}}{~:0003} + \utab{\printnoteC{}7}{~:0001} + \utab{\printnoteC{}m}{~:0333} + \utab{\printnoteC{}m7}{3:0000} + \hspace{1cm} + \utab*{\printnoteC{}7M}{~:0002} + \utab*{\printnoteC{}6}{~:0000} + \utab*{\printnoteC{}aug}{~:1003} + \utab*{\printnoteC{}dim}{2:3101} + \chordrule + + \chordname{\chordnameCsharp} + \utab{\printnoteC{}\#}{1:0003} + \utab{\printnoteC{}\#7}{1:0001} + \utab{\printnoteC{}\#m}{~:1104} + \utab{\printnoteC{}\#m7}{4:0000} + \hspace{1cm} + \utab*{\printnoteC{}\#7M}{1:0002} + \utab*{\printnoteC{}\#6}{1:0000} + \utab*{\printnoteC{}\#aug}{~:2110} + \utab*{\printnoteC{}\#dim}{~:0104} + \chordrule + + \chordname{\chordnameD} + \utab{\printnoteD{}}{~:2220} + \utab{\printnoteD{}7}{2:0001} + \utab{\printnoteD{}m}{~:2210} + \utab{\printnoteD{}m7}{1:1102} + \hspace{1cm} + \utab*{\printnoteD{}7M}{2:0002} + \utab*{\printnoteD{}6}{2:0000} + \utab*{\printnoteD{}aug}{1:2110} + \utab*{\printnoteD{}dim}{1:0104} + \chordrule + + \chordname{\chordnameDsharp} + \utab{\printnoteD{}\#}{1:2220} + \utab{\printnoteD{}\#7}{3:0001} + \utab{\printnoteD{}\#m}{1:2210} + \utab{\printnoteD{}\#m7}{2:1102} + \hspace{1cm} + \utab*{\printnoteD{}\#7M}{3:0002} + \utab*{\printnoteD{}\#6}{3:0000} + \utab*{\printnoteD{}\#aug}{~:0332} + \utab*{\printnoteD{}\#dim}{~:2320} + \chordrule + + \chordname{\chordnameE} + \utab{\printnoteE{}}{2:2220} + \utab{\printnoteE{}7}{~:1202} + \utab{\printnoteE{}m}{~:0432} + \utab{\printnoteE{}m7}{~:0202} + \hspace{1cm} + \utab*{\printnoteE{}7M}{~:1302} + \utab*{\printnoteE{}6}{~:1102} + \utab*{\printnoteE{}aug}{1:0000} + \utab*{\printnoteE{}dim}{1:2320} + \chordrule + + \chordname{\chordnameF} + \utab{\printnoteF{}}{~:2010} + \utab{\printnoteF{}7}{~:2310} + \utab{\printnoteF{}m}{~:1013} + \utab{\printnoteF{}m7}{1:0202} + \hspace{1cm} + \utab*{\printnoteF{}7M}{1:1302} + \utab*{\printnoteF{}6}{1:1102} + \utab*{\printnoteF{}aug}{~:2110} + \utab*{\printnoteF{}dim}{2:2320} + \chordrule + + \chordname{\chordnameFsharp} + \utab{\printnoteF{}\#}{1:2010} + \utab{\printnoteF{}\#7}{1:2310} + \utab{\printnoteF{}\#m}{~:2120} + \utab{\printnoteF{}\#m7}{2:0202} + \hspace{1cm} + \utab*{\printnoteF{}\#7M}{2:1302} + \utab*{\printnoteF{}\#6}{~:0202} + \utab*{\printnoteF{}\#aug}{1:2110} + \utab*{\printnoteF{}\#dim}{~:2020} + \chordrule + + \chordname{\chordnameG} + \utab{\printnoteG{}}{~:0232} + \utab{\printnoteG{}7}{~:0212} + \utab{\printnoteG{}m}{~:0231} + \utab{\printnoteG{}m7}{~:0211} + \hspace{1cm} + \utab*{\printnoteG{}7M}{~:0222} + \utab*{\printnoteG{}6}{~:0202} + \utab*{\printnoteG{}aug}{~:0332} + \utab*{\printnoteG{}dim}{~:0131} + \chordrule + + \chordname{\chordnameGsharp} + \utab{\printnoteG{}\#}{3:2010} + \utab{\printnoteG{}\#7}{1:0212} + \utab{\printnoteG{}\#m}{1:0231} + \utab{\printnoteG{}\#m7}{1:0211} + \hspace{1cm} + \utab*{\printnoteG{}\#7M}{1:0222} + \utab*{\printnoteG{}\#6}{1:0202} + \utab*{\printnoteG{}\#aug}{~:1003} + \utab*{\printnoteG{}\#dim}{1:0131} + \chordrule + + \chordname{\chordnameA} + \utab{\printnoteA{}}{~:2100} + \utab{\printnoteA{}7}{~:0100} + \utab{\printnoteA{}m}{~:2000} + \utab{\printnoteA{}m7}{~:0000} + \hspace{1cm} + \utab*{\printnoteA{}7M}{~:1100} + \utab*{\printnoteA{}6}{2:0202} + \utab*{\printnoteA{}aug}{~:2110} + \utab*{\printnoteA{}dim}{2:0131} + \chordrule + + \chordname{\chordnameAsharp} + \utab{\printnoteA{}\#}{1:2100} + \utab{\printnoteA{}\#7}{1:0100} + \utab{\printnoteA{}\#m}{1:2000} + \utab{\printnoteA{}\#m7}{1:0000} + \hspace{1cm} + \utab*{\printnoteA{}\#7M}{1:1100} + \utab*{\printnoteA{}\#6}{~:0211} + \utab*{\printnoteA{}\#aug}{1:2110} + \utab*{\printnoteA{}\#dim}{~:3101} + \chordrule + + \chordname{\chordnameB} + \utab{\printnoteB{}}{2:2100} + \utab{\printnoteB{}7}{2:0100} + \utab{\printnoteB{}m}{2:2000} + \utab{\printnoteB{}m7}{2:0000} + \hspace{1cm} + \utab*{\printnoteB{}7M}{2:1100} + \utab*{\printnoteB{}6}{1:0211} + \utab*{\printnoteB{}aug}{~:0332} + \utab*{\printnoteB{}dim}{1:3101} + + \begin{verse*} + \musicnote[french]{Accordage standard : {\nolyrics \[\printnoteG{} \printnoteC{} \printnoteE{} \printnoteA{}]}} + \musicnote[english]{Standard tuning: {\nolyrics \[\printnoteG{} \printnoteC{} \printnoteE{} \printnoteA{}]}} + \end{verse*} + + \endsong + \fi + + \end{songs} +} +\endinput diff --git a/songbook_core/data/latex/crepbook.sty b/songbook_core/data/latex/crepbook.sty new file mode 100644 index 00000000..879c4d9e --- /dev/null +++ b/songbook_core/data/latex/crepbook.sty @@ -0,0 +1,221 @@ +% Crepbook Package -- version 0.1 for LaTeX2e +% +% This package is intended to be used with the songbook Python program (and its +% interfaces). +% It defines some layout for automatic songbook generation. +% See http://github.com/patacrep/songbook-core/ + +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{crepbook}[2014/04/13 Crepbook Package, version 0.1] + +% fancy-capo: When a capo is necessary, use a picture instead of text. +\newif{\iffancycapo} +\DeclareOption{fancy-capo}{\fancycapotrue} + +% nocustomtitle: Disable title page fancy definition (back to LaTeX default) +\newif{\ifcustomtitle} +\customtitletrue +\DeclareOption{nocustomtitle}{\customtitlefalse} + +% nocustomfonts: Disable fancy fonts definition (back to LaTeX default) +\newif{\ifcustomfonts} +\customfontstrue +\DeclareOption{nocustomfonts}{\customfontsfalse} + +% Remaining options are passed to the SongbookUtils package +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{SongbookUtils}} + +\ProcessOptions\relax + +\RequirePackage{SongbookUtils} + +\ifpictures + \fancycapotrue +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Layout tweaks + +% Configuration of the songs package +% Horizontal space reserved to verse number +\setlength{\versenumwidth}{1em} +% Modifier to the space between consecutive lines of lyrics +\baselineadj=-6pt plus 0pt minus 2pt +% Space between verses and chorus +\versesep=6pt plus 2pt minus 2pt + + + +% Paragraph indentation space +\setlength{\parindent}{0.3cm} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Multilanguage management + +\AtBeginDocument{ + % Default names (english) + \def\labelversionname{Version:} + \def\labeldatename{Date:} + \def\labelauthorname{Authors:} + \def\labelwebname{Web:} + \def\labelmailname{Email:} + + \IfStrEq{\mainlanguage}{french}{ + % French names + \def\labelversionname{Version~:} + \def\labeldatename{Date~:} + \def\labelauthorname{Auteurs~:} + \def\labelwebname{Web~:} + \def\labelmailname{Mail~:} + }{} +} + +% End of multilanguage management +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Title page +\long\def\subtitle#1{\long\def\@subtitle{#1}} +\def\version#1{\def\@version{#1}} +\def\web#1{\def\@web{#1}} +\def\mail#1{\def\@mail{#1}} +\def\email#1{\def\@email{#1}} +\def\picture#1{\def\@picture{#1}} +\def\picturecopyright#1{\def\@picturecopyright{#1}} +\def\footer#1{\def\@footer{#1}} + +\def\clearheadinfo{ + \author{}% + \title{No title}% + \subtitle{}% + \version{}% + \web{}% + \mail{}% + \email{}% + \picture{}% + \picturecopyright{}% +} + +\clearheadinfo + +\ifcustomtitle + \def\maketitle{ + \@maketitle + \clearheadinfo + } +\fi + + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} + +\ifcustomtitle + \def\@titlefont{\Huge\bfseries\boldmath} + \def\@subtitlefont{\large\bfseries\boldmath} + + + \def\@getelement#1{\csname @#1\endcsname} + \def\@labelelement#1{\csname label#1name\endcsname} + \def\@insertelement#1{\if!\@getelement{#1}! + \else % + \@labelelement{#1}& % + \@getelement{#1} \cr % + \fi % + } + \def\@metainfos{% + \ialign{% + \bf{##} \hfil & ## \hfil \cr % Lines definition + \@insertelement{version} % + \@insertelement{date} % + \@insertelement{author} % + \@insertelement{web} % + \@insertelement{mail} % + } + } + \def\@placepicture[#1, #2]{% + \includegraphics[keepaspectratio=true, #1, #2]{\@picture} + \vskip1em + {\hfil\hbox{\small \@picturecopyright}} + } + + \def\@maketitle{ + \def\and{\unskip,\cr&} + \begin{titlepage} + \thispagestyle{empty} + \begin{center} + {\rule{\textwidth}{1mm}} + {\@titlefont\@title\par} + \if!\@subtitle!\else + {\hfil\@subtitlefont\@subtitle\par} + \fi + {\rule{\textwidth}{1mm}} + \end{center} + \vfil + \ifdim \paperwidth < \paperheight + \@metainfos + \vfill + \begin{center} + \@placepicture[width=.8\textwidth, height=.5\textheight] + \end{center} + \else + \begin{minipage}{.3\textwidth} + \@metainfos + \end{minipage} + \begin{minipage}{.7\textwidth} + \hfill% + \@placepicture[width=\textwidth, height=.6\textheight] + \end{minipage} + \fi + \vfil + \begin{flushright} + {\hfil\rule{.4\textwidth}{.75pt}\par} + \@footer + \end{flushright} + \end{titlepage} + } +\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Fancy capo +\iffancycapo % + \newlength{\capoheight} + \setlength{\capoheight}{1.5cm} + \renewcommand\capo[1]{% + \iftranscapos% + \transpose{#1}% + \fi% + \mbox{% + \includegraphics[height=\capoheight]{capodastre}% + \put(-22,8){\Large #1} + }% + } +\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Fonts definitions +\ifcustomfonts + \def\chordfont#1{\gdef\@chordfont{#1}} + \def\@chordfont{\small\it} + + \renewcommand{\idxtitlefont}{\sffamily\bfseries} + \renewcommand{\idxauthfont}{\sffamily\bfseries} + \renewcommand{\idxheadfont}{\sffamily\it\LARGE} + \renewcommand{\idxrefsfont}{\bfseries} + \renewcommand{\stitlefont}{\LARGE\bf} + \renewcommand{\printchord}[1]{\@chordfont #1} + \renewcommand{\chorusfont}{\it} + \renewcommand{\lyricfont}{\normalfont\normalsize} + \renewcommand{\showauthors}{% + \hbox{\normalsize\songauthors}% + } +\fi + +\titleprefixword{} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\endinput diff --git a/tex/songs.sty b/songbook_core/data/latex/songs.sty similarity index 96% rename from tex/songs.sty rename to songbook_core/data/latex/songs.sty index 1a338089..3202134c 100644 --- a/tex/songs.sty +++ b/songbook_core/data/latex/songs.sty @@ -3076,9 +3076,9 @@ \newcommand\authignoreword[1]{} \newcommand\titleprefixword[1]{} {\catcode`\%=12 - \gdef\authsepword#1{\SB@idxcmd{}{%sep #1}{}} - \gdef\authbyword#1{\SB@idxcmd{}{%after #1}{}} - \gdef\authignoreword#1{\SB@idxcmd{}{%ignore #1}{}} + \gdef\authsepword#1{\SB@idxcmd{}{}{%sep #1}} + \gdef\authbyword#1{\SB@idxcmd{}{}{%after #1}} + \gdef\authignoreword#1{\SB@idxcmd{}{}{%ignore #1}} \gdef\titleprefixword#1{\SB@idxcmd{%prefix #1}{}{}}} \@onlypreamble\authsepword \@onlypreamble\authbyword diff --git a/songbook_core/data/latex/tabs.sty b/songbook_core/data/latex/tabs.sty new file mode 100644 index 00000000..28a7cd66 --- /dev/null +++ b/songbook_core/data/latex/tabs.sty @@ -0,0 +1,82 @@ +% Tabs Package -- version 0.1 for LaTeX2e +% +% This package provide macros for tablatures creations + +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{tabs}[2014/04/13 Tabs Package, version 0.1] + +\RequirePackage{tikz} + +% Counters +\newcounter{tab-string} +\newcounter{tab-tempo} +\newcounter{tab-line} +% Length +\newlength{\tablen} +% Variables +\def\chordtuning{E,A,D,G,B,e} +\def\xunit{0.35} +\def\yunit{0.2} +% The tab environmant +% \begin{tab} +\newenvironment{tab} +{ + \normalsize + \setcounter{tab-line}{0} + \setcounter{tab-tempo}{0} + + \setlength{\tablen}{\xunit cm} + + % A single note + % \single + \newcommand{\single}[2]{ + % draw tuning if we are at the beginining of a new tab line + \ifnum\value{tab-tempo}=0 + \setcounter{tab-string}{6} + \foreach \tuning in \chordtuning + { + \node at (-1,\value{tab-line}+\value{tab-string}) {\tuning}; + \addtocounter{tab-string}{-1} + } + \fi + + % draw the 6 strings + \foreach \string in {1,...,6} + { + \draw[xshift=-0.5cm] (\value{tab-tempo},\value{tab-line}+\string) -- +(1,0); + } + \draw node[single] at (\value{tab-tempo},\value{tab-line}+##1) {##2}; + \addtocounter{tab-tempo}{1} + \addtolength{\tablen}{\xunit cm} + \ifnum\hsize<\tablen + \addtocounter{tab-line}{8} + \setlength{\tablen}{\xunit cm} + \setcounter{tab-tempo}{0} + \end{tikzpicture} + \begin{tikzpicture}[ + single/.style={}, + cm={\xunit,0,0,-\yunit,(0,0)} + ] + \fi + } + % A mesure bar + % \bar + \renewcommand{\bar}{ + \draw[xshift=-0.5cm] (\value{tab-tempo},\value{tab-line}+1) --+(0,5); + } + + \hspace{-\parindent} + \begin{tikzpicture}[ + single/.style={}, + cm={\xunit,0,0,-\yunit,(0,0)} + ] + + % draw the first bar + \draw[xshift=-0.5cm] (0,1) --+(0,5); +} +{ + \end{tikzpicture} +} +\fi% + +\endinput diff --git a/songbook_core/data/templates/default.tex b/songbook_core/data/templates/default.tex new file mode 100644 index 00000000..491fb828 --- /dev/null +++ b/songbook_core/data/templates/default.tex @@ -0,0 +1,121 @@ +%! Copyright (C) 2014 The Songbook team (www.patacrep.com) +%! +%! 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. +%! +%! The latest version of this program can be obtained from +%! https://github.com/patacrep/ + + +(* variables *) +{ +"title": {"description": {"english": "Title", "french": "Titre"}, + "default": {"english": "Guitar songbook", "french": "Recueil de chansons pour guitare"}, + "mandatory":true + }, +"author": {"description": {"english": "Author", "french": "Auteur"}, + "default": {"english": "The Songbook Team", "french": "L'équipe Songbook"}, + "mandatory":true + }, +"subtitle": {"description": {"english": "Subtitle", "french": "Sous-titre"}, + "default": {"default": ""} + }, +"version":{ "description": {"english": "Version", "french": "Version"}, + "default": {"default": "undefined"} + }, +"web": {"description": {"english": "Website", "french": "Site web"}, + "default": {"default": "http://www.patacrep.com"} + }, +"mail": {"description": {"english": "Email", "french": "Adresse électronique"}, + "default": {"default": "crep@team-on-fire.com"} + }, +"picture": {"description": {"english": "Cover picture", "french": "Image de couverture"}, + "type": "file", + "default": {"default": "treble_a"} + }, +"picturecopyright": {"description": {"english": "Copyright for the cover picture", "french": "Copyright pour l'image de couverture"}, + "default": {"default": "Dbolton \\url{http://commons.wikimedia.org/wiki/User:Dbolton}"} + }, +"footer": {"description": {"english": "Footer", "french": "Pied de page"}, + "default": {"default": "Generated using Songbook (\\url{http://www.patacrep.com})"} + }, +"titleprefixwords": {"description": {"english": "Ignore some words in the beginning of song titles", + "french": "Ignore des mots dans le classement des chansons"}, + "default": {"default": []} + }, +"authwords": {"description": {"english": "Set of options to process author string (LaTeX commands authsepword, authignoreword, authbyword)", + "french": "Options pour traiter les noms d'auteurs (commandes LaTeX authsepword, authignoreword, authbyword)"}, + "default": {"default": {}} + }, +"notenamesout": {"description": {"english": "Note names. Can be 'solfedge' (Do, Re, Mi...) or 'alphascale' (A, B, C...).", + "french": "Nom des notes : 'solfedge' (Do, Ré, Mi...) ou 'alphascale' (A, B, C...)."}, + "default": {"default": "alphascale", "french": "solfedge"} + } +} +(* endvariables *) + +(* extends "songs.tex" *) +(* set indexes = "titleidx,authidx" *) + + +(* block songbookpreambule *) + (( super() )) + + \usepackage{chords} + + \title{((title))} + \author{((author))} + + \newindex{titleidx}{((filename))_title} + \newauthorindex{authidx}{((filename))_auth} + + (* for prefix in titleprefixwords *) + \titleprefixword{((prefix))} + (* endfor*) + (* for key in titleprefixkeys *) + (* for word in authwords.key *) + (* if key=="after" *) + \authbyword{((word))} + (* else *) + \auth((key))word{((word))} + (* endif *) + (* endfor *) + (* endfor*) + + (* if notenamesout=="alphascale" *) + \notenamesout{A}{B}{C}{D}{E}{F}{G} + (* else *) + \notenamesout{La}{Si}{Do}{R\'e}{Mi}{Fa}{Sol} + (* endif *) +(* endblock *) + +(* block title *) +\maketitle +(* endblock *) + +(* block index *) + \showindex{\songindexname}{titleidx} + \showindex{\authorindexname}{authidx} +(* endblock *) + +(* block chords *) + % list of chords + \ifchorded + \phantomsection + \addcontentsline{toc}{section}{\chordlistname} + \chords + \fi +(* endblock *) + diff --git a/songbook_core/data/templates/layout.tex b/songbook_core/data/templates/layout.tex new file mode 100644 index 00000000..9a17feab --- /dev/null +++ b/songbook_core/data/templates/layout.tex @@ -0,0 +1,76 @@ +%! Copyright (C) 2014 The Songbook team (www.patacrep.com) +%! +%! 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. +%! +%! The latest version of this program can be obtained from +%! https://github.com/patacrep/ + + +%% Automatically generated document. +%% You may edit this file but all changes will be overwritten. +%% If you want to change this document, have a look at +%% the templating system. +%% +%% Generated using Songbook + +(* variables *) +{ +"mainfontsize": {"description": {"english": "Font Size", "french": "Taille de police"}, + "type":"font", + "default":{"default": "10"} + } +} +(* endvariables *) + +(* block documentclass *) +\documentclass[((mainfontsize))pt]{article} +(* endblock *) + +(* block songbookpackages *) +(* endblock *) + +(* block songbookpreambule *) + \usepackage[utf8]{inputenc} + \usepackage[T1]{fontenc} + \usepackage{lmodern} +(* endblock songbookpreambule *) + +(* block preambule *) +(* endblock preambule *) + +\begin{document} + +(* block title *) +(* endblock *) + +(* block preface *) +(* endblock *) + +(* block index *) +(* endblock *) + +(* block chords *) +(* endblock *) + +(* block songs *) +(* endblock *) + +(* block postface *) +(* endblock *) + +\end{document} + +%! End of file diff --git a/songbook_core/data/templates/patacrep.tex b/songbook_core/data/templates/patacrep.tex new file mode 100644 index 00000000..2569865f --- /dev/null +++ b/songbook_core/data/templates/patacrep.tex @@ -0,0 +1,96 @@ +%! Copyright (C) 2014 The Songbook team (www.patacrep.com) +%! +%! 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. +%! +%! The latest version of this program can be obtained from +%! https://github.com/patacrep/ + + +(* variables *) +{ +"songnumberbgcolor": {"description": {"english": "Number Shade", "french": "Couleur des numéros"}, + "type": "color", + "default": {"default": "D1E4AE"} + }, +"notebgcolor": {"description": {"english": "Note Shade", "french": "Couleur des notes"}, + "type": "color", + "default": {"default": "D1E4AE"} + }, +"indexbgcolor": {"description": {"english": "Index Shade", "french": "Couleur d'index"}, + "type": "color", + "default": {"default": "D1E4AE"} + }, +"titleprefixwords": {"description": {"english": "Ignore some words in the beginning of song titles", + "french": "Ignore des mots dans le classement des chansons"}, + "default": {"default": ["The", "Le", "La", "L'", "A", "Au", "Ces", "De", + "Des", "El", "Les", "Ma", "Mon", "Un"]} + } +} +(* endvariables *) + +(* extends "default.tex" *) + +(* block songbookpackages *) +%! booktype, bookoptions and instruments are defined in "songs.tex" +\usepackage[((booktype)), + (* for option in bookoptions *)((option)), + (* endfor *) + (* for instrument in instruments *)((instrument)), + (* endfor *)]{crepbook} +(* endblock *) + +(* block songbookpreambule *) + \usepackage[ + a4paper % paper size + ,includeheadfoot % include header and footer into text size + ,hmarginratio=1:1 % ratio between inner and outer margin (default) + ,outer=1.8cm % outer margin (right) + ,vmarginratio=1:1 % ratio between top and bottom margin + ,bmargin=1.3cm % bottom margin + ]{geometry} + + (( super() )) + + \pagestyle{empty} + + \definecolor{SongNumberBgColor}{HTML}{((songnumberbgcolor))} + \definecolor{NoteBgColor}{HTML}{((notebgcolor))} + \definecolor{IndexBgColor}{HTML}{((indexbgcolor))} + + \renewcommand{\snumbgcolor}{SongNumberBgColor} + \renewcommand{\notebgcolor}{NoteBgColor} + \renewcommand{\idxbgcolor}{IndexBgColor} + + \definecolor{tango-green-3}{HTML}{4e9a06} + \definecolor{tango-blue-3}{HTML}{204a87} + \usepackage[bookmarks, + bookmarksopen, + hyperfigures=true, + colorlinks=true, + linkcolor=tango-green-3, + urlcolor=tango-blue-3]{hyperref} + + + \subtitle{((subtitle))} + (* if version!="unknown" *) + \version{((version))} + (* endif *) + \mail{((mail))} + \web{((web))} + \picture{((picture))} + \picturecopyright{((picturecopyright))} + \footer{((footer))} +(* endblock *) diff --git a/songbook_core/data/templates/songs.tex b/songbook_core/data/templates/songs.tex new file mode 100644 index 00000000..968d3600 --- /dev/null +++ b/songbook_core/data/templates/songs.tex @@ -0,0 +1,103 @@ +%! Copyright (C) 2014 The Songbook team (www.patacrep.com) +%! +%! 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. +%! +%! The latest version of this program can be obtained from +%! https://github.com/patacrep/ + +(* variables *) +{ +"instruments": {"description": {"english": "Instruments", "french": "Instruments"}, + "type": "flag", + "values": {"guitar": {"english": "Guitare", "french": "Guitare"}, + "ukulele": {"english": "Ukulele", "french": "Ukulele"} + }, + "join": ",", + "mandatory": true, + "default": {"default":["guitar"]} + }, +"bookoptions": {"description": {"english": "Options", "french": "Options"}, + "type": "flag", + "values": {"diagram": {"english": "Chords diagrams", "french": "Diagrammes d'accords"}, + "importantdiagramonly": {"english": "Only importants diagrames", "french": "Diagrammes importants uniquement"}, + "lilypond": {"english": "Lilypond music sheets", "french": "Partitions lilypond"}, + "pictures": {"english": "Cover pictures", "french": "Couvertures d'albums"}, + "tabs": {"english": "Tablatures", "french": "Tablatures"}, + "repeatchords": {"english": "Repeat chords", "french": "Répéter les accords"}, + "onesongperpage": {"english": "One song per page", "french": "Une chanson par page"} + }, + "join": ",", + "mandatory": true, + "default": {"default":["diagram","pictures"]} + }, +"booktype": {"description": {"english": "Type", "french": "Type"}, + "type": "enum", + "values": {"chorded": {"english": "With guitar chords", "french": "Avec accords de guitare" }, + "lyric": {"english": "Lyrics only", "french": "Paroles uniquement"} + }, + "default": {"default":"chorded"}, + "mandatory": true + }, +"lang": {"description": {"english": "Language", "french": "Langue"}, + "default": {"english": "english", "french": "french"} + } +} +(* endvariables *) + +(* extends "layout.tex" *) + +(* block songbookpackages *) +\usepackage[((booktype)), + (* for option in bookoptions *)((option)), + (* endfor *) + (* for instrument in instruments *)((instrument)), + (* endfor *)]{SongbookUtils} +(* endblock *) + +(* block songbookpreambule *) + (( super() )) + + (* for lang in content.languages() *) + \PassOptionsToPackage{((lang))}{babel} + (* endfor *) + \usepackage[((lang))]{babel} + \lang{((lang))} + + \usepackage{graphicx} + \graphicspath{{((datadir))/img/}} + + \makeatletter + \@ifpackageloaded{hyperref}{}{\newcommand{\phantomsection}{}} + \@ifpackageloaded{hyperref}{}{\newcommand{\hyperlink}[2]{#2}} + \makeatother +(* endblock *) + +(* block songs *) + \phantomsection + \addcontentsline{toc}{section}{\songlistname} + + \begin{songs}{((indexes|default('')))} + (* for type, elem in content.content *) + (* if type=="song" *) + \input{((elem.path))} + (* elif type=="section" *) + \end{songs} + \songsection{((elem))} + \begin{songs}{((indexes|default('')))} + (* endif *) + (* endfor *) + \end{songs} +(* endblock *) diff --git a/songbook_core/errors.py b/songbook_core/errors.py new file mode 100644 index 00000000..d724ae14 --- /dev/null +++ b/songbook_core/errors.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Songbook exceptions and errors.""" + +class SongbookError(Exception): + """Generic songbook error. + + Songbook errors should inherit from this one. + """ + pass + +class SBFileError(SongbookError): + """Error during songbook file decoding""" + + def __init__(self, message=None): + super(SBFileError, self).__init__() + self.message = message + + def __str__(self): + if self.message is None: + return str(self.original) + else: + return self.message + +class TemplateError(SongbookError): + """Error during template generation""" + + def __init__(self, original, message=None): + super(TemplateError, self).__init__() + self.original = original + self.message = message + + def __str__(self): + if self.message is None: + return str(self.original) + else: + return self.message + +class LatexCompilationError(SongbookError): + """Error during LaTeX compilation.""" + + def __init__(self, basename): + super(LatexCompilationError, self).__init__() + self.basename = basename + + def __str__(self): + return ("""Error while pdfLaTeX compilation of "{basename}.tex" """ + """(see {basename}.log for more information).""" + ).format(basename=self.basename) + +class StepCommandError(SongbookError): + """Error during LaTeX compilation.""" + + def __init__(self, command, code): + super(StepCommandError, self).__init__() + self.command = command + self.code = code + + def __str__(self): + return ("""Error while running custom command "{command}": got return""" + " code {code}.").format(command=self.command, code=self.code) + +class CleaningError(SongbookError): + """Error during cleaning of LaTeX auxiliary files.""" + + def __init__(self, filename, exception): + super(CleaningError, self).__init__() + self.filename = filename + self.exception = exception + + def __str__(self): + return """Error while removing "{filename}": {exception}.""".format( + filename=self.filename, + exception=str(self.exception) + ) + +class UnknownStep(SongbookError): + """Unknown compilation step.""" + + def __init__(self, step): + super(UnknownStep, self).__init__() + self.step = step + + def __str__(self): + return """Compilation step "{step}" unknown.""".format(step=self.step) + diff --git a/songbook_core/files.py b/songbook_core/files.py new file mode 100644 index 00000000..65acc153 --- /dev/null +++ b/songbook_core/files.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# + +"""File system utilities.""" + +import fnmatch +import os + +def recursive_find(root_directory, pattern): + """Recursively find files matching a pattern, from a root_directory. + + Return a list of files matching the pattern. + """ + matches = [] + for root, _, filenames in os.walk(root_directory): + for filename in fnmatch.filter(filenames, pattern): + matches.append(os.path.join(root, filename)) + return matches diff --git a/songbook_core/index.py b/songbook_core/index.py new file mode 100755 index 00000000..78b64165 --- /dev/null +++ b/songbook_core/index.py @@ -0,0 +1,196 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +"""Manage indexes. + +Generate indexes files for the songbook compilation. This is a replacement for +the original makeindex program written in C that produces an index file (.sbx) +from a file generated by the latex compilation of the songbook (.sxd). +""" + +from unidecode import unidecode +import locale +import re +import codecs + +from songbook_core.authors import processauthors +from songbook_core.plastex import simpleparse + +EOL = u"\n" + +# Pattern set to ignore latex command in title prefix +KEYWORD_PATTERN = re.compile(r"^%(\w+)\s?(.*)$") +FIRST_LETTER_PATTERN = re.compile(r"^(?:\{?\\\w+\}?)*[^\w]*(\w)") + + +def sortkey(value): + """From a title, return something usable for sorting. + + It handles locale (but + don't forget to call locale.setlocale(locale.LC_ALL, '')). It also handles + the sort with latex escape sequences. + """ + return locale.strxfrm(unidecode(simpleparse(value).replace(' ', 'A'))) + + +def process_sxd(filename): + """Parse sxd file. + + Return an Index object. + """ + data = [] + with codecs.open(filename, 'r', 'utf-8') as index_file: + for line in index_file: + data.append(line.strip()) + + i = 1 + idx = Index(data[0]) + + while len(data) > i and data[i].startswith('%'): + keywords = KEYWORD_PATTERN.match(data[i]).groups() + idx.add_keyword(keywords[0], keywords[1]) + i += 1 + + idx.compile_keywords() + for i in range(i, len(data), 3): + entry = data[i:i + 3] + idx.add(entry[0], entry[1], entry[2]) + + return idx + + +class Index(object): + """Title, author or scripture Index representation.""" + + def __init__(self, indextype): + self.data = dict() + self.keywords = dict() + self.prefix_patterns = [] + self.authwords = {"after": [], "ignore": [], "sep": []} + if indextype == "TITLE INDEX DATA FILE": + self.indextype = "TITLE" + elif indextype == "SCRIPTURE INDEX DATA FILE": + self.indextype = "SCRIPTURE" + elif indextype == "AUTHOR INDEX DATA FILE": + self.indextype = "AUTHOR" + else: + self.indextype = "" + + @staticmethod + def get_first_letter(key): + """Return the uppercase first letter of key.""" + letter = FIRST_LETTER_PATTERN.match(key).group(1) + if re.match(r'\d', letter): + letter = '0-9' + return letter.upper() + + def add_keyword(self, key, word): + """Add 'word' to self.keywords[key].""" + if not key in self.keywords.keys(): + self.keywords[key] = [] + self.keywords[key].append(word) + + def compile_keywords(self): + """Turn keywords (self.keywords) into regular expressions.""" + if self.indextype == "TITLE": + if 'prefix' in self.keywords: + for prefix in self.keywords['prefix']: + self.prefix_patterns.append(re.compile( + r"^({prefix})(\b|\\)(\s*.*)$".format(prefix=prefix) + )) + + if self.indextype == "AUTHOR": + for key in self.keywords: + if key in self.authwords: + self.authwords[key] = self.keywords[key] + for word in self.authwords.keys(): + if word in self.keywords: + if word == "after": + self.authwords[word] = [ + re.compile(r"^.*{after}\b(.*)".format(after=after)) + for after in self.keywords[word] + ] + elif word == "sep": + self.authwords[word] = [" {sep}".format(sep=sep) + for sep in self.authwords[word] + ] + [","] + self.authwords[word] = [ + re.compile(r"^(.*){sep} (.*)$".format(sep=sep)) + for sep in self.authwords[word] + ] + else: + self.authwords[word] = self.keywords[word] + + def _raw_add(self, key, number, link): + """Add a song to the list. + + No processing is done on data. It is added raw. See add() for a + similar method with processing. + """ + first = self.get_first_letter(key) + if not first in self.data.keys(): + self.data[first] = dict() + if not key in self.data[first].keys(): + self.data[first][key] = [] + self.data[first][key].append({'num': number, 'link': link}) + + def add(self, key, number, link): + """Add a song to the list. + + Process data before adding it. + """ + if self.indextype == "TITLE": + # Removing prefixes before titles + for pattern in self.prefix_patterns: + match = pattern.match(key.encode('utf-8')) + if match: + self._raw_add( + "{} ({})".format( + match.group(2) + match.group(3), + match.group(1) + ), + number, + link + ) + return + self._raw_add(key, number, link) + + if self.indextype == "AUTHOR": + # Processing authors + for author in processauthors( + key, + **self.authwords): + self._raw_add(author, number, link) + + @staticmethod + def ref_to_str(ref): + """Return the LaTeX code corresponding to the reference.""" + return r'\hyperlink{{{0[link]}}}{{{0[num]}}}'.format(ref) + + def entry_to_str(self, key, entry): + """Return the LaTeX code corresponding to the entry.""" + if not isinstance(key, unicode): + key = unicode(key, "UTF-8") + return unicode(ur'\idxentry{{{0}}}{{{1}}}' + EOL).format( + key, + ur'\\'.join([self.ref_to_str(ref) for ref in entry]), + ) + + def idxblock_to_str(self, letter, entries): + """Return the LaTeX code corresponding to an index block. + + Here, an index block is a letter, and all data beginning with this + letter. + """ + string = r'\begin{idxblock}{' + letter + '}' + EOL + for key in sorted(entries.keys(), key=sortkey): + string += self.entry_to_str(key, entries[key]) + string += r'\end{idxblock}' + EOL + return string + + def entries_to_str(self): + """Return the LaTeX code corresponding to the index.""" + string = "" + for letter in sorted(self.data.keys()): + string += self.idxblock_to_str(letter, self.data[letter]) + return string diff --git a/songbook_core/plastex.py b/songbook_core/plastex.py new file mode 100644 index 00000000..7f5980ea --- /dev/null +++ b/songbook_core/plastex.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""PlasTeX module to process song files.""" + +from plasTeX.TeX import TeX +from plasTeX.Base.LaTeX import Sentences + +import codecs +import locale +import os +import sys + + +def process_unbr_spaces(node): + r"""Replace '~' and '\ ' in node by nodes that + will be rendered as unbreakable space. + + Return node object for convenience. + + This function is a workaround to a bug that has been solved since: + - https://github.com/tiarno/plastex/commit/76bb78d5fbaac48e68025a3545286cc63cb4e7ad + - https://github.com/tiarno/plastex/commit/682a0d223b99d6b949bacf1c974d24dc9bb1d18e + + It can be deleted once this bug has been merged in production version of + PlasTeX. + """ + if (type(node) == Sentences.InterWordSpace or + (type(node) == Sentences.NoLineBreak and node.source == '~ ')): + node.unicode = unichr(160) + for child in node.childNodes: + process_unbr_spaces(child) + + return node + + +def simpleparse(text): + """Parse a simple LaTeX string. + """ + tex = TeX() + if not isinstance(text, unicode): + text = text.decode("utf-8") + tex.input(text) + doc = tex.parse() + return process_unbr_spaces(doc.textContent) + + +class SongParser(object): + """Analyseur syntaxique de fichiers .sg""" + + def __init__(self): + pass + + @staticmethod + def create_tex(): + """Create a TeX object, ready to parse a tex file.""" + tex = TeX() + tex.disableLogging() + tex.ownerDocument.context.loadBaseMacros() + sys.path.append(os.path.dirname(__file__)) + tex.ownerDocument.context.loadPackage(tex, "plastex_patchedbabel") + tex.ownerDocument.context.loadPackage(tex, "plastex_chord") + tex.ownerDocument.context.loadPackage(tex, "plastex_songs") + sys.path.pop() + return tex + + @classmethod + def parse(cls, filename): + """Parse a TeX file, and return its plasTeX representation.""" + tex = cls.create_tex() + tex.input(codecs.open(filename, 'r', 'utf-8', 'replace')) + return tex.parse() + + +def parsetex(filename): + r"""Analyse syntaxique d'un fichier .sg + + Renvoie un dictionnaire contenant les métadonnées lues dans le fichier. Les + clefs sont : + - languages: l'ensemble des langages utilisés (recherche des + \selectlanguages{}) ; + - titles: la liste des titres ; + - args: le dictionnaire des paramètres passés à \beginsong. + """ + # /* BEGIN plasTeX patch + # The following lines, and another line a few lines later, are used to + # circumvent a plasTeX bug. It has been reported and corrected : + # https://github.com/tiarno/plastex/commit/8f4e5a385f3cb6a04d5863f731ce24a7e856f2a4 + # To see if you can delete those lines, set your LC_TIME locale to French, + # during a month containing diacritics (e.g. Février), and run songbook. If + # no plasTeX bug appears, it is safe to remove those lines. + oldlocale = locale.getlocale(locale.LC_TIME) + locale.setlocale(locale.LC_TIME, 'C') + # plasTeX patch END */ + + # Analyse syntaxique + doc = SongParser.parse(filename) + + # /* BEGIN plasTeX patch + if oldlocale[0] and oldlocale[1]: + locale.setlocale(locale.LC_TIME, "%s.%s" % oldlocale) + # plasTeX patch END */ + + # Extraction des données + data = { + "languages": set(), + } + for node in doc.allChildNodes: + if node.nodeName == "selectlanguage": + data["languages"].add(node.attributes['lang']) + if node.nodeName == "beginsong": + data["titles"] = node.attributes["titles"] + data["args"] = node.attributes["args"] + + return data diff --git a/songbook_core/plastex_chord.py b/songbook_core/plastex_chord.py new file mode 100644 index 00000000..b3a71eee --- /dev/null +++ b/songbook_core/plastex_chord.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- + +r"""PlasTeX module to deal with chords commands of the songs LaTeX package + +Chords are set using commands like \[C]. This package parses those commands. +""" + +from plasTeX import Command, Environment, Macro +from plasTeX.Base.LaTeX.Math import BeginDisplayMath + +# Count the number of levels of 'verse' environment: IN_VERSE==1 means that we +# are in a 'verse' environment; IN_VERSE==2 means that we are in two included +# 'verse' environment, and so on. +IN_VERSE = 0 + +def wrap_displaymath(cls): + """Decorator to store the depth of 'verse' environment + + In the invoke() method classes, global variable IN_VERSE indicates the + number of 'verse' (or 'chorus' or 'verse*') environment we are in. + """ + + # pylint: disable=no-init,too-few-public-methods + class DisplayMath(cls): + """Wrapper to LaTeX environment updating IN_VERSE""" + blockType = True + # pylint: disable=super-on-old-class,global-statement,no-member + def invoke(self, tex): + """Wrapper to invoke() to update global variable IN_VERSE.""" + global IN_VERSE + if self.macroMode == Macro.MODE_BEGIN: + IN_VERSE += 1 + else: + IN_VERSE -= 1 + super(DisplayMath, self).invoke(tex) + return DisplayMath + +# pylint: disable=too-many-public-methods +@wrap_displaymath +class Verse(Environment): + """LaTeX 'verse' environment""" + macroName = 'verse' + +# pylint: disable=too-many-public-methods +@wrap_displaymath +class VerseStar(Environment): + """LaTeX 'verse*' environment""" + macroName = 'verse*' + +# pylint: disable=too-many-public-methods +@wrap_displaymath +class Chorus(Environment): + """LaTeX 'chorus' environment""" + macroName = 'chorus' + + + +class BeginChord(Command): + """Beginning of a chord notation""" + macroName = 'chord' + macroMode = Command.MODE_BEGIN + + @property + def source(self): + """Return chord LaTeX code.""" + return r'\[{}]'.format(''.join([str(item) for item in self.childNodes])) + +class EndChord(Command): + """End of a chord notation""" + macroMode = Command.MODE_END + +class BeginChordOrDisplayMath(BeginDisplayMath): + r"""Wrapper to BeginDisplayMath + + In a 'verse' (or 'verse*' or 'chorus') environment, the '\[' macro + displays a chord. Otherwise, it corresponds to the usual LaTeX math mode. + This class calls the right method, depending on the inclusion of this + macro in a verse environment. + """ + macroName = '[' + + def digest(self, tokens): + """Consume the tokens corresponding to the arguments of this macro""" + if IN_VERSE: + for item in tokens: + if item.nodeType == item.TEXT_NODE and item.nodeValue == ']': + break + self.appendChild(item) + else: + return super(BeginChordOrDisplayMath, self).digest(tokens) + + def invoke(self, tex): + """Process this macro""" + if IN_VERSE: + begin = BeginChord() + self.ownerDocument.context.push(begin) # pylint: disable=no-member + self.parse(tex) + + for token in tex: + if token.nodeType == token.TEXT_NODE and token.nodeValue == ']': + break + else: + begin.appendChild(token) + + end = EndChord() + self.ownerDocument.context.push(end) # pylint: disable=no-member + + return [begin] + else: + return super(BeginChordOrDisplayMath, self).invoke(tex) diff --git a/songbook_core/plastex_patchedbabel.py b/songbook_core/plastex_patchedbabel.py new file mode 100644 index 00000000..39aa2e8f --- /dev/null +++ b/songbook_core/plastex_patchedbabel.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +r"""Patch pour le paquet Babel de PlasTeX + +Un bug dans PlasTeX intervient lorsqu'on essaye d'analyser une commande LaTeX +\selectlanguage{}, que nous voulons utiliser ici. Un patch a été proposé aux +développeurs de plasTeX, et accepté. Mais il faut que cette correction arrive +en production. En attendant, nous utilisons cette version modifiée. + +Dés que la correction sera entrée en production, il faudra supprimer ce +fichier, et remplater l'occurence à "patchedbabel" par "babel" dans le fichier +"plastex.py". +La correction à suveiller est la révision +41a48c0c229dd46b69fb0e3720595000a71b17d8 du fichier babel.py : +https://github.com/tiarno/plastex/commit/41a48c0c229dd46b69fb0e3720595000a71b17d8 + +# Comment vérifier si on peut supprimer ce fichier ? + +1) Remplacer l'occurence à patchedbabel par babel dans le fichier plastex.py. + +2) Générer un fichier .tex à partir d'un fichier .sb, ce dernier faisant +intervenir des chansons dans lesquelles \selectlanguage est utilisé (par +exemple, "make -B matteo.tex" ou "make -B naheulbeuk.tex" pour des fichiers pas +trop gros. + +3) Si l'erreur suivante apparaît, c'est qu'il faut encore attendre. + +> Traceback (most recent call last): +> [...] +> File "/usr/lib/pymodules/python2.7/plasTeX/Packages/babel.py", line 18, in +> invoke context.loadLanguage(self.attributes['lang'], self.ownerDocument) +> NameError: global name 'context' is not defined + +3 bis) Si elle n'apparait pas : youpi ! Supprimez ce fichier ! + +# Contact et commentaires + +Mercredi 27 mars 2013 +Louis + +""" + +from plasTeX import Command + +# pylint: disable=invalid-name,too-many-public-methods +class selectlanguage(Command): + """Patch of vanilla selectlanguage class. + + See module docstring for more information.""" + args = 'lang:str' + + def invoke(self, tex): + res = Command.invoke(self, tex) + self.ownerDocument.context.loadLanguage( # pylint: disable=no-member + self.attributes['lang'], + self.ownerDocument + ) + return res diff --git a/songbook_core/plastex_songs.py b/songbook_core/plastex_songs.py new file mode 100644 index 00000000..9e39da1f --- /dev/null +++ b/songbook_core/plastex_songs.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Module to process song LaTeX environment. +""" + +import plasTeX + +from songbook_core.plastex import process_unbr_spaces + + +def split_linebreak(texlist): + """Return a list of alternative title. + + A title can be defined with alternative names : + + A real name\\ + Alternative name\\ + Another alternative name + + This function takes the object representation of a list of titles, and + return a list of titles. + """ + return_list = [] + current = [] + for token in texlist: + if token.nodeName == '\\': + return_list.append(current) + current = [] + else: + current.append( + process_unbr_spaces(token).textContent.encode('utf-8')) + if current: + return_list.append(current) + return return_list + + +class beginsong(plasTeX.Command): # pylint: disable=invalid-name,too-many-public-methods + """Class parsing the LaTeX song environment.""" + + args = '{titles}[ args:dict ]' + + def invoke(self, tex): + """Parse an occurence of song environment.""" + + plasTeX.Command.invoke(self, tex) + + # Parsing title + titles = [] + for tokens in split_linebreak(self.attributes['titles'].allChildNodes): + titles.append("".join(tokens)) + self.attributes['titles'] = titles + + # Parsing keyval arguments + args = {} + for (key, val) in self.attributes['args'].iteritems(): + if isinstance(val, plasTeX.DOM.Element): + args[key] = process_unbr_spaces(val).textContent.encode('utf-8') + elif isinstance(val, unicode): + args[key] = val.encode('utf-8') + elif isinstance(val, str): + args[key] = val.encode('utf-8') + else: + args[key] = unicode(val) + self.attributes['args'] = args diff --git a/songbook_core/songs.py b/songbook_core/songs.py new file mode 100644 index 00000000..5446903d --- /dev/null +++ b/songbook_core/songs.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Song management.""" + +from unidecode import unidecode +import glob +import locale +import os.path +import re +import logging + +from songbook_core.authors import processauthors +from songbook_core.plastex import parsetex + +LOGGER = logging.getLogger(__name__) + +# pylint: disable=too-few-public-methods +class Song(object): + """Song management""" + + #: Ordre de tri + sort = [] + #: Préfixes à ignorer pour le tri par titres + prefixes = [] + #: Dictionnaire des options pour le traitement des auteurs + authwords = {"after": [], "ignore": [], "sep": []} + + def __init__(self, path, languages, titles, args): + self.titles = titles + self.normalized_titles = [ + locale.strxfrm( + unprefixed_title( + unidecode(unicode(title, "utf-8")), + self.prefixes + ) + ) + for title + in titles + ] + self.args = args + self.path = path + self.languages = languages + if "by" in self.args.keys(): + self.normalized_authors = [ + locale.strxfrm(author) + for author + in processauthors(self.args["by"], **self.authwords) + ] + else: + self.normalized_authors = [] + + def __repr__(self): + return repr((self.titles, self.args, self.path)) + + def __cmp__(self, other): + if not isinstance(other, Song): + return NotImplemented + for key in self.sort: + if key == "@title": + self_key = self.normalized_titles + other_key = other.normalized_titles + elif key == "@path": + self_key = locale.strxfrm(self.path) + other_key = locale.strxfrm(other.path) + elif key == "by": + self_key = self.normalized_authors + other_key = other.normalized_authors + else: + self_key = locale.strxfrm(self.args.get(key, "")) + other_key = locale.strxfrm(other.args.get(key, "")) + + if self_key < other_key: + return -1 + elif self_key > other_key: + return 1 + return 0 + + +def unprefixed_title(title, prefixes): + """Remove the first prefix of the list in the beginning of title (if any). + """ + for prefix in prefixes: + match = re.compile(r"^(%s)\b\s*(.*)$" % prefix).match(title) + if match: + return match.group(2) + return title + + +class SongbookContent(object): + """Manipulation et traitement de liste de chansons""" + + def __init__(self, library): + self._songdir = os.path.join(library, 'songs') + + # Sorted list of the content + self.content = [] + + def append_song(self, filename): + """Ajout d'une chanson à la liste + + Effets de bord : analyse syntaxique plus ou moins sommaire du fichier + pour en extraire et traiter certaines information (titre, langue, + album, etc.). + """ + LOGGER.debug('Parsing file "{}"…'.format(filename)) + # Data extraction from the song with plastex + data = parsetex(filename) + song = Song(filename, data['languages'], data['titles'], data['args']) + self.content.append(("song", song)) + + def append(self, type, value): + """ Append a generic element to the content list""" + self.content.append((type, value)) + + def append_list(self, contentlist): + """Ajoute une liste de chansons à la liste + + L'argument est une liste de chaînes, représentant des noms de fichiers + sous la forme d'expressions régulières destinées à être analysées avec + le module glob. + """ + for type, elem in contentlist: + if type == "song": + # Add all the songs matching the regex + before = len(self.content) + for filename in glob.iglob(os.path.join(self._songdir, elem)): + self.append_song(filename) + if len(self.content) == before: + # No songs were added + LOGGER.warning( + "Expression '{}' did not match any file".format(regexp) + ) + else: + self.append(type, elem) + + def languages(self): + """Renvoie la liste des langues utilisées par les chansons""" + return set().union(*[set(song.languages) for type, song in self.content if type=="song"]) diff --git a/songbook_core/templates.py b/songbook_core/templates.py new file mode 100644 index 00000000..f71b2b8a --- /dev/null +++ b/songbook_core/templates.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Template for .tex generation settings and utilities""" + +from jinja2 import Environment, FileSystemLoader, ChoiceLoader, PackageLoader, \ + TemplateNotFound, nodes +from jinja2.ext import Extension +from jinja2.meta import find_referenced_templates as find_templates +import codecs +import os +import re +import json + +from songbook_core import errors + +_LATEX_SUBS = ( + (re.compile(r'\\'), r'\\textbackslash'), + (re.compile(r'([{}_#%&$])'), r'\\\1'), + (re.compile(r'~'), r'\~{}'), + (re.compile(r'\^'), r'\^{}'), + (re.compile(r'"'), r"''"), + (re.compile(r'\.\.\.+'), r'\\ldots'), +) + +_VARIABLE_REGEXP = re.compile(r""" + \(\*\ *variables\ *\*\) # Match (* variables *) + ( # Match and capture the following: + (?: # Start of non-capturing group, used to match a single character + (?! # only if it's impossible to match the following: + \(\*\ * # - a literal (* + (?: # Inner non-capturing group, used for the following alternation: + variables # - Either match the word variables + | # or + endvariables # - the word endvariables + ) # End of inner non-capturing group + \ *\*\) # - a literal *) + ) # End of negative lookahead assertion + . # Match any single character + )* # Repeat as often as possible + ) # End of capturing group 1 + \(\*\ *endvariables\ *\*\) # until (* endvariables *) is matched.""", + re.VERBOSE|re.DOTALL) + + +class VariablesExtension(Extension): + """Extension to jinja2 to silently ignore variable block. + Instead, they are parsed by this module. + """ + tags = set(['variables']) + + def parse(self, parser): + parser.stream.next() + parser.parse_statements( + end_tokens=['name:endvariables'], + drop_needle=True, + ) + return nodes.Const("") + + +def _escape_tex(value): + '''Escape TeX special characters''' + newval = value + for pattern, replacement in _LATEX_SUBS: + newval = pattern.sub(replacement, newval) + return newval + + +class TexRenderer(object): + """Render a template to a LaTeX file.""" + + def __init__(self, template, datadir, lang): + '''Start a new jinja2 environment for .tex creation. + + Arguments: + - template: name of the template to use. + - datadir: location of the data directory (which max contain + file /templates/