(module html-teachpack mzscheme (require (lib "xml.ss" "xml") (lib "contract.ss") (lib "etc.ss")) ;; html-filename : String -> String ;; ensure that a filename ends with a .html extension (define (html-filename f) (define clean-f (regexp-replace* "/" f "-")) (define ef (regexp-match ".html$" clean-f)) (if ef clean-f (string-append clean-f ".html"))) ;; html->file : String X-expr -> true ;; create a file with the given XHTML and produce true, if successful (define (html->file f x) (define f.html (html-filename f)) (define html-x (if (and (pair? x) (eq? 'html (car x))) x `(html ,x))) (parameterize ([current-directory (this-expression-source-directory)]) (with-output-to-file f.html (lambda () (display-xml/content (xexpr->xml `(html ,html-x)))) 'replace) #t)) (provide html->file) (provide html-filename) (define-struct cd (artist title songs) (make-inspector)) (define cd0 (make-cd "Coldplay" "Coldplay Live 2003" (list "Politik (Live)" "Shiver (Live)" "Clocks (Live)"))) (define cd1 (make-cd "Zucchero" "Bluesugar" (list "Back 2 U" "Thin Air" "More Than This" "I Tempi Cambieranno" "Karma, Stai Kalma" "Donkey Tonkey" "Blue" "I With You Love" "If Not Tonight" "(Temporaneamente) X Sempre Tuo" "U Make Me Feel Loved" ))) (define cd2 (make-cd "Antonio Vivaldi" "The Four Seasons" (list "Con in C RV 537 Allegro" "Con in C RV 537 Largo" "Con in C RV 537 Allegro" "Con in D RV 454 Allegro" "Con in D RV 454 Largo" "Con in D RV 454 Allegro" "Con in C RV 425 Allegro" "Con in C RV 425 Largo" "Con in C RV 425 Allegro" "Con No 4 in F RV 297 Winter-Allegro" "Con No 4 in F RV 297 Winter-Largo" "Con No 4 in F RV 297 Winter-Allegro Non Molto" "Con No 3 in F RV 293 Autumn-Allegro" "Con No 3 in F RV 293 Autumn-Largo" "Con No 3 in F RV 293 Autumn-Allegro" "Con No 2 in G RV 315 Summer-Presto" "Con No 2 in G RV 315 Summer-Adagio E Piano-Prest O E Forte" "Con No 2 in G RV 315 Summer-Allegro Non Molto-Al Legro, E Tutto Sopra Il Canto" "Con No 1 in E RV 269 Spring-Allegro" "Con No 1 in E RV 269 Spring-Largo (E Pianissimo Se Mpre)" "Con No 1 in E RV 269 Spring-Allegro"))) (define cd* (map (lambda (x) (apply make-cd x)) '(("Andrea Bocelli & Eros Ramazzotti" "Eros" ("Musica _ (Con Andrea Bocelli)")) ("Antonio Vivaldi" "The Four Seasons" ("Con in C RV 537 Allegro" "Con in C RV 537 Largo" "Con in C RV 537 Allegro" "Con in D RV 454 Allegro" "Con in D RV 454 Largo" "Con in D RV 454 Allegro" "Con in C RV 425 Allegro" "Con in C RV 425 Largo" "Con in C RV 425 Allegro" "Con No 4 in F RV 297 Winter-Allegro" "Con No 4 in F RV 297 Winter-Largo" "Con No 4 in F RV 297 Winter-Allegro Non Molto" "Con No 3 in F RV 293 Autumn-Allegro" "Con No 3 in F RV 293 Autumn-Largo" "Con No 3 in F RV 293 Autumn-Allegro" "Con No 2 in G RV 315 Summer-Presto" "Con No 2 in G RV 315 Summer-Adagio E Piano-Prest O E Forte" "Con No 2 in G RV 315 Summer-Allegro Non Molto-Al Legro, E Tutto Sopra Il Canto" "Con No 1 in E RV 269 Spring-Allegro" "Con No 1 in E RV 269 Spring-Largo (E Pianissimo Se Mpre)" "Con No 1 in E RV 269 Spring-Allegro")) ("Astor Piazzolla" "The Central Park Concert" ("Concierto Para Quienteto" "Lunfardo" "Michelangelo" "Astor's Speech" "Contra Bajissmo" "Milonga Del Angel" "Adios Nonino" "Mumuki" "Muerte Del Angel" "La Camorra" "Verano Porte_o")) ("Barclay James Harvest" "Welcome To The Show" ("Psychedelic Child" "Welcome To The Show" "African Nights" "Lady Macbeth" "The Life You Lead" "Halfway To Freedom" "Shadows On The Sky" "If Love Is King" "Cheap The Bullet" "Origin Earth" "John Lennon's Guitar" "Where Do We Go")) ("Barclay James Harvest" "Berlin - A Concert For The People" ("Nova Lepidoptera" "Child Of The Universe" "Life Is For Living" "Sip Of Wine" "In Memory Of The Martyrs" "Loving Is Easy" "Mockingbird" "Hymn" "Berlin")) ("Bob Marley" "Legend Remastered (Disc 1)" ("Could You Be Loved" "Punky Reggae Rock" "Jamming" "Exodus" "Satisfy My Soul" "Is This Love" "Redemption Song" "Waiting In Vain" "I Shot The Sheriff" "One Love/People Get Ready" "Easy Skanking" "No Woman No Cry" "Stir It Up" "Get Up Stand Up" "Buffalo Solider" "Three Little Birds")) ("Booker Ervin" "New York, New York - The City In Song" ("Harlem Nocturne")) ("Bryan Adams" "The Wall Live In Berlin (Disc 1)" ("Young Lust")) ("Bryan Adams & Roger Waters" "The Wall Live In Berlin (Disc 1)" ("Empty Spaces")) ("Bud Powell" "New York, New York - The City In Song" ("52nd Street Theme")) ("Buddy Rich" "New York, New York - The City In Song" ("West Side Story Medley")) ("Buena Vista Social Club" "Buena Vista Social Club" ("La Bayamesa" "El Cuarto de Tula" "_Y T_ Qu_ Has Hecho_" "El Carretero" "Buena Vista Social Club" "Dos Gardenias" "Veinte Anos" "Murmullo" "De Camino a La Vereda" "Orgullecida" "Chan Chan" "Amor de Loca Juventud" "Candela" "Pueblo Nuevo")) ("Cesaria Evora" "The Very Best Of Cesaria Evora" ("Cize" "Embarca__o" "Fidjo Maguado" "Nho Antone Escaderode" "Vida Tem Um So Vida" "Sodade" "Esperan_a Irisada" "Lua Nha Testemunha" "Petit Pays" "Angola" "Fl_r Di Nha Esperen_a" "Sangue De Beirona" "Fala Pa Fala" "Crepuscular Solid_o" "Tchintchirote" "Bondade E Maldade" "Carnaval De S_o Vicente")) ("Cesaria Evora" "Distino Di Belita" ("Emigranti" "T'imbutchode" "Nova Sintra" "Salamansa" "Tanha" "Distino Di Bilita" "ODJi Maguado" "Bitina" "Nova Sintra" "Pontero")) ("Charlie Parker" "Bird Up - The Charlie Parker Remix Project" ("Cheers (X-ecutioners Remix)" "Salt Peanuts (The Mr. Peanut Chronicles) (Hal Willner's Whoops I'm An Indian Remix)" "Constellation (El-P Remix)" "Barbados (Matthew Backer Remix)" "Steeplechase (Dan The Automator Remix)" "Relaxin' At Camarillo (Me'shell NdegeOcello Remix)" "Congo Blues (Donk Remix)" "Perhaps (Dan The Automator Remix)" "All The Shadows Of Nuff (Hal Willner's Whoops I'm An Indian Remix)" "Bird Of Paradise (Serj Tankian Remix)" "Bebop (Choco And RZA Remix)" "A Night In Tunisia (Donk Remix)" "Now's The Time (No Time Like Now) (Red Hawk Remix)")) ("Chris De Burgh" "Live From Dublin" ("The Revolution" "The Last Time I Cried" "A Spaceman Came Travelling" "High On Emotion" "Sailing Away" "Dont Pay The Ferryman" "Spanish Train" "Say Goodbye To It All" "The Risen Lord" "Missing You" "Last Night" "Borderline" "I'm Not Scared Anymore" "The Lady In Red" "Patricia The Stripper")) ("Coldplay" "Coldplay Live 2003" ("Yellow (Live)" "A Rush Of Blood To The Head (Live)" "Moses (Live)" "One I Love (Live)" "Everything's Not Lost (Live)" "Clocks (Live)" "Shiver (Live)" "Amsterdam (Live)" "See You Soon (Live)" "God Put A Smile Upon Your Face (Live)" "Politik (Live)" "In My Place (Live)")) ("Count Basie" "New York, New York - The City In Song" ("Jumpin' At The Woodside")) ("Cyndi Lauper" "The Wall Live In Berlin (Disc 1)" ("Another Brick In The Wall (Part 2)")) ("Dakota Station" "New York, New York - The City In Song" ("Broadway")) ("Dave Matthews Band" "The Central Park Concert (Disc 3)" ("Stay (Wasting Time) (Live)" "Where Are You Going (Live)" "Cortez The Killer (Live)" "All Along The Watchtower (Live)" "Grey Street (Live)" "Jimi Thing (Live)" "What You Are (Live)" "What Would You Say (Live)")) ("Dave Matthews Band" "The Central Park Concert (Disc 2)" ("Warehouse (Live)" "Rhyme And Reason (Live)" "Two Step (Live)" "Dancing Nancies (Live)" "Help Myself (Live)" "Ants Marching (Live)")) ("Dave Matthews Band" "The Central Park Concert (Disc 1)" ("So Much To Say (Live)" "When The World Ends (Live)" "Crush (Live)" "Don't Drink The Water (Live)" "Granny (Live)" "Too Much (Live)")) ("David Bowie" "Best Of Bowie-Limited Edition CD (Disc 1)" ("I'm Afraid Of Americans (V1)" "This Is Not America (w/The Pat Metheny Group)" "Dancing In The Street (w/Mick Jagger)" "Golden Years" "Young Americans" "Blue Jean" "The Jean Genie" "Modern Love" "Fashion" "Heroes" "Changes" "China Girl" "Let's Dance" "Ziggy Stardust" "Suffragette City" "Rebel Rebel" "Ashes To Ashes" "Space Oddity" "Fame" "Under Pressure (w/Queen)")) ("David Osborne" "Plays a Tribute to Frank Sinatra" ("Track 05" "Track 08" "Track 10" "Track 09" "Track 12" "Track 13" "Track 07" "Track 11" "Track 01" "Track 04" "Track 14" "Track 06" "Track 02" "Track 03")) ("Deep Purple" "Made In Japan [Disc 1] [Live]" ("Space Truckin'" "Smoke On The Water" "The Mule" "Strange Kind Of Women" "Child In Time" "Highway Star" "Lazy")) ("Dire Straits" "On The Night" ("Money For Nothing" "You And Your Friend" "Walk Of Life" "Romeo And Juliet" "Calling Elvis" "Private Investigations" "Brothers In Arms" "Your Latest Trick" "On Every Street" "Heavy Fuel")) ("Duke Ellington" "New York, New York - The City In Song" ("Harlem Air Shaft" "Take The \"A\" Train" "Drop Me Off In Harlem")) ("Edie Brickell" "Picture Perfect Morning" ("Hard Times" "Olivia" "In The Bath" "Lost In The Moment" "Stay Awhile" "Picture Perfect Morning" "Tomorrow Comes" "Good Times" "When The Lights Go Down" "Green" "Another Woman's Dream")) ("Edie Brickell & New Bohemians" "Shooting Rubberbands at the Stars" ("SM" "She" "Love like we do" "Air of December" "What I am" "Little Miss S" "Circle" "Nothing" "The wheel" "Keep coming back" "Now" "Beat the time")) ("Edit Piaf" "20 Greatest Hits" ("La Vie En Rose" "Pour Moi Tout Seule" "Milord" "Mariage" "Les Trois Cloches" "Adieu Mon Coeur" "Une Refrain Courant Dans La Rue" "Le Petite Homme" "Bal Dans Ma Rue" "Le Chant Du Pirate" "Les Amant De Paris" "C'est Pour CA" "Monsieur Lenoble" "Dany" "C'est Merveilleux" "Paris" "Le Prisonnier De La Tour" "La Goualante Du Pauvre Jean" "Je M'en Fous Pas Mal" "Non Je Ne Regrette Rien")) ("Emerson, Lake & Palmer" "Live At The Royal Albert Hall" ("Tarkus (Medley) Eruption ~ Stones Of Years ~ Iconoclast" "Lucky Man" "Knife Edge" "Still... You Turn Me On" "Karn Evil 9 (1st Impression Part 2)" "Paper Blood" "Finale (Medley) Fanfare For The Common Man ~ America ~ Rondo" "Creole Dance" "Pirates" "Black Moon" "Romeo & Juliet")) ("Enya" "The Memory Of Trees" ("La So_adora" "Hope Has a Place" "Athair Ar Neamh" "Once You Had Gold" "Pax Deorum" "China Roses" "On My Way Home" "From Where I Am" "Anywhere Is" "Tea-House Moon" "The Memory of Trees")) ("Enya" "A Day Without Rain" ("Pilgrim" "Wild Child" "Deora Ar Mo Chroi" "Silver Inches" "Tempus Vernum" "Flora's Secret" "A Day Without Rain" "Only Time" "Fallen Embers" "Lazy Days")) ("Eros Ramazzotti" "Dove c'_ Musica" ("Lettera Al Futuro" "Quasi Amore" "Dove c'_ Musica" "L'uragano Meri" "L'aurora" "Pi_ Bella Cosa" "Stella Gemella" "Questo Immenso Show" "Lei Per_" "Buona Vita" "Io Amer_" "Yo Sin T_")) ("Eros Ramazzotti" "Eros" ("Terra Promessa" "Ma Che Bello Questo Amore" "Memorie" "Ancora Un Minuto Di Sole" "Quanto Amore Sei" "Favola" "Adesso Tu" "Un'altra Te" "Una Storia Importante" "L'aurora" "Se Bastasse Una Canzone" "Piu« Bella Cosa" "Occhi Di Speranza" "Quasi Amore")) ("Evanescence" "Fallen" ("Everybody's Fool" "Going Under" "My Immortal" "Tourniquet" "My Last Breath" "Taking Over Me" "Hello" "Tired Of Being Here" "Whisper" "Imaginary" "Bring Me To Life" "Haunted")) ("Freeplay Music Inc." "Alternative Rock Volume 1" ("Blue 30")) ("Genesis" "The Lamb Lies Down on Broadway (Disc 1)" ("The Lamb Lies Down On Broadway" "Carpet Crawlers" "Fly On A Windshield" "Back In N.Y.C." "Cuckoo Cocoon" "Counting Out Time" "The Chamber Of 32 Doors" "The Grand Parade Of Lifeless Packaging" "In The Cage" "Broadway Melody Of 1974" "Hairless Heart")) ("Genesis" "The Lamb Lies Down On Broadway (Disc 2)" ("The Waiting Room" "Riding The Scree" "The Colony Of Slippermen (The Arrival/A Visit To The Doktor/Raven)" "Here Comes The Supernatural Anaesthetist" "It" "The Light Dies Down On Broadway" "Anyway" "Silent Sorrow In Empty Boats" "Ravine" "In The Rapids" "The Lamia" "Lilywhite Lilith")) ("Genesis" "We Can't Dance" ("Way Of The World" "No Son Of Mine" "Tell Me Why" "I Can't Dance" "Living Forever" "Driving The Last Spike" "Fading Lights" "Hold On My Heart" "Never A Time" "Dreaming While You Sleep" "Since I Lost You" "Jesus He Knows Me")) ("Genesis" "Seconds Out (Disc 1)" ("The Carpet Crawlers" "Firth Of Fifth" "The Lamb Lies Down On Broadway" "Squonk" "Robbery, Assault And Battery" "Afterglow" "The Musical Box" "I Know What I Like")) ("Genesis" "A Trick Of The Tail" ("Los Endos" "Ripples" "Entangled" "Squonk" "Robbery, Assault And Battery" "A Trick Of The Tail" "Dance On A Volcano" "Mad Man Moon")) ("Genesis" "Seconds Out (Disc 2)" ("Supper's Ready" "Dance On A Volcano" "Los Endos" "Cinema Show")) ("Genesis" "Foxtrot" ("Supper's Ready" "Get 'Em Out By Friday" "Horizons" "Time Table" "Can-Utility And The Coastliners" "Watcher Of The Skies")) ("Genesis" "...And Then There Were Three..." ("Burning Rope" "Scenes From A Night's Dream" "Say It's Alright Joe" "Snowbound" "Undertow" "The Lady Lies" "Deep In The Motherlode" "Ballad Of Big" "Many Too Many" "Follow You Follow Me" "Down And Out")) ("Genesis" "Selling England By The Pound" ("The Battle Of Epping Forest" "Firth Of Fifth" "The Cinema Show" "More Fool Me" "Aisle Of Plenty" "I Know What I Like (In Your Wardrobe)" "After The Ordeal" "Dancing With The Moonlight Knight")) ("Genesis" "Wind & Wuthering" ("Wot Gorilla_" "Unquiet Slumber For The Sleepers..." "...In That Quiet Earth" "Your Own Special Way" "Afterglow" "All In A Mouse's Night" "Eleventh Earl Of Mar" "Blood On The Rooftops" "One For The Vine")) ("George Shearing" "New York, New York - The City In Song" ("Lullaby Of Birdland")) ("Gianna Nannini & The Primadonnas" "Tutto Live" ("Primadonna" "Bla Bla" "Latin Lover" "America" "Sognami" "Bi-Bip" "Fotoromanza" "Occhi Aperti" "California" "Ragazzo Dell'europa" "Wagon-Lits" "Autostrada" "Kollosal" "Amore Amore" "Intro")) ("Guns N' Roses" "Use Your Illusion II" ("Shotgun Blues" "My World" "Don't Cry" "Yesterdays" "Breakdown" "You Could Be Mine" "Estranged" "Get In The Ring" "So Fine" "Locomotive" "Pretty Tied Up" "Knockin' On Heaven's Door" "Civil War" "14 Years")) ("Icehouse" "Icehouse" ("We Can Get Together" "Icehouse" "Fatman" "Can't Help Myself" "Not My Kind" "Sister" "Walls" "Sons" "Skin" "Boulevarde")) ("Jerry Jeff Walker" "Viva Terlingua" ("Up Against The Wall Red Neck" "Little Bird" "Sangria Wine" "Desperados Waiting For The Train" "Backsliders Wine" "Gettin' By" "Get It Out" "Wheel" "London Homesick Blues")) ("Jethero Tull" "Thick As A Brick" ("Thick As A Brick")) ("John Coltrane" "A Love Supreme" ("Pursuance" "Psalm" "Acknowledgement" "Resolution")) ("Joni Mitchel (w/ James Galway)" "The Wall Live In Berlin (Disc 1)" ("Goodbye Blue Sky")) ("Katie Melua" "Call Off The Search" ("Belfast (Penguins And Cats)" "My Aphrodisiac Is You" "Faraway Voice" "Call Off The Search" "Learnin' The Blues" "Lilac Wine" "The Closest Thing To Crazy" "Blame It On The Moon" "Tiger In The Night" "I Think It's Going To Rain Today" "Crawling Up The Hill" "Mockingbird Song")) ("Lena Horne" "New York, New York - The City In Song" ("Autumn In New York")) ("Madeleine Peyroux" "Careless Love" ("Lonesome Road" "I'll Look Around" "Don't Cry Baby" "You're Gonna Make Me Lonesome When You Go" "This Is Heaven To Me" "Don't Wait Too Long" "No More" "Weary Blues" "J'ai Deux Amours" "Dance Me To The End Of Love" "Careless Love" "Between The Bars")) ("Miles Davis" "Kind of Blue" ("All Blues" "Flamenco Sketches" "Freddie Freeloader" "Blue in Green" "Flamenco Sketches (Alternate Take)" "So What")) ("Modern Jazz Quartet" "New York, New York - The City In Song" ("Skating In Central Park")) ("Natalie Cole" "Unforgettable With Love" ("Unforgettable" "Our Love Is Here To Stay" "Orange Colored sky" "Non Dimenticar" "A Medley of: For Sentimental Reasons, Tenderly, Autumn Leaves" "Thou Swell" "Almost Like Being In Love" "That Sunday That Summer" "Darling, Je Vous Aime Beaucoup" "Nature Boy" "Straighten Up and Fly Right" "This Can't Be Love" "Too Young" "Paper Moon" "Don't Get Around Much Anymore" "The Very Thought Of You" "Smile" "Avalon" "Lush Life" "Mona Lisa" "Route 66" "L-O-V-E")) ("Nena" "99 Luftballons" ("Leuchtturm" "Das Land Der Elefanten" "99 Red Balloons" "Rette Mich" "99 Luftballons" "_" "Hangin' On You" "Just A Dream" "Kino" "Uner Kannt Durch's Marchenland" "Let Me Be Your Pirate")) ("Norah Jones" "Come Away With Me" ("Cold Cold Heart" "Come Away With Me" "Nightingale" "I've Got To See You Again" "Seven Years" "Feelin' The Same Way" "The Long Day Is Over" "Shoot The Moon" "Painter Song" "Lonestar" "One Flight Down" "The Nearness Of You" "Don't Know Why" "Turn Me On")) ("Pamela Z" "A Delay Is Better" ("Badagada" "Nemiz" "Pop Titles 'You'" "Geekspeak" "Questions" "In Tymes Of Olde" "The Muni Section" "Feral" "Bone Music" "Number 3" "50 (For Charles Amirkhanian")) ("Pamela Z & Barbara Imhoff" "A Delay Is Better" ("Obsession, Addiction, And The Aristotelian Curve")) ("Peggy Lee" "New York, New York - The City In Song" ("New York City Blues")) ("R.E.M." "New Adventures In Hi-Fi" ("E-Bow The Letter" "Be Mine" "Electrolite" "Low Desert" "Leave" "So Fast, So Numb" "Bittersweet Me" "The Wake-Up Bomb" "Departure" "Zither" "How The West Was Won And Where It Got Us" "Undertow" "New Test Leper" "Binky The Doormat")) ("Roger Waters" "The Wall Live In Berlin (Disc 2)" ("Waiting For The Worms" "Hey You" "Comfortably Numb" "Bring The Boys Back Home" "Stop" "Trial" "Is There Anyboy Out There_" "Tide Is Turning" "Nobody Home" "Run Like Hell" "In The Flesh" "Vera")) ("Roger Waters" "The Wall Live In Berlin (Disc 1)" ("Goodbye Cruel World" "Don't Leave Me Now" "Another Brick In The Wall (Part 3)" "Another Brick In The Wall (Part 1)" "One Of My Turns")) ("Roger Waters, Joe Chemay, John Joyce, Stan Farber, And Jim Haas" "The Wall Live In Berlin (Disc 1)" ("The Happiest Days Of Our Lives")) ("Rush" "Rush In Rio (Disc 1)" ("Bravado" "The Trees" "The Big Money" "Earthshine" "Freewill" "Distant Early Warning" "Natural Science" "YYZ" "The Pass" "Tom Sawyer" "Closer To The Heart" "New World Man" "Roll The Bones")) ("Rush" "Rush In Rio (Disc 3)" ("Cygnus X-1" "La Villa Strangiato" "Limelight" "Between Sun & Moon" "Working Man" "The Spirit of Radio" "Vital Signs" "By-Tor and the Snow Dog")) ("Rush" "Rush In Rio (Disc 2)" ("Dreamline" "Resist" "Driven" "Leave That Thing Alone" "Red Sector A" "One Little Victory" "Ghost Rider" ; 2112 "O Baterista" "Secret Touch")) ("Sarah McLachlan" "Mirrorball" ("I Will Remember You" "Sweet Surrender" "Adia" "Fumbling towards Ecstasy" "Possession" "Do What You Have to Do" "I Love You" "Good Enough" "The Path of Thorns" "Angel" "Fear" "Hold On" "Ice Cream")) ("Sarah McLachlan" "Fumbling Towards Ecstasy" ("Ice" "Hold On" "Plenty" "Good Enough" "Fear" "Wait" "Fumbling Towards Ecstasy (Acoustic Version)" "Mary" "Elsewhere" "Circle" "Possession" "Ice Cream")) ("Sarah McLachlan" "Afterglow" ("Answer" "Drifting" "World On Fire" "Push" "Fallen" "Stupid" "Perfect Girl" "Time" "Train Wreck" "Dirty Little Secret")) ("Scorpions" "Live Bites" ("Wind Of Change" "Hero's Don't Cry" "In Trance" "Living For Tomorrow" "No Pain No Gain" "Is There Anybody There" "Tease Me Please Me" "When The Smoke Is Going Down" "Crazy World" "Concerto In V" "Ryhythm Of Love" "White Dove" "Edge Of Time" "Alien Nation")) ("Scorpions" "The Wall Live In Berlin (Disc 1)" ("In The Flesh")) ("Sinead O'Connor & The Band (w/ Garth Hudson, Rick Danko, Levon Helm)" "The Wall Live In Berlin (Disc 1)" ("Mother")) ("Sin_ad O'Connor" "I Do Not Want What I Haven't Got" ("Three Babies" "I Do Not Want What I Haven't Got" "You Cause As Much Sorrow" "I Am Stretched On your Grave" "The Last Day Of Our Acquaintance" "Feel So Different" "Black Boys On Mopeds" "Nothing Compares 2 U" "The Emperor's New Clothes" "Jump In The River")) ("Stan Kenton" "New York, New York - The City In Song" ("Stompin' At The Savoy")) ("The Cranberries" "No Need to Argue" ("Empty" "Yeat's Grave" "Twenty One" "Everything I Said" "Ridiculous Thoughts" "Zombie" "Dreaming My Dreams" "I Can't Be With You" "Daffodil Lament" "Ode to My Family" "The Icicle Melts" "No Need to Argue" "Disappointment")) ("The Cranberries" "Everybody Else Is Doing It, So Why Can't We_" ("Dreams" "I Still Do" "Pretty" "Not Sorry" "Sunday" "Linger" "Wanted" "Put Me Down" "Walking Back" "Still Can't..." "How" "I Will Always")) ("The Rolling Stones" "Some Girls" ("Lies" "Respectable" "Before They Make Me" "Some Girls" "Beast Of Burden" "Imagination" "Far Away Eyes" "Shattered" "Miss You" "When The Whip Comes Down")) ("Tina Turner &Eros Ramazzotti" "Eros" ("Cose Della Vita / Can't Stop Thinking Of You")) ("U2" "War" ("Red Light" "Two Hearts Beat As One" "Drowning Man" "The Refugee" "\"40\"" "Surrender" "Like A Song..." "New Year's Day" "Sunday Bloody Sunday" "Seconds")) ("U2" "The Unforgettable Fire" ("Pride (In The Name Of Love)" "The Unforgettable Fire" "Indian Summer Sky" "Wire" "4th Of July" "Mlk" "Promenade" "A Sort Of Homecoming" "Elvis Presley And America" "Bad")) ("Ustad Mohammad Omar" "Virtuoso From Afghanistan" ("Emen/Tintal" "Keliwali" "Bopali/Jhaptal" "Tabla Solo" "Pelo/Tintal")) ("Ute Lemper & Roger Waters" "The Wall Live In Berlin (Disc 1)" ("The Thin Ice")) ("Van Halen" "Balance" ("The Seventh Seal" "Don't Tell Me (What Love Can Do)" "Not Enough" "Doin Time" "Take Me Back (Deja V_)" "Aftershock" "Strung Out" "Baluchitherium" "Can't Stop Lovin' You" "Amsterdam" "Feelin'" "Big Fat Money")) ("Various Artists" "Carl Orff - Carmina Burana - Christian Thielemann" ("Uf dem Anger 7. Floret silva nobilis" "Fortuna imperatrix mundi 25. O Fortuna" "Blanziflor et Helena 24. Ave, formosissima" "III. Cour d'amours 23. Dulcissime" "III. Cour d'amours 22. Tempus est iocundum" "III. Cour d'amours 21. In trutina" "II. In taberna 11. Estuans interius" "III. Cour d'amours 20. Veni, veni, venias" "Uf dem Anger 10. Were diu werlt alle min" "I. Primo Vere 4. Omnia sol temperat" "III. Cour d'amours 19. Si puer cum puellula" "Fortuna imperatrix mundi 2. Fortune plango vulnera" "III. Cour d'amours 18. Circa mea pectora" "I. Primo Vere 5. Ecce gratum" "Uf dem Anger 9. Reie Swaz hie gat umbe - Chume, chum, geselle min!" "III. Cour d'amours 17. Stetit puella" "Fortuna imperatrix mundi 1. O fortuna" "III. Cour d'amours 16. Dies, nox et omnia" "II. In taberna 13. Ego sum abbas" "II. In taberna 14. In taberna quando sumus" "II. In taberna 12. Olim lacus colueram" "III. Cour d'amours 15. Amor volat undique" "Uf dem Anger 6. Tanz" "I. Primo Vere 3. Veris leta facies" "Uf dem Anger 8. Chramer, gip die varwe mir")) ("Various Artists" "Kann Den Liebe S_nde Sein" ("Sag' Beim Abschied Leise \"Servus\" / Willi Forst Mit Schrammelbegleitung" "Ein Freund, Ein Guter Freund / Comedian Harmonists" "Auf Der Reeperbahn Nachts Um 1/2 Eins / Hans Albers Mit Begleitorchester" "Ich Weiss, Es Wird Einmal Ein Wunder Gescheh'n / Zarah Leander Und Das UFA Filmorchester" "Du Hast Gl_ck Bei Den Frau'n, Bel Ami / Lizzi Waldm_ller Mit Chor Und Orchester" "Kann Den Liebe S_nde Sein / Zarah Leander Und Das UFA Filmorchester" "Ich K_sse Ihre Hand, Madame / Richard Tauber Mit Dem Dajos Bela K_nstler Orchester" "O Mia Bella Napoli (Strassens_nger Von Neapel) / Rudi Schuricke Und Das Orchester Erich Schneidewind" "Lili Marleen / Lale Andersen Mit Kleinem Ensemble" "Adieu, Mein Kleiner Gardeoffizier / Liane Haid, Lewis Ruth Band" "Ich Tanze Mit Dir In Den Himmel Hinein / Lilian Harvey Und Willy Fritsch Mit Dem Odeon Tanzorchester" "Jetzt Geh' Ich Ins Maxim / Johannes Heesters Und Das Symphonie-Orchester Graunke" "Ich Bin Von Kopf Bis Fuss Auf Liebe Eingestellt / Marlene Dietrich Mit Friedrich Hollaender Und Seinen Jazz-Symphonikern" "La Paloma / Hans Albers Mit Begleitorchester" "Ich Brech' Die Herzen Der Stolzesten Frau'n / Heinz R_hmann Und Das Odeon Tanzorchester")) ("Various Artists" "The Metropolitan Museum Of Art" ("Chubby Checker: The Twist" "Al Hirt: Wolverine Blues" "Paul Winter Sextet: Bells And Horns" "Grace Bumbry: Lo Son L'umile Ancella" "Eugene List: The Banjo" "Walter Huston: September Song; From Knickerbocker Holiday" "London Philharmonic: Fanfare For The Inauguration Of John F. Kennedy" "Leonard Bernstein: Somewhere; Excerpt From West Side Story" "Dallas Symphony Orchestra: Fanfare Fro The Common Man" "Ella Fitzgerald: Mack The Knife" "Aaron Copland: Celebration Dance; From Billy The Kid" "Orchestra Of The Americas: Medley From Camelot" "Alan Jay Lerner: There But For You, Go I; From Brigadoon" "Lester Lanin: I Won't Dance" "Pablo Casals: Cant Dels Ocells (Song Of The Birds)" "Count Basie: Corner Pocket" "Mahalia Jackson: Run All The Way")) ("benny green" "New York, New York - The City In Song" ("Central Park South"))))) (provide/contract (struct cd ([artist string?] [title string?] [songs (listof string?)]))) (provide cd0 cd1 cd2 cd*) ;; ------------------------------------------------------------ ;; SPACE BETWEEN WHAT USED TO BE SEPARATE TEACHPACKS ;; ------------------------------------------------------------ (require (lib "class.ss") (lib "list.ss") (lib "etc.ss") (lib "xml.ss" "xml") (lib "mred.ss" "mred")) (require (lib "htmltext.ss" "browser")) (provide show-html) (define h% (html-text-mixin text%)) ;; show-html : xexpr -> editor-snip% (define (show-html xexpr) (define xml (with-handlers ([exn:fail? bad-html-error]) (xexpr->xml xexpr))) (let ([out (open-output-string)]) (parameterize ((current-output-port out)) (with-handlers ([exn:fail? bad-html-error]) (display-xml/content xml))) (let ([html-string (get-output-string out)]) (define h (new h% (auto-wrap #t))) (define e (new editor-snip% (editor h))) (send h set-max-width 600) (with-handlers ([exn:fail? bad-html-error]) (render-html-to-text (open-input-string html-string) h #t #f) e)))) (define (bad-html-error e) (error 'show-html "not valid XHTML")) ;; html-equal? (Thanks Felix) (provide html-equal? list-of-html-equal? html-normalize concat-strings concat-whitespace) ;; A [Listof X] is one of: ;; - empty ;; - (cons X [Listof X]) ;; An Xexpr is one of: ;; - String ;; - Symbol ;; - Number ;; - (make-cdata Location Location String) ;; - (make-comment String) ;; - (make-pi Location Location String (list String)) ;; - (cons Symbol (cons [Listof (list Symbol String)] [Listof Xexpr])) ;; - (cons Symbol [Listof Xexpr]) ;; We don't know what a Location is. Luckily, we don't need to know. ;; html-equal? : Xexpr Xexpr -> Bool (define (html-equal? x y) (equal? (html-normalize x) (html-normalize y))) ;; list-of-html-equal? : [Listof Xexpr] [Listof Xexpr] -> Bool (define (list-of-html-equal? xs ys) (equal? (map html-normalize xs) (map html-normalize ys))) ;; html-normalize : Xexpr -> Xexpr ;; Returns a (pseudo) "normal form" for x that renders the same as x. (define (html-normalize x) (cond [(string? x) (concat-whitespace x)] [(symbol? x) x] [(number? x) x] [(cdata? x) x] [(comment? x) x] [(pi? x) x] [(and (not (empty? (rest x))) (or (empty? (first (rest x))) (and (cons? (first (rest x))) (list? (first (first (rest x))))))) (cons (first x) (cons (first (rest x)) (map html-normalize (concat-strings (rest (rest x))))))] [else (cons (first x) (cons empty (map html-normalize (concat-strings (rest x)))))])) ;; concat-strings : [Listof Any] -> [Listof Any] ;; Appends any neighboring strings in lst together. (define (concat-strings lst) ;; N.B. Uses generative recursion! Watch out! ;; (termination condition is the number of strings in lst.) ;; I could use an accumulator to avoid such ugliness. But I don't feel like it. (cond [(empty? lst) empty] [else (cond [(empty? (rest lst)) lst] [else (cond [(and (string? (first lst)) (string? (first (rest lst)))) (concat-strings (cons (string-append (first lst) (first (rest lst))) (rest (rest lst))))] [else (cons (first lst) (concat-strings (rest lst)))])])])) ;; concat-whitespace : String -> String ;; Returns a string like str, except any whitespace substring is replaced with #\space or the empty string (define (concat-whitespace str) ;; Question: Is the below a candidate for Olin Shiver's LOOP library? ;; : [Listof Char] -> [Listof Char] ;; Collapses whitespace at the start of the string, then ;; transfers control to concat-whitespace/word when it sees a letter. (define (concat-whitespace/start lst) (cond [(empty? lst) empty] [else (cond [(char-whitespace? (first lst)) (concat-whitespace/start (rest lst))] [else (cons (first lst) (concat-whitespace/word (rest lst)))])])) ;; : [Listof Char] -> [Listof Char] ;; Skips over all of the word characters; transfers control to ;; concat-whitespace/space once it sees a whitespace character. (define (concat-whitespace/word lst) (cond [(empty? lst) empty] [else (cond [(char-whitespace? (first lst)) (concat-whitespace/space (rest lst))] [else (cons (first lst) (concat-whitespace/word (rest lst)))])])) ;; : [Listof Char] -> [Listof Char] ;; Skips over all of the space characters; if it hits the ;; end of the list, then we collapse them all to the empty list. ;; If it hits a letter, then collapses the spaces to a single #\space ;; and transfers control to concat-whitespace/word. (define (concat-whitespace/space lst) (cond [(empty? lst) empty] [else (cond [(char-whitespace? (first lst)) (concat-whitespace/space (rest lst))] [else (cons #\space (cons (first lst) (concat-whitespace/word (rest lst))))])])) (list->string (concat-whitespace/start (string->list str)))) ;; concat-whitespace/faithful : String -> String ;; Returns a string like str, except any whitespace substring ;; is replaced with #\space. This is more faithful to how the ;; actual HTML will be rendered, but its also more painful to test with. (define (concat-whitespace/faithful str) ;; : [Listof Char] -> [Listof Char] (define (concat-whitespace/list lst) (cond [(empty? lst) empty] [else (cond [(not (char-whitespace? (first lst))) (cons (first lst) (concat-whitespace/list (rest lst)))] [(char-whitespace? (first lst)) (cond [(empty? (rest lst)) (cons #\space empty)] [else (cond [(char-whitespace? (first (rest lst))) (concat-whitespace/list (rest lst))] [else (cons #\space (concat-whitespace/list (rest lst)))])])])])) (list->string (concat-whitespace/list (string->list str)))) )