Sir Roger George Moore (14 October 1927 – 23 May 2017) was an English actor. He was the third actor to portray fictional British secret agent James Bond in the Eon Productions film series, playing the character in seven feature films between 1973 and 1985. Moore's seven appearances as Bond, from Live and Let Die to A View to a Kill, are the most of any actor in the Eon-produced entries.[1][2]
On television, Moore played the lead role of Simon Templar, the title character in the British mystery thriller series The Saint (1962–1969). He also had roles in American series, including Beau Maverick on the Western Maverick (1960–1961), in which he replaced James Garner as the lead, and a co-lead of the action-comedy The Persuaders! (1971–1972). Continuing to act on screen in the decades after his retirement from the Bond franchise, Moore's final appearance was in a pilot for a new Saint series that became a 2017 television film.
Moore was appointed a UNICEF Goodwill Ambassador in 1991 and was knighted by Queen Elizabeth II in 2003 for services to charity. In 2007, he received a star on the Hollywood Walk of Fame for his contributions to the film industry. He was made a Commander of the Order of Arts and Letters by the French government in 2008.
Early life[]
Roger Moore was born on 14 October 1927 in Stockwell, London.[3] He was the only child of George Alfred Moore (1904–1997), a policeman based in Bow Street, London, and Lillian "Lily" Pope (1904–1986).[4][5] His mother was born in Calcutta, India, to an English family.[6] He attended Battersea Grammar School, but was evacuated to Holsworthy in Devon during the Second World War, and attended Launceston College in Cornwall. He was further educated at Dr Challoner's Grammar School in Amersham, Buckinghamshire.[7]
Moore was apprenticed to an animation studio, but was fired after he made a mistake with some animation cels.[5] When his father investigated a robbery at the home of film director Brian Desmond Hurst, Moore was introduced to the director and hired as an extra for the 1945 film Caesar and Cleopatra.[8] While there, Moore attracted an off-camera female fan following, and Hurst decided to pay Moore's fees at the Royal Academy of Dramatic Art. Moore spent three terms at RADA, where he was a classmate of his future Bond co-star Lois Maxwell, the original Miss Moneypenny. During his time there, he developed the Mid-Atlantic accent and relaxed demeanour that became his screen persona.[5]
At 18, shortly after the end of the Second World War, Moore was conscripted for national service. On 21 September 1946, he was commissioned into the Royal Army Service Corps as a second lieutenant.[9] He was an officer in the Combined Services Entertainment section, eventually becoming a captain[8] commanding a small depot in West Germany. There he looked after entertainers for the armed forces passing through Hamburg.[10]
Career[]
Early work (1945–1953)[]
Moore had some early uncredited appearances in Perfect Strangers, Caesar and Cleopatra (both 1945), Gaiety George, Piccadilly Incident (both 1946), and Trottie True (1949) appearing alongside an uncredited Christopher Lee (both actors being cast by Brian Desmond Hurst as stage-door Johnnies).
In his book Last Man Standing: Tales from Tinseltown, Moore states that his first television appearance was on 27 March 1949 in The Governess by Patrick Hamilton, a live broadcast (as usual in that era), in which he played the minor part of Bob Drew.[11] Other actors in the show included Clive Morton and Betty Ann Davies. He had uncredited parts in films including Paper Orchid and The Interrupted Journey (both 1949). He was in Drawing-Room Detective on TV and appeared in the films One Wild Oat and Honeymoon Deferred (both 1951).
In the early 1950s Moore worked as a model,[8] appearing in print advertisements in the UK for knitwear (earning him the nickname "The Big Knit")[3] and a wide range of other products such as toothpaste.[12]
Moore travelled to the United States and began to work in television. He appeared in adaptations of Julius Caesar and Black Chiffon, and in two episodes of Robert Montgomery Presents, as well as the TV movie The Clay of Kings (all 1953).
MGM (1954–1956)[]
In March 1954, MGM signed Moore to a seven-year contract.[13] He started his MGM contract with a small role in The Last Time I Saw Paris (1954), flirting with Elizabeth Taylor. He appeared in Interrupted Melody, a biographical movie about opera singer Marjorie Lawrence's recovery from polio, in which he was billed third under Glenn Ford and Eleanor Parker as Lawrence's brother Cyril.[14] That same year, he played a supporting role in the swashbuckler The King's Thief starring Ann Blyth, Edmund Purdom, David Niven and George Sanders.[15]
In the 1956 film Diane, Moore was billed third again, this time under Lana Turner and Pedro Armendariz, in a 16th-century period piece set in France with Moore playing Prince Henri, the future king. Moore was released from his MGM contract after two years following the film's critical and commercial failure. In his own words, "At MGM, RGM [Roger George Moore] was NBG [no bloody good]."[3]
Moore then freelanced for a time, appearing in episodes of Ford Star Jubilee (1956), Lux Video Theatre (1957) and Matinee Theatre' (1957).
Ivanhoe (1958–1959)[]
Moore's first success was playing the eponymous hero, Sir Wilfred of Ivanhoe, in the 1958–59 series Ivanhoe, a loose adaptation of the 1819 romantic novel by Sir Walter Scott set in the 12th century during the era of Richard the Lionheart, delving into Ivanhoe's conflict with Prince John. Shot mainly in England at Elstree Studios and Buckinghamshire, some of the show was also filmed in California owing to a partnership with Columbia Studios' Screen Gems. Aimed at younger audiences, the pilot was filmed in colour, a reflection of its comparatively high budget for a British children's adventure series of the period, but subsequent episodes were shot in black and white.[16] Christopher Lee and John Schlesinger were among the show's guest stars, and series regulars included Robert Brown (who in the 1980s played M in several James Bond films) as the squire Gurth, Peter Gilmore as Waldo Ivanhoe, Andrew Keir as villainous Prince John, and Bruce Seton as noble King Richard. Moore suffered broken ribs and a battle-axe blow to his helmet while performing some of his own stunts filming a season of 39 half-hour episodes, and later reminisced, "I felt a complete Charlie riding around in all that armour and damned stupid plumed helmet. I felt like a medieval fireman."[17]
Warner Bros. (1959–1961)[]
Moore, Template:Circa
After that, he spent a few years mainly doing one-shot parts in television series, including an episode of Alfred Hitchcock Presents in 1959 titled "The Avon Emeralds". He signed another long-term contract to a studio, this time to Warner Bros.[18]
In 1959, he took the lead role in The Miracle,[18] a version of the play Das Mirakel for Warner Bros. showcasing Carroll Baker as a nun. The part had been turned down by Dirk Bogarde. That same year, Moore was directed by Arthur Hiller in "The Angry Young Man", an episode of the television series The Third Man starring Michael Rennie as criminal mastermind Harry Lime, the role portrayed by Orson Welles in the film version.
The Alaskans (1959–1960)[]
Moore in The Alaskans
Moore's next television series involved playing the lead as "Silky" Harris for the ABC/Warner Bros. 1959–60 Western The Alaskans, with co-stars Dorothy Provine as Rocky, Jeff York as Reno, and Ray Danton as Nifty. The show ran for a single season of 37 hour-long episodes on Sunday nights. Though set in Skagway, Alaska, with a focus on the Klondike Gold Rush around 1896, the series was filmed in the hot studio lot at Warner Bros. in Hollywood with the cast costumed in fur coats and hats. Moore found the work highly taxing and his off-camera affair with Provine complicated matters even more. Moore later referred to the experience as his "most appalling television series."
He subsequently appeared as the questionable character "14 Karat John" in the two-part episode "Right Off the Boat" of the ABC/WB crime drama The Roaring 20s, with Rex Reason, John Dehner, Gary Vinson, and Dorothy Provine, appearing in a similar role, but with a different character name.
Maverick (1960–1961)[]
Template:Center
Moore and Kathleen Crowley in Maverick
In the wake of The Alaskans, Moore was cast as Beau Maverick, an English-accented cousin of frontier gamblers Bret Maverick (James Garner), Bart Maverick (Jack Kelly), and Brent Maverick (Robert Colbert) in the much more successful ABC/WB Western series Maverick.
Moore appeared as the character in 14 episodes after Garner had left the series at the end of the previous season, wearing some of Garner's costumes; while filming The Alaskans, he had already recited much of Garner's dialogue, for the Alaskan series frequently recycled Maverick scripts, changing only the names and locales.[19] He had also filmed a Maverick episode with Garner two seasons earlier, in which Moore played a different character, in a retooling of Richard Brinsley Sheridan's 1775 comedy of manners play The Rivals.[20] In the course of the story, Moore and Garner's characters switched names on a bet, with Moore consequently identifying himself as "Bret Maverick" through most of the episode.[20]
Moore's debut as Beau Maverick occurred in the first episode of the 1960–61 fourth season, "The Bundle from Britain", one of four episodes in which he shared screen time with cousin Bart (Jack Kelly). Robert Altman wrote and directed "Bolt from the Blue", an episode featuring Will Hutchins as a frontier lawyer similar to his character in the series Sugarfoot, and "Red Dog" found Beau mixed up with vicious bank robbers Lee Van Cleef and John Carradine. Kathleen Crowley was Moore's leading lady in two episodes ("Bullet for the Teacher" and "Kiz"), and others included Mala Powers, Roxane Berard, Fay Spain, Merry Anders, Andra Martin, and Jeanne Cooper. Upon leaving the series, Moore cited a decline in script quality since the Garner era as the key factor in his decision to depart; ratings for the show were also down.[21] Moore was originally slated to appear with both Jack Kelly and Robert Colbert in the series but by the time Colbert starred in his first episode, Moore had already left the series. Numerous early publicity stills of Kelly, Moore and Colbert posing together exist, however.
Moore was still under contract with Warners, who cast him in The Sins of Rachel Cade (1961), making love to a nun played by Angie Dickinson, and Gold of the Seven Saints (1961), supporting Clint Walker. He also went to Italy to make the adventure comedy Romulus and the Sabines (1961).
The Saint (1962–1969)[]
Lew Grade cast Moore as Simon Templar in a new adaptation of The Saint, based on the novels by Leslie Charteris. Moore said in an interview in 1963 that he wanted to buy the rights to Leslie Charteris's character and the trademarks. The television series was broadcast by ITV in the UK between 1962 and 1969, and its overseas success made Moore a household name. After the strong performance in the US of the first two series in first-run syndication, NBC picked up the show in 1966. By early 1967, Moore had achieved international stardom.[22] The series established his suave, quipping style which he carried forward to James Bond, and also saw him exhibit his trademark raised eyebrow. Francis Blagburn in The Telegraph writes,
- “The raised eyebrow is perhaps the hardest facial gesture to perfect in the gentleman's arsenal. Get it right and you give the impression of someone who is in total control; get it wrong and you look like, well, Dwayne 'The Rock' Johnson (and no one wants that). Sir Roger wrote the book in how to raise an eyebrow... as Simon Templar, he coolly infers that he knows, and he knows that you know that he knows.”
- ―Francis Blagburn[23]
The Saint ran from 1962 for six series and 118 episodes.[3][18] Moore went on to direct nine episodes of the later series, which moved into colour in 1967.[24] Several episodes were edited together to form the films, The Saint and the Fiction Makers (1968) and Vendetta for the Saint (1969).[25]
Post-Saint films and The Persuaders! (1969–1972)[]
He made two films immediately after the series ended: Crossplot (1969), a lightweight 'spy caper' movie, and the more challenging The Man Who Haunted Himself (1970). Directed by Basil Dearden, it gave Moore the opportunity to demonstrate greater versatility than the role of Simon Templar had allowed.[3] In 2004, Moore said of The Man Who Haunted Himself: "It was one of the few times I was allowed to act... Many say my best role was in The Man Who Haunted Himself. Being a modest actor, I won't disagree."[3]
Lew Grade lured Moore to star alongside Tony Curtis in The Persuaders!. The show featured the adventures of two millionaire playboys across Europe. Moore was paid the then-unheard-of sum of £1 million for a single series, making him the highest-paid television actor in the world.[18] Lew Grade claimed in his autobiography Still Dancing, that Moore and Curtis "didn't hit it off all that well".[26] Curtis refused to spend more time on set than was strictly necessary, while Moore was always willing to work overtime.[26] According to the DVD commentary, neither Roger Moore, an uncredited co-producer, nor Robert S. Baker, the credited producer, ever had a contract other than a handshake with Lew Grade.[26]
Despite its focus on the UK and US markets, The Persuaders! became more successful in other international markets.[27] On its premiere on the ITV network, it was beaten in the ratings by repeats of Monty Python's Flying Circus on BBC One. It did however place in the Top 20 most-viewed television series in the UK throughout 1971.[28] The lack of success in the US, where it had been sold to ABC, Curtis put down to its showing at the Saturday 10pm slot, but it was successful in continental Europe and Australia.[26] In Germany, where the series was aired under the name Die Zwei ("The Two"), it became a hit through especially amusing dubbing which only barely used translations of the original dialogue.
James Bond era (1973–1985)[]
Live and Let Die (1973)[]
Due to his commitment to several television shows, in particular The Saint, Roger Moore was unavailable for the James Bond films for a considerable time. His participation in The Saint was as actor, producer, and director, and he also became involved in developing the series The Persuaders!. In 1964, he made a guest appearance as James Bond in the comedy series Mainly Millicent.[29] Moore stated in his autobiography My Word Is My Bond (2008) that he had neither been approached to play the character in Dr. No, nor did he feel that he had ever been considered. Only after Sean Connery had declared in 1966 that he would not play Bond any longer did Moore become aware that he might be a contender for the role.[30] After George Lazenby was cast in 1969's On Her Majesty's Secret Service and Connery was enticed back to the role of Bond again for Diamonds Are Forever (1971), Moore did not consider the possibility until it seemed clear that Connery had stepped down as Bond for good. At that point, Moore was approached, and he accepted producer Albert Broccoli's offer in August 1972. In his autobiography, Moore writes that he had to cut his hair and lose weight for the role. Although he resented having to make those changes, he was finally cast as James Bond in Live and Let Die (1973).[30]
Moore then made Gold (1974), based on a novel by Wilbur Smith for producer Michael Klinger and director Peter R. Hunt. He was paid US$200,000 plus a percentage of the profits.[31]
The Man with the Golden Gun (1974)[]
Moore made his second Bond film, The Man with the Golden Gun (1974), which was a hit, though less successful than Live and Let Die. It featured Christopher Lee as the main antagonist. Also appearing are Britt Ekland, Herve Villechaize, and Maud Adams. He then made a comedy That Lucky Touch (1975) which was a box office disaster. Moore made an Italian-shot action film Street People (1976), then went back to South Africa for another Klinger-Hunt movie from a Wilbur Smith novel, Shout at the Devil (1976), which was successful in Britain, though less so in the US. Lee Marvin was a main cast member. Ian Holm was also featured, as well as Barbara Parkins.[citation needed]
The Spy Who Loved Me (1977)[]
Moore returned for a third outing as Bond in The Spy Who Loved Me (1977), which was a massive box-office success. It also starred Barbara Bach, and Richard Kiel in his first appearance as the villain, Jaws.[32] He returned to South Africa for a third action movie shot there, The Wild Geese (1978), produced by Euan Lloyd and directed by Andrew V. McLaglen. It was a sizeable hit in Britain and Europe but, like Shout at the Devil, less so in the US.[33] The cast featured Richard Burton, who had top billing, and Richard Harris.
Moore played the lead in Escape to Athena (1979) partly financed by Lew Grade. It was a heist adventure set in war-time Greece, and stars Telly Savalas and David Niven, and features mostly American character actors, including Elliott Gould, Stefanie Powers, Richard Roundtree, Sonny Bono, and Italian actress Claudia Cardinale. Roger Moore (with top billing) plays a charming former Austrian antiquities dealer turned crooked camp commandant, asked to guard Greek antiquities desired by the Third Reich, and also guard the collection of archaeologists who are being forced to work to find and recover these objects, but he has other plans for the treasure he guards and for the people under his watch.
Moonraker (1979)[]
Roger Moore in 1979
With the success of his fourth outing as Bond, Moonraker (1979), Moore followed it with an action film North Sea Hijack (1980) where Moore played a very un-Bond-like hero, opposite Anthony Perkins. The film was a box-office disappointment.[34]
Better received was The Sea Wolves (1980), another World War Two adventure which reunited many of the crew from The Wild Geese including Euan Lloyd and McLaglen. It was based on the true story of a March 1943 event in British India and Portuguese Goa, in which a group of retired members of the Calcutta Light Horse, colonelled by David Niven's character, assist regular British Army operatives, played by Moore and Gregory Peck, in destroying German ships in neutral Mormugao harbour, all the time surrounded by German spies and Indian nationalist intrigue. Trevor Howard, Patrick Macnee, and Barbara Kellerman also co-star, with a who's-who lineup of British character actors.
Moore was in two all-star comedies: Sunday Lovers (1980), which flopped at the box office, and The Cannonball Run (1981), which was a hit. The latter featured an ensemble cast, including Jackie Chan, Burt Reynolds, Dean Martin, Dom DeLuise, Sammy Davis Jr, and Farrah Fawcett.
For Your Eyes Only (1981)[]
Moore returned for his fifth outing as Bond in For Your Eyes Only (1981).
Octopussy (1983)[]
Following the film, For Your Eyes Only, Moore expressed a desire to leave the role, and other actors were screen tested including James Brolin, but Moore was eventually enticed back for Octopussy (1983).[35]
The circumstances around Octopussy's release were highly unusual in that another James Bond film was being released in the same year. The Non-Eon production Never Say Never Again which featured his predecessor Sean Connery returning to the role of Bond, although not canon to his previous Eon Bond films. This led to the media dubbing the one-time situation the "Battle of the Bonds".
He made a cameo as Chief Inspector Clouseau, posing as a famous movie star, in Curse of the Pink Panther[18] (1983) (for which he was credited as "Turk Thrust II"). Then he tried a thriller The Naked Face (1984), written and directed by Bryan Forbes.
A View to a Kill (1985)[]
Moore starred in his final Bond film, A View to a Kill (1985). He was the oldest actor to have played Bond – he was 45 in Live and Let Die, and 58 when he announced his retirement on 3 December 1985, having played the part for over 12 years. With 7 films Moore holds the record for playing Bond the most times in the Eon series but is tied with Sean Connery in number of times playing Bond when counting Connery's non-Eon appearance in Never Say Never Again (1983).[36]
Moore's Bond was very different from the version created by Ian Fleming. Screenwriters such as George MacDonald Fraser provided scenarios in which Moore was cast as a seasoned, debonair playboy who would always have a trick or gadget in stock when he needed it. This was designed to serve the contemporary taste of the 1970s. Moore's version of Bond was also known for his sense of humour and witty one liners as Moore himself said, "My personality is different from previous Bonds. I'm not that cold-blooded-killer type. Which is why I play it mostly for laughs."[37]
In 1987, he hosted Happy Anniversary 007: 25 Years of James Bond.[38]
Post-James Bond career (1986–2017)[]
Template:Center
Moore did not act on screen for five years after he stopped playing Bond; in 1990, he appeared in several films and in the writer-director Michael Feeney Callan's television series My Riviera and starred in the film Bed & Breakfast which was shot in 1989;[39] and also had a large role in the 1996 film The Quest; in 1997, he starred as the Chief in Spice World.[40] At the age of 73, he played a flamboyant homosexual man in Boat Trip (2002) with Cuba Gooding Jr.
The British satirical puppet show Spitting Image had a sketch in which their latex likeness of Moore, when asked to display emotions by an offscreen director, did nothing but raise an eyebrow; Moore himself stated that he thought the sketch was funny and took it in good humour. Indeed, he had always embraced the "eyebrows" gag wholeheartedly, and quipped that he "only had three expressions as Bond: right eyebrow raised, left eyebrow raised, and eyebrows crossed when grabbed by Jaws".[23] Spitting Image continued the joke, featuring a Bond film spoof, The Man with the Wooden Delivery, with Moore's puppet receiving orders from Margaret Thatcher to kill Mikhail Gorbachev. Other comedy shows at that time ridiculed Moore's acting, with Rory Bremner once claiming to have had a death threat from one of his irate fans following one such routine.[41]
In a nod to his 1960s TV show, Moore had a vocal cameo in The Saint (1997) as a radio newsreader as Simon Templar drives away at the end of the film. In the year 2000, he played the role of a secret agent in the Christmas special Victoria Wood with All the Trimmings, shown on BBC One on Christmas Day. Filming all his scenes in the London Eye, his mission was to eliminate another agent whose file photo looks like Pierce Brosnan. In 2002 he had a small cameo role in the German police procedural series Tatort (episode 506: "Schatten" – "Shadow", 28 July 2002) as a guest at the Bremen Sechs-Tagerennen.
In 2009, Moore appeared in an advertisements for the Post Office. In 2010, he provided the voice of a talking cat called Lazenby in the film Cats & Dogs: The Revenge of Kitty Galore which contained several references to, and parodies of, Bond films. In 2011, he co-starred in the film A Princess for Christmas with Katie McGrath and Sam Heughan, and in 2012, he took to the stage for a series of seven 'Evenings with' in UK theatres and, in November, guest-hosted Have I Got News for You.[42] A slightly thinner faced Moore contributed to a charity song in 2017. His last on-screen performance was in 2017, a brief appearance near the end of the remake of 'The Saint'.
In 2015, Moore was named one of GQ's 50 best-dressed British men.[43] In 2015, he read Hans Christian Andersen's "The Princess and The Pea" for the children's fairy tales app GivingTales in aid of UNICEF with other British celebrities, including Michael Caine, Ewan McGregor, Joan Collins, Stephen Fry, Joanna Lumley, David Walliams, Charlotte Rampling, Paul McKenna, and Michael Ball.[44]
Humanitarian work[]
Moore's friend Audrey Hepburn had impressed him with her work for UNICEF, and consequently he became a UNICEF Goodwill Ambassador in August 1991.[45] His character, Simon Templar, made a pitch for UNICEF near the end of "The Revolution Racket",[46] airing 5 November 1964. He was the voice of Father Christmas or 'Santa' in the 2004 UNICEF cartoon The Fly Who Loved Me.[47]
Personal life[]
Doorn Van Steyn[]
In 1946, aged 18, Moore married a fellow RADA student, the actress and ice skater Doorn Van Steyn (born Lucy Woodard), who was six years his senior;[48] Moore and Van Steyn lived in Streatham with her family, but tension over money matters and her lack of confidence in his acting ability took their toll on the relationship,[49] during which he allegedly suffered domestic abuse.[50]
Dorothy Squires[]
In 1952, Moore met the Welsh singer Dorothy Squires, who was 12 years his senior, and Van Steyn and Moore divorced the following year.[51] Squires and Moore were married in New York.[51] They lived in Bexley, Kent, after their wedding.[52]
They moved to the United States in 1954 to develop their careers, but tension developed in their marriage due to their age difference and Moore's infatuation with starlet Dorothy Provine, and they moved back to the United Kingdom in 1961, where they resided in Sutton Coldfield, near Birmingham.[51] Squires suffered a series of miscarriages during their marriage, and Moore later said the outcome of their marriage might have been different if they had been able to have children.[51]
In their tempestuous relationship, Squires smashed a guitar over his head, and after learning of his affair with the Italian actress Luisa Mattioli, who became Moore's third wife, Moore said, "She threw a brick through my window. She reached through the glass and grabbed my shirt and she cut her arms doing it...The police came and they said, 'Madam, you're bleeding' and she said, 'It's my heart that's bleeding'."[48] Squires intercepted letters from Mattioli to Moore and planned to include them in her autobiography, but the couple won injunctions against the publication in 1977, which led Squires to unsuccessfully sue them for loss of earnings.[51] The numerous legal cases launched by Squires led her to be declared a vexatious litigant in 1987.[53] Moore paid Squires's hospital bills after her cancer treatment in 1996; she died in 1998.[54][55]
Luisa Mattioli[]
Moore at the 1989 Cannes Film Festival with wife Luisa Mattioli
In 1961, while filming The Rape of the Sabine Women in Italy, Moore left Squires for the Italian actress Luisa Mattioli.[55] Squires refused to accept their separation, and sued Moore for loss of conjugal rights, but Moore refused the court's order to return to Squires in 28 days.[51][55] Squires also smashed windows at a house in France where Moore and Mattioli were living, and unsuccessfully sued actor Kenneth More for libel, as Kenneth More had introduced Moore and Mattioli at a charity event as "Mr Roger Moore and his wife".[55] Moore and Mattioli lived together until 1969, when Squires finally granted him a divorce, after they had been separated for seven years.[54] At Moore's and Mattioli's marriage in April 1969 at the Caxton Hall in Westminster, London, a crowd of 600 people was outside, with women screaming his name.[56]
Moore had three children with Mattioli: actress-daughter Deborah (born 1963) and two sons, Geoffrey and Christian.[57] Geoffrey is also an actor, and appeared alongside his father in the films Sherlock Holmes in New York (1976) and Fire, Ice and Dynamite (1990). In later life, he co-founded Hush Restaurant in Mayfair, London, with Jamie Barber.[58] Geoffrey and his wife Loulou have two daughters. Moore's younger son, Christian, is a film producer.[59]
Kristina "Kiki" Tholstrup[]
Moore and Mattioli separated in 1993 after Moore developed feelings for a Swedish-born Danish socialite, Kristina "Kiki" Tholstrup.[55] Moore later described his prostate cancer diagnosis in 1993 as "life-changing", which led him to reassess his life and marriage.[57] Mattioli and Tholstrup had long been friends, but Mattioli was scathing of her in the book she subsequently wrote about her relationship with Moore, Nothing Lasts Forever, describing how she felt betrayed by Tholstrup and discarded by Moore.[55][57]
Moore remained silent on his divorce from Mattioli, later saying that he did not wish to hurt his children by "engaging in a war of words".[57] Moore's children refused to speak to him for a period after the divorce, but they were later reconciled with their father.[57] Mattioli refused to grant Moore a divorce until 2000, when a £10 million settlement was agreed.[60] Moore subsequently married Tholstrup in 2002.[57] Moore said that he loved Tholstrup as she was "organised", "serene", "loving", and "calm", saying, "I have a difficult life. I rely on Kristina totally. When we are travelling for my job, she is the one who packs. Kristina takes care of all that".[57] Moore also said that his marriage to Tholstrup was "a tranquil relationship, there are no arguments".[61] Tholstrup had a daughter, Christina Knudsen, from a previous relationship; Knudsen described her stepfather as a positive influence, saying, "I was in difficult relationships but that all changed" when her mother met Moore. Christina Knudsen died from cancer on 25 July 2016, at the age of 47; Moore posted on Twitter, "We are heartbroken" and "We were all with her, surrounding her with love, at the end".[62][63][64]
Political views[]
On politics, Moore stated he was a conservative and thought that conservatism is the way to run a country.[65] Moore was described as a "lifelong" supporter of the Conservative Party and endorsed the party during the 2001 UK general election.[66][67][68] However, Moore also expressed a reluctance to be seen as an overtly political figure and felt his work with UNICEF meant that he could not involve himself directly in politics.[67]
In 2011, Moore expressed his support to Conservative Prime Minister David Cameron regarding his policy on the European Union, stating: "I think he's doing absolutely wonderfully well, despite the opposition from many members of his own party. Traitors, I call them. I mean any hardliner within the Conservative Party who speaks out against their leader. You should support your leader."[69]
Moore also expressed support for Britain keeping the pound sterling as its national currency and was glad the British government had not joined the single EU currency, stating: "I would have been very upset if we'd had to take the Queen off our currency. They'd probably have to take her off the stamps and everything. I am British and I'm fiercely independent. And I think we should be independent, as Sean Connery is about Scotland."[70]
In 2015, Moore criticised what he regarded as excessive political correctness within the film industry and felt that rewriting James Bond's sexuality, gender or ethnicity would be a mistake, arguing "it is not about being homophobic or, for that matter, racist – it is simply about being true to the character."[71][72] Despite his conservative politics, Moore retained membership of the entertainment and media trade union BECTU (now part of Prospect) until his death, having joined as an apprentice animation technician before his acting career took off. At his death, he was the union's longest-tenured member.[73] In 2007, Moore also voiced his support to workers from the Cadbury chocolate factory at Keynsham who were protesting against the plant's closure.[74]
Tax exile[]
Moore became a tax exile from the United Kingdom in 1978, originally to Switzerland, and divided his year between his four homes: an apartment in Monte Carlo, Monaco; a holiday house in the coastal Tuscan town of Castiglione della Pescaia, a chalet in Crans-Montana, Switzerland; and a home in the south of France.[61][75] Moore became a resident of Monaco, having been appointed a Goodwill Ambassador of Monaco by Prince Albert II for his efforts in internationally promoting and publicising the principality.[76] Moore was scathing of the Russian population in Monaco, saying, "I'm afraid we're overstuffed with Russians. All the restaurant menus are in Russian now."[75]
Moore was vocal in his defence of his tax exile status, saying that in the 1970s, with taxes levied on top earners under the Labour government of James Callaghan, he had been urged by his "accountants, agents, and lawyers" to move abroad because, "At that point we were taxed up to 98% on unearned income, so you would never be able to save enough to ensure that you had any sort of livelihood if you didn't work."[48] Moore said in 2011 that his decision to live abroad was "not about tax. That's a serious part of it. I come back to England often enough not to miss it, to see the changes, to find some of the changes good...I paid my taxes at the time that I was earning a decent income, so I've paid my due".[77]
Illness and death[]
Moore had a series of diseases during his childhood, including chickenpox, measles, mumps,[78] double pneumonia[79] and jaundice.[80] He had an infection of his foreskin at the age of eight and underwent a circumcision, and had his appendix, tonsils, and adenoids removed.[81]
Moore was a long-term sufferer of kidney stones[82] and as a result was briefly hospitalised during the making of Live and Let Die in 1973[83] and again whilst filming the 1979 film Moonraker.[84]
In 1993, Moore was diagnosed with prostate cancer and underwent successful treatment for the disease.[85]
In 2003, Moore collapsed on stage while appearing on Broadway,[86] and was fitted with a pacemaker to treat a potentially deadly slow heartbeat.[75] He was diagnosed with type 2 diabetes in 2013.[75] Some years before his final cancer illness, a tumour spot was found in the liver. Then, in 2017, during his cancer treatment period, he had a fall which badly injured the collarbone.[87][88]
The grave of Roger Moore in Monaco Cemetery
Moore's family announced his death in Switzerland, on 23 May 2017, from cancer in his lung and liver.[88][89][90] He died at his home in Crans-Montana, in the presence of his family. Former 007 actors Sean Connery, George Lazenby, Timothy Dalton and Pierce Brosnan, and then-current 007 Daniel Craig paid tribute to Moore. Moore is buried in Monaco Cemetery.[91]
Royal circles[]
Moore had friendships with some of Denmark's royal family; Prince Joachim and his then-wife Alexandra, Countess of Frederiksborg invited Moore and his wife Kiki to attend the christening of their youngest son, Prince Felix. In 2004 he attended the Wedding of Frederik, Crown Prince of Denmark, and Mary Donaldson. On 24 May 2008, Moore and his wife attended the wedding of Prince Joachim to his French fiancée Marie Cavallier.[citation needed]
Moore also had a long-standing friendship with Princess Lilian of Sweden, whom he first met on a visit to Stockholm for UNICEF. Moore's wife Kristina, who was born in Sweden, was already a friend of Princess Lilian's through mutual friends. In his autobiography, Moore recalled meeting the princess for tea and dinners whenever his wife and he visited Stockholm. He spoke of his recollections at the princess's memorial service at St Peter and St Sigfrid's Church in Stockholm, on 8 September 2013.[11][92]
On 1 and 2 July 2011, Moore and his wife attended the wedding of Prince Albert of Monaco and Charlene Wittstock.[93]
Awards and legacy[]
Template:Quote box Moore was appointed Commander of the Order of the British Empire (CBE) in the 1999 New Year Honours[94] and was promoted to Knight Commander of the Order of the British Empire (KBE) in the 2003 Birthday Honours for charitable services, especially UNICEF and latterly Kiwanis International, which had dominated his public life for more than a decade.[95] On being knighted, Moore said that the citation "meant far more to me than if I had got it for acting... I was proud because I received it on behalf of UNICEF as a whole and for all it has achieved over the years".[96]
On 11 October 2007, three days before he turned 80, Moore was awarded a star on the Hollywood Walk of Fame for his work on television and in film. Attending the ceremony were family, friends, and Richard Kiel, with whom he had acted in The Spy Who Loved Me and Moonraker. Moore's star was the 2,350th star installed, and is appropriately located at 7007 Hollywood Boulevard.[97]
On 28 October 2008, the French government appointed Moore a Commander of the Ordre des Arts et des Lettres.[98] On 21 November 2012, Moore was awarded an honorary doctorate from the University of Hertfordshire for his outstanding contributions to the UK film and television industry for over 50 years, in particular film and television productions in Hertfordshire.[99]
After his death, the Roger Moore Stage was opened at Pinewood Studios at a ceremony held in October 2017 to celebrate his life and work.[100] His wife and family were in attendance along with Bond producers Michael G Wilson and Barbara Broccoli, and guests at the event included Joan Collins, Michael Caine, Stephen Fry, Tim Rice and Stefanie Powers.[100]
In the 2018 film My Dinner with Hervé, Moore was portrayed by actor Mark Umbers.
For his charity work
- 2012: UNICEF's UK Lifetime Achievement Award[101]
- 2007: Dag Hammarskjöld Inspiration Award (UNICEF)[102]
- 2004: UNICEF's Audrey Hepburn Humanitarian Award[103]
- 2003: German Federal Cross of Merit (Bundesverdienstkreuz) for his UNICEF work[49]Template:Rp[104]
- 2003: Knight Commander of the Order of the British Empire (KBE)
- 1999: Commander of the Order of the British Empire (CBE)
Lifetime achievements awards
- 2008: Commander of the French National Order of Arts and Letters (Ordre national des Arts et des Lettres)
- 2007: Hollywood Walk of Fame
- 2004: TELEKAMERA ("Tele Tydzień" Lifetime Achievement Award, Poland)
- 2002: Monte Carlo TV Festival (Lifetime Achievement Award)
- 2001: Lifetime achievement award (Filmfestival, Jamaica)
- 1997: Palm Springs film festival, USA, Lifetime Achievement Award
- 1995: TELE GATTO (Italian TV; Lifetime Achievement Award)
- 1991: GOLDEN CAMERA (German TV; lifetime achievement award)
- 1990: BAMBI (Lifetime Achievement Award from the German magazine BUNTE)
For his acting
- 1981: OTTO (Most popular Film Star; from German Magazine BRAVO)
- 1980: Golden Globe Henrietta Award for World Film Favorite – Male.[105]
- 1980: Saturn Award (Most Popular International Performer)
- 1973: BAMBI (shared with Tony Curtis for "The Persuaders", from the German magazine BUNTE)
- 1973: BEST ACTOR IN TV, award from the French magazine TELE-7-JOURS, shared with Tony Curtis for "The Persuaders"
- 1967: ONDAS-AWARD (Spanish TV for "The Saint")
- 1967: OTTO (Most popular TV-star for "The Saint"; from German magazine BRAVO)
In popular culture[]
- Roger Moore is contentiously credited with inspiring the Walls Magnum ice cream. In the 1960s, he reportedly said that his one wish would be for a choc ice on a stick. Walls created this product and sent one to Moore. They later launched the Magnum in 1989, which is now the world's top-selling ice cream brand.[106]
Filmography[]
Film roles[]
Year | Title | Role | Notes |
---|---|---|---|
1945 | Perfect Strangers | Sailor | Uncredited |
1945 | Caesar and Cleopatra | Roman Soldier | Uncredited |
1946 | Gaiety George | Audience Member | Uncredited |
1946 | Piccadilly Incident | Guest at Pearson's Table | Uncredited |
1949 | Paper Orchid | Extra | Uncredited |
1949 | Trottie True | Stage Door Johnny | Uncredited |
1949 | The Interrupted Journey | Soldier in Paddington Café | Uncredited |
1950 | Drawing-Room Detective | Extra | Uncredited |
1951 | One Wild Oat | Extra | Uncredited |
1951 | Honeymoon Deferred | Ornithologist on Train | Uncredited |
1954 | The Last Time I Saw Paris | Paul | [38] |
1955 | Interrupted Melody | Cyril Lawrence | |
1955 | The King's Thief | Jack | [38] |
1956 | Diane | Prince Henri | [38] |
1959 | The Miracle | Capt. Michael Stuart | [38] |
1961 | The Sins of Rachel Cade | Paul Wilton | [38] |
1961 | Gold of the Seven Saints | Shaun Garrett | [38] |
1962 | Romulus and the Sabines | Romulus | [38] |
1962 | No Man's Land | Enzo Prati | |
1968 | The Fiction Makers | Simon Templar | |
1969 | Vendetta for the Saint | Simon Templar | [38] |
1969 | Crossplot | Gary Fenn | [38] |
1970 | The Man Who Haunted Himself | Harold Pelham | [38] |
1973 | Live and Let Die | James Bond | [38] |
1974 | Gold | Rod Slater | [38] |
1974 | The Man with the Golden Gun | James Bond | [38] |
1975 | That Lucky Touch | Michael Scott | [38] |
1976 | Street People | Ulysses | [38] |
1976 | Shout at the Devil | Sebastian Oldsmith | [38] |
1977 | Sherlock Holmes in New York | Sherlock Holmes | [38] |
1977 | The Spy Who Loved Me | James Bond | [38] |
1978 | The Wild Geese | Lieutenant Shaun Fynn | [38] |
1979 | Escape to Athena | Major Otto Hecht | [38] |
1979 | Moonraker | James Bond | [38] |
1979 | North Sea Hijack | Rufus Excalibur ffolkes | [38] |
1980 | The Sea Wolves | Captain Gavin Stewart | [38] |
1980 | Sunday Lovers | Harry Lindon | [38] |
1981 | The Cannonball Run | Seymour Goldfarb | [38] |
1981 | For Your Eyes Only | James Bond | [38] |
1983 | Octopussy | James Bond | [38] |
1983 | Curse of the Pink Panther | Chief Insp. Jacques Clouseau | [38] |
1984 | The Naked Face | Dr. Judd Stevens | [38] |
1985 | A View to a Kill | James Bond | [38] |
1987 | The Magic Snowman | Lumi Ukko, the Snowman | Voice role |
1990 | Fire, Ice and Dynamite | Sir George Windsor | [38] |
1990 | Bullseye! | Sir John Bevistock | [38] |
1992 | Bed & Breakfast | Adam | [38] |
1995 | The Man Who Wouldn't Die | Thomas Grace | Also executive producer[38] |
1996 | The Quest | Lord Edgar Dobbs | [38] |
1997 | Spice World | The Chief | [38] |
1997 | The Saint | Radio Announcer | Voice role |
2001 | The Enemy | Supt. Robert Ogilvie | [38] |
2002 | On Our Own Vesna | Roger Moore | |
2002 | Boat Trip | Lloyd Faversham | [38] |
2004 | The Fly Who Loved Me | Father Christmas | Voice role |
2005 | Here Comes Peter Cottontail: The Movie | January Q. Irontail | Voice role |
2008 | Agent Crush | Burt Gasket | Voice role |
2009 | The Wild Swans | Archbishop | Voice role |
2010 | Cats & Dogs: The Revenge of Kitty Galore | Tab Lazenby | Voice role |
2011 | The Lighter | George Boreman | |
2011 | A Princess for Christmas | Edward, Duke of Castlebury | [107] |
2013 | Incompatibles | Roger Moore | |
2016 | The Carer | Roger Moore | |
2017 | The Saint | Jasper | [38] |
Television roles[]
Year | Title | Role | Notes |
---|---|---|---|
1949 | The Governess | Bob Drew | TV film |
1949 | A House in the Square | John Anstruther | TV film |
1953 | Robert Montgomery Presents | French Diplomat | Episode: "World by the Tail" |
1953 | The Clay of Kings | Josiah Wedgwood | TV film |
1953 | Julius Caesar | Unknown | TV film |
1953 | Black Chiffon | Unknown | TV film |
1956 | Ford Star Jubilee | Billy Mitchell | Episode: "This Happy Breed" |
1956 | Goodyear Playhouse | Patrick Simmons | Episode: "A Murder Is Announced" |
1957 | Assignment Foreign Legion | Legionnaire Paul Harding | Episode: "The Richest Man in the Legion" |
1957 | Lux Video Theatre | Gavin | Episode: "The Taggart Light" |
1957 | NBC Matinee Theater | Randolph Churchill | Episode: "The Remarkable Mr. Jerome" |
1958–1959 | Ivanhoe | Ivanhoe | All 39 episodes[38] |
1959–1960 | The Alaskans | Silky Harris | All 37 episodes |
1959–1961 | Maverick | Beau Maverick | 16 episodes |
1959 | The Third Man | Jimmy Simms | Episode: "The Angry Young Man" |
1959 | Alfred Hitchcock Presents | Inspector Benson | Episode: "The Avon Emeralds" |
1961 | 77 Sunset Strip | Radio Announcer | Voice; Episode: "Vacation with Pay" |
1961 | The Roaring 20's | 14 Karat John | 2 episodes |
1962–1969 | The Saint | Simon Templar | All 118 episodes[38] |
1964 | Mainly Millicent | James Bond | Episode: "17 July 1964" |
1965 | The Trials of O'Brien | Roger Taney | Episode: "What Can Go Wrong" |
1971–1972 | The Persuaders! | Brett Sinclair | All 24 episodes[38] |
1999 | The Dream Team | Desmond Heath | 4 episodes |
2002 | Alias | Edward Poole | Episode: "The Prophecy" |
2002 | Tatort | Roger Moore | Episode: "Schatten" |
2005 | Foley & McColl: This Way Up | Butler | TV film |
2014 | The Life of Rock with Brian Pern | George Lazenby | Episode: "The Day of the Triffids" |
Publications[]
Moore's book about the filming of Live and Let Die, based on his diaries, titled Roger Moore as James Bond: Roger Moore's Own Account of Filming Live and Let Die, was published in London in 1973, by Pan Books.[108] The book includes an acknowledgment to Sean Connery, with whom Moore was friends for many years: "I would also like to thank Sean Connery – with whom it would not have been possible."
Moore's autobiography My Word is My Bond (Template:ISBN) was published by Collins in the US, in November 2008 and by Michael O'Mara Books Ltd in the UK, on 2 October 2008 (Template:ISBN).[109]
On 16 October 2012, Bond on Bond was published to tie in with the 50th anniversary of the James Bond films. The book, with many pictures, is based on Moore's own memories, thoughts, and anecdotes about all things 007, with some of the profits of the book going to UNICEF.[110]
Books[]
- Moore, Roger (1973). Roger Moore as James Bond: Roger Moore's Own Account of Filming Live and Let Die. ISBN 9780330236539.
- Moore, Roger (2008). My Word Is My Bond: The Autobiography. ISBN 9781843173878.
- Moore, Roger (2014). Last Man Standing: Tales from Tinseltown. ISBN 9781782432074. "(published as One Lucky Bastard in the United States)"
- (2017) À bientôt …. ISBN 9781782438618.
References[]
- ↑ "Roger Moore, the longest-serving Bond" CNN, 23 May 2017; Retrieved 23 May 2017
- ↑ "Sir Roger Moore: 'Sir Sean Connery is the best BondTemplate:'" BBC News, 10 October 2012; Retrieved 23 May 2017
- ↑ 3.0 3.1 3.2 3.3 3.4 3.5 Roger Moore obituary: the star who gave James Bond a martini-dry wit. BFI.
- ↑ Roger Moore Biography (1927–). FilmReference.com.
- ↑ 5.0 5.1 5.2 Sellers, Robert. "Sir Roger Moore: Remembering the quintessential English actor forever linked with James Bond and The Saint", The Independent, 23 May 2017.
- ↑ Genealogy Reviews: Families of the Famous: James Bond.
- ↑ At war again. Dr Challoner's Grammar School.
- ↑ 8.0 8.1 8.2 "Obituary: Sir Roger Moore", BBC News, 23 May 2017. (in en-GB)
- ↑ Template:London Gazette
- ↑ How it all began.... Combined Services Entertainment.
- ↑ 11.0 11.1 Moore, Roger (2014). Last Man Standing: Tales from Tinseltown. London: Michael O'Mara Books. ISBN 978-1-78243-207-4.
- ↑ "Roger Moore's life and career in pictures: from knitwear model to 007", The Telegraph.
- ↑ "ERROL FLYNN ENDS PACT AT WARNERS", The New York Times, 20 March 1954.
- ↑ Interrupted Melody. American Film Institute.
- ↑ Maltin, Leonard (2005). Leonard Maltin's Classic Movie Guide. Penguin. ISBN 9780698197299.
- ↑ Ivanhoe (1958). ScreenOnline. BFI.
- ↑ Ivanhoe at Television Heaven.
- ↑ 18.0 18.1 18.2 18.3 18.4 Sobczynski, Peter. Roger Moore: 1927–2017.
- ↑ Moore answer to a June 2007 question on his official website.
- ↑ 20.0 20.1 MAVERICK Mondays: "The Rivals" (1959). The Horn Section. Blogspot (8 September 2014).
- ↑ 8 Cancelled TV Shows That Got A 'Twin Peaks'-Style Revival (8 October 2014).
- ↑ "From Playing James Bond to His Humanitarian Work: Roger Moore's Life in Pictures", People.
- ↑ 23.0 23.1 "The quintessential Englishman: what we learned from Sir Roger Moore", The Telegraph.
- ↑ (2018) Obituaries in the Performing Arts, 2017. McFarland, page 284.
- ↑ Gaughan, Gavin. "Harry Harrison: Writer of sci-fi novels who created the popular anti-hero the Stainless Steel Rat", The Independent, 25 August 2012. “...it was made as a two-part story in the ATV/ITC series starring Roger Moore (and, edited, released in cinemas outside Britain), but Harrison was not credited or remunerated for this; it had been "for a lump sum, no royalties".”
- ↑ 26.0 26.1 26.2 26.3 Malone, Aubrey (20 September 2013). The Defiant One:A Biography of Tony Curtis, page 149. ISBN 978-0786475957.
- ↑ The Persuaders! at Television Heaven --[[ ---------------------------------- Lua module implementing the Template loop detected: Template:Webarchive template. A merger of the functionality of three templates: Template:Wayback, Template:Webcite and Template:Cite archives ]] --[[--------------------------< D E P E N D E N C I E S >------------------------------------------------------ ]] require('Module:No globals'); local getArgs = require ('Module:Arguments').getArgs; --[[--------------------------< F O R W A R D D E C L A R A T I O N S >-------------------------------------- ]] local categories = {}; -- category names local config = {}; -- global configuration settings local digits = {}; -- for i18n; table that translates local-wiki digits to western digits local err_warn_msgs = {}; -- error and warning messages local excepted_pages = {}; local month_num = {}; -- for i18n; table that translates local-wiki month names to western digits local prefixes = {}; -- service provider tail string prefixes local services = {}; -- archive service provider data from local s_text = {}; -- table of static text strings used to build final rendering local uncategorized_namespaces = {}; -- list of namespaces that we should not categorize local uncategorized_subpages = {}; -- list of subpages that should not be categorized --[[--------------------------< P A G E S C O P E I D E N T I F I E R S >---------------------------------- ]] local non_western_digits; -- boolean flag set true when data.digits.enable is true local this_page = mw.title.getCurrentTitle(); local track = {}; -- Associative array to hold tracking categories local ulx = {}; -- Associative array to hold template data --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Populates numbered arguments in a message string using an argument table. ]] local function substitute (msg, args) return args and mw.message.newRawMessage (msg, args):plain() or msg; end --[[--------------------------< tableLength >----------------------- Given a 1-D table, return number of elements ]] local function tableLength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form D; if only link is provided, returns a wikilink in the form L; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display, no_link) if nil == no_link then if link and ( ~= link) then if display and ( ~= display) then return table.concat ({'', display, ''}); else return table.concat ({'', link, ''}); end end return display or ; -- link not set so return the display text else -- no_link if display and ( ~= display) then -- if there is display text return display; -- return that else return link or ; -- return the target article name or empty string end end end --[[--------------------------< createTracking >----------------------- Return data in track[] ie. tracking categories ]] local function createTracking() if not excepted_pages[this_page.fullText] then -- namespace:title/fragment is allowed to be categorized (typically this module's / template's testcases page(s)) if uncategorized_namespaces[this_page.nsText] then return ; -- this page not to be categorized so return empty string end for _,v in ipairs (uncategorized_subpages) do -- cycle through page name patterns if this_page.text:match (v) then -- test page name against each pattern return ; -- this subpage type not to be categorized so return empty string end end end local out = {}; if tableLength(track) > 0 then for key, _ in pairs(track) do -- loop through table table.insert (out, make_wikilink (key)); -- and convert category names to links end end return table.concat (out); -- concat into one big string; empty string if table is empty end --[[--------------------------< inlineError >----------------------- Critical error. Render output completely in red. Add to tracking category. This function called as the last thing before abandoning this module ]] local function inlineError (msg, args) track[categories.error] = 1 return table.concat ({ 'Error in ', -- open the error message span config.tname, -- insert the local language template name ' template: ', substitute (msg, args), -- insert the formatted error message '.', -- close the span createTracking() -- add the category }) end --[[--------------------------< inlineRed >----------------------- Render a text fragment in red, such as a warning as part of the final output. Add tracking category. ]] local function inlineRed(msg, trackmsg) if trackmsg == "warning" then track[categories.warning] = 1; elseif trackmsg == "error" then track[categories.error] = 1; end return '' .. msg .. '' end --[[--------------------------< base62 >----------------------- Convert base-62 to base-10 Credit: https://de.wikipedia.org/wiki/Modul:Expr ]] local function base62( value ) local r = 1 -- default return value is input value is malformed if value:match ('%W') then -- value must only be in the set [0-9a-zA-Z] return; -- nil return when value contains extraneous characters end local n = #value -- number of characters in value local k = 1 local c r = 0 for i = n, 1, -1 do -- loop through all characters in value from ls digit to ms digit c = value:byte( i, i ) if c >= 48 and c <= 57 then -- character is digit 0-9 c = c - 48 elseif c >= 65 and c <= 90 then -- character is ascii a-z c = c - 55 else -- must be ascii A-Z c = c - 61 end r = r + c * k -- accumulate this base62 character's value k = k * 62 -- bump for next end -- for i return r end --[[--------------------------< D E C O D E _ D A T E >-------------------------------------------------------- Given a date string, return it in iso format along with an indicator of the date's format. Except that month names must be recognizable as legitimate month names with proper capitalization, and that the date string must match one of the recognized date formats, no error checking is done here; return nil else ]] local function decode_date (date_str) local patterns = { ['dmy'] = {'^(%d%d?) +([^%s%d]+) +(%d%d%d%d)$', 'd', 'm', 'y'}, -- %a does not recognize unicode combining characters used by some languages ['mdy'] = {'^([^%s%d]+) (%d%d?), +(%d%d%d%d)$', 'm', 'd', 'y'}, ['ymd'] = {'^(%d%d%d%d) +([^%s%d]+) (%d%d?)$', 'y', 'm', 'd'}, -- not mos compliant at en.wiki but may be acceptible at other wikis }; local t = {}; if non_western_digits then -- this wiki uses non-western digits? date_str = mw.ustring.gsub (date_str, '%d', digits); -- convert this wiki's non-western digits to western digits end if date_str:match ('^%d%d%d%d%-%d%d%-%d%d$') then -- already an iso format date, return western digits form return date_str, 'iso'; end for k, v in pairs (patterns) do local c1, c2, c3 = mw.ustring.match (date_str, patterns[k][1]); -- c1 .. c3 are captured but we don't know what they hold if c1 then -- set on match t = { -- translate unspecified captures to y, m, and d [patterns[k][2]] = c1, -- fill the table of captures with the captures [patterns[k][3]] = c2, -- take index names from src_pattern table and assign sequential captures [patterns[k][4]] = c3, }; if month_num[t.m] then -- when month not already a number t.m = month_num[t.m]; -- replace valid month name with a number else return nil, 'iso'; -- not a valid date form because month not valid end return mw.ustring.format ('%.4d-%.2d-%.2d', t.y, t.m, t.d), k; -- return date in iso format end end return nil, 'iso'; -- date could not be decoded; return nil and default iso date end --[[--------------------------< makeDate >----------------------- Given year, month, day numbers, (zero-padded or not) return a full date in df format where df may be one of: mdy, dmy, iso, ymd on entry, year, month, day are presumed to be correct for the date that they represent; all are required in this module, makeDate() is sometimes given an iso-format date in year: makeDate (2018-09-20, nil, nil, df) this works because table.concat() sees only one table member ]] local function makeDate (year, month, day, df) local format = { ['dmy'] = 'j F Y', ['mdy'] = 'F j, Y', ['ymd'] = 'Y F j', ['iso'] = 'Y-m-d', }; local date = table.concat ({year, month, day}, '-'); -- assemble year-initial numeric-format date (zero padding not required here) if non_western_digits then -- this wiki uses non-western digits? date = mw.ustring.gsub (date, '%d', digits); -- convert this wiki's non-western digits to western digits end return mw.getContentLanguage():formatDate (format[df], date); end --[[--------------------------< I S _ V A L I D _ D A T E >---------------------------------------------------- Returns true if date is after 31 December 1899 (why is 1900 the min year? shouldn't the internet's date-of-birth be min year?), not after today's date, and represents a valid date (29 February 2017 is not a valid date). Applies Gregorian leapyear rules. all arguments are required ]] local function is_valid_date (year, month, day) local days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; local month_length; local y, m, d; local today = os.date ('*t'); -- fetch a table of current date parts if not year or == year or not month or == month or not day or == day then return false; -- something missing end y = tonumber (year); m = tonumber (month); d = tonumber (day); if 1900 > y or today.year < y or 1 > m or 12 < m then -- year and month are within bounds TODO: 1900? return false; end if (2==m) then -- if February month_length = 28; -- then 28 days unless if (0==(y%4) and (0~=(y%100) or 0==(y%400))) then -- is a leap year? month_length = 29; -- if leap year then 29 days in February end else month_length=days_in_month[m]; end if 1 > d or month_length < d then -- day is within bounds return false; end -- here when date parts represent a valid date return os.time({['year']=y, ['month']=m, ['day']=d, ['hour']=0}) <= os.time(); -- date at midnight must be less than or equal to current date/time end --[[--------------------------< decodeWebciteDate >----------------------- Given a URI-path to Webcite (eg. /67xHmVFWP) return the encoded date in df format returns date string in df format - webcite date is a unix timestamp encoded as bae62 or the string 'query' ]] local function decodeWebciteDate(path, df) local dt = {}; local decode; dt = mw.text.split(path, "/") -- valid URL formats that are not base62 -- http://www.webcitation.org/query?id=1138911916587475 -- http://www.webcitation.org/query?url=http..&date=2012-06-01+21:40:03 -- http://www.webcitation.org/1138911916587475 -- http://www.webcitation.org/cache/73e53dd1f16cf8c5da298418d2a6e452870cf50e -- http://www.webcitation.org/getfile.php?fileid=1c46e791d68e89e12d0c2532cc3cf629b8bc8c8e if dt[2]:find ('query', 1, true) or dt[2]:find ('cache', 1, true) or dt[2]:find ('getfile', 1, true) or tonumber(dt[2]) then return 'query'; end decode = base62(dt[2]); -- base62 string -> exponential number if not decode then return nil; -- nil return when dt[2] contains characters not in %w end dt = os.date('*t', string.format("%d", decode):sub(1,10)) -- exponential number -> text -> first 10 characters (a unix timestamp) -> a table of date parts decode = makeDate (dt.year, dt.month, dt.day, 'iso'); -- date comparisons are all done in iso format with western digits if non_western_digits then -- this wiki uses non-western digits? decode = mw.ustring.gsub (decode, '%d', digits); -- convert this wiki's non-western digits to western digits end return decode; end --[[--------------------------< decodeWaybackDate >----------------------- Given a URI-path to Wayback (eg. /web/20160901010101/http://example.com ) or Library of Congress Web Archives (eg. /all/20160901010101/http://example.com) or UK Government Web Archive (eg. /ukgwa/20160901010101/http://example.com or /tna/20160901010101/http://example.com) return the formatted date eg. "September 1, 2016" in df format Handle non-digits in snapshot ID such as "re_" and "-" and "*" returns two values: first value is one of these: valid date string in df format - wayback date is valid (including the text string 'index' when date is '/*/') empty string - wayback date is malformed (less than 8 digits, not a valid date) nil - wayback date is '/save/' or otherwise not a number second return value is an appropriate 'message' may or may not be formatted ]] local function decodeWaybackDate(path, df) local msg, snapdate; snapdate = path:gsub ('^/web/', ):gsub ('^/all/', ):gsub ('^/ukgwa/', ):gsub ('^/tna/', ):gsub ('^/', ); -- remove leading /web/, /all/, /ukgwa/, /tna/, or / snapdate = snapdate:match ('^[^/]+'); -- get timestamp if snapdate == "*" then -- eg. /web/*/http.., etc. return 'index'; -- return indicator that this url has an index date end snapdate = snapdate:gsub ('%a%a_%d?$', ):gsub ('%-', ); -- from date, remove any trailing "re_", dashes msg = ; if snapdate:match ('%*$') then -- a trailing '*' causes calendar display at archive .org snapdate = snapdate:gsub ('%*$', ); -- remove so not part of length calc later msg = inlineRed (err_warn_msgs.ts_cal, 'warning'); -- make a message end if not tonumber(snapdate) then return nil, 'ts_nan'; -- return nil (fatal error flag) and message selector end local dlen = snapdate:len(); if dlen < 8 then -- we need 8 digits TODO: but shouldn't this be testing for 14 digits? return , inlineRed (err_warn_msgs.ts_short, 'error'); -- return empty string and error message end local year, month, day = snapdate:match ('(%d%d%d%d)(%d%d)(%d%d)'); -- no need for snapdatelong here if not is_valid_date (year, month, day) then return , inlineRed (err_warn_msgs.ts_date, 'error'); -- return empty string and error message end snapdate = table.concat ({year, month, day}, '-'); -- date comparisons are all done in iso format if 14 == dlen then return snapdate, msg; -- return date with message if any else return snapdate, msg .. inlineRed (err_warn_msgs.ts_len, 'warning'); -- return date with warning message(s) end end --[[--------------------------< decodeArchiveisDate >----------------------- Given an Archive.is "long link" URI-path (e.g. /2016.08.28-144552/http://example.com) return the date in df format (e.g. if df = dmy, return 28 August 2016) Handles "." and "-" in snapshot date, so 2016.08.28-144552 is same as 20160828144552 returns two values: first value is one of these: valid date string in df format - archive.is date is valid (including the text string 'short link' when url is the short form) empty string - wayback date is malformed (not a number, less than 8 digits, not a valid date) nil - wayback date is '/save/' second return value is an appropriate 'message' may or may not be formatted ]] local function decodeArchiveisDate(path, df) local snapdate if path:match ('^/%w+$') then -- short form url path is '/' followed by some number of base 62 digits and nothing else return "short link" -- e.g. http://archive.is/hD1qz end snapdate = mw.text.split (path, '/')[2]:gsub('[%.%-]', ); -- get snapshot date, e.g. 2016.08.28-144552; remove periods and hyphens local dlen = string.len(snapdate) if dlen < 8 then -- we need 8 digits TODO: but shouldn't this be testing for 14 digits? return , inlineRed (err_warn_msgs.ts_short, 'error'); -- return empty string and error message end local year, month, day = snapdate:match ('(%d%d%d%d)(%d%d)(%d%d)'); -- no need for snapdatelong here if not is_valid_date (year, month, day) then return , inlineRed (err_warn_msgs.ts_date, 'error'); -- return empty string and error message end snapdate = table.concat ({year, month, day}, '-'); -- date comparisons are all done in iso format if 14 == dlen then return snapdate; -- return date else return snapdate, inlineRed (err_warn_msgs.ts_len, 'warning'); -- return date with warning message end end --[[--------------------------< serviceName >----------------------- Given a domain extracted by mw.uri.new() (eg. web.archive.org) set tail string and service ID ]] local function serviceName(host, no_link) local tracking; local index; host = host:lower():gsub ('^web%.(.+)', '%1'):gsub ('^www%.(.+)', '%1'); -- lowercase, remove web. and www. subdomains if services[host] then index = host; else for k, _ in pairs (services) do if host:find ('%f[%a]'..k:gsub ('([%.%-])', '%%%1')) then index = k; break; end end end if index then local out = {}; -- empty string in [1] so that concatenated result has leading single space ulx.url1.service = services[index][4] or 'other'; tracking = services[index][5] or categories.other; -- build tail string if false == services[index][1] then -- select prefix table.insert (out, prefixes.at); elseif true == services[index][1] then table.insert (out, prefixes.atthe); else table.insert (out, services[index][1]); end table.insert (out, make_wikilink (services[index][2], services[index][3], no_link)); -- add article wikilink if services[index][6] then -- add tail postfix if it exists table.insert (out, services[index][6]); end ulx.url1.tail = table.concat (out, ' '); -- put it all together; result has leading space character else -- here when unknown archive ulx.url1.service = 'other'; tracking = categories.unknown; ulx.url1.tail = table.concat ({, prefixes.at, host, inlineRed (err_warn_msgs.unknown_url, error)}, ' '); end track[tracking] = 1 end --[[--------------------------< parseExtraArgs >----------------------- Parse numbered arguments starting at 2, such as url2..url10, date2..date10, title2..title10 For example: Template loop detected: Template:Webarchive Three url arguments not in numeric sequence (1..4..7). Function only processes arguments numbered 2 or greater (in this case 4 and 7) It creates numeric sequenced table entries like: urlx.url2.url = <argument value for url4> urlx.url3.url = <argument value for url7> Returns the number of URL arguments found numbered 2 or greater (in this case returns "2") ]] local function parseExtraArgs(args) local i, j, argurl, argurl2, argdate, argtitle j = 2 for i = 2, config.maxurls do argurl = "url" .. i if args[argurl] then argurl2 = "url" .. j ulx[argurl2] = {} ulx[argurl2]["url"] = args[argurl] argdate = "date" .. i if args[argdate] then ulx[argurl2]["date"] = args[argdate] else ulx[argurl2]["date"] = inlineRed (err_warn_msgs.date_miss, 'warning'); end argtitle = "title" .. i if args[argtitle] then ulx[argurl2]["title"] = args[argtitle] else ulx[argurl2]["title"] = nil end j = j + 1 end end if j == 2 then return 0 else return j - 2 end end --[[--------------------------< comma >----------------------- Given a date string, return "," if it's MDY ]] local function comma(date) return (date and date:match ('%a+ +%d%d?(,) +%d%d%d%d')) or ; end --[[--------------------------< createRendering >----------------------- Return a rendering of the data in ulx[][] ]] local function createRendering() local displayfield local out = {}; local index_date, msg = ulx.url1.date:match ('(index)(.*)'); -- when ulx.url1.date extract 'index' text and message text (if there is a message) ulx.url1.date = ulx.url1.date:gsub ('index.*', 'index'); -- remove message if 'none' == ulx.url1.format then -- For Template:Wayback, Template:Webcite table.insert (out, '['); -- open extlink markup table.insert (out, ulx.url1.url); -- add url if ulx.url1.title then table.insert (out, ' ') -- the required space table.insert (out, ulx.url1.title) -- the title table.insert (out, ']'); -- close extlink markup table.insert (out, ulx.url1.tail); -- tail text if ulx.url1.date then table.insert (out, ' ('); -- open date text; TODO: why the html entity? replace with regular space? table.insert (out, 'index' == ulx.url1.date and s_text.archive or s_text.archived); -- add text table.insert (out, ' '); -- insert a space table.insert (out, ulx.url1.date); -- add date table.insert (out, ')'); -- close date text end else -- no title if index_date then -- when url date is 'index' table.insert (out, table.concat ({' ', s_text.Archive_index, ']'})); -- add the index link label table.insert (out, msg or ); -- add date mismatch message when url date is /*/ and |date= has valid date else table.insert (out, table.concat ({' ', s_text.Archived, '] '})); -- add link label for url has timestamp date (will include mismatch message if there is one) end if ulx.url1.date then if 'index' ~= ulx.url1.date then table.insert (out, ulx.url1.date); -- add date when data is not 'index' end table.insert (out, comma(ulx.url1.date)); -- add ',' if date format is mdy table.insert (out, ulx.url1.tail); -- add tail text else -- no date table.insert (out, ulx.url1.tail); -- add tail text end end if 0 < ulx.url1.extraurls then -- For multiple archive URLs local tot = ulx.url1.extraurls + 1 table.insert (out, '.') -- terminate first url table.insert (out, table.concat ({' ', s_text.addlarchives, ': '})); -- add header text for i=2, tot do -- loop through the additionals local index = table.concat ({'url', i}); -- make an index displayfield = ulx[index]['title'] and 'title' or 'date'; -- choose display text table.insert (out, '['); -- open extlink markup table.insert (out, ulx[index]['url']); -- add the url table.insert (out, ' '); -- the required space table.insert (out, ulx[index][displayfield]); -- add the label table.insert (out, ']'); -- close extlink markup table.insert (out, i==tot and '.' or ', '); -- add terminator end end return table.concat (out); -- make a big string and done else -- For Template:Cite archives if 'addlarchives' == ulx.url1.format then -- Multiple archive services table.insert (out, table.concat ({s_text.addlarchives, ': '})); -- add header text else -- Multiple pages from the same archive table.insert (out, table.concat ({s_text.addlpages, ' '})); -- add header text table.insert (out, ulx.url1.date); -- add date to header text table.insert (out, ': '); -- close header text end local tot = ulx.url1.extraurls + 1; for i=1, tot do -- loop through the additionals local index = table.concat ({'url', i}); -- make an index table.insert (out, '['); -- open extlink markup table.insert (out, ulx[index]['url']); -- add url table.insert (out, ' '); -- add required space displayfield = ulx[index]['title']; if 'addlarchives' == ulx.url1.format then if not displayfield then displayfield = ulx[index]['date'] end else -- must be addlpages if not displayfield then displayfield = table.concat ({s_text.Page, ' ', i}); end end table.insert (out, displayfield); -- add title, date, page label text table.insert (out, ']'); -- close extlink markup table.insert (out, (i==tot and '.' or ', ')); -- add terminator end return table.concat (out); -- make a big string and done end end --[[--------------------------< P A R A M E T E R _ N A M E _ X L A T E >-------------------------------------- for internaltionalization, translate local-language parameter names to their English equivalents TODO: return error message if multiple aliases of the same canonical parameter name are found? returns two tables: new_args - holds canonical form parameters and their values either from translation or because the parameter was already in canonical form origin - maps canonical-form parameter names to their untranslated (local language) form for error messaging in the local language unrecognized parameters are ignored ]] local function parameter_name_xlate (args, params, enum_params) local name; -- holds modifiable name of the parameter name during evaluation local enum; -- for enumerated parameters, holds the enumerator during evaluation local found = false; -- flag used to break out of nested for loops local new_args = {}; -- a table that holds canonical and translated parameter k/v pairs local origin = {}; -- a table that maps original (local language) parameter names to their canonical name for local language error messaging local unnamed_params; -- set true when unsupported positional parameters are detected for k, v in pairs (args) do -- loop through all of the arguments in the args table name = k; -- copy of original parameter name if 'string' == type (k) then if non_western_digits then -- true when non-western digits supported at this wiki name = mw.ustring.gsub (name, '%d', digits); -- convert this wiki's non-western digits to western digits end enum = name:match ('%d+$'); -- get parameter enumerator if it exists; nil else if not enum then -- no enumerator so looking for non-enumnerated parameters -- TODO: insert shortcut here? if params[name] then name holds the canonical parameter name; no need to search further for pname, aliases in pairs (params) do -- loop through each parameter the params table for _, alias in ipairs (aliases) do -- loop through each alias in the parameter's aliases table if name == alias then new_args[pname] = v; -- create a new entry in the new_args table origin [pname] = k; -- create an entry to make canonical parameter name to original local language parameter name found = true; -- flag so that we can break out of these nested for loops break; -- no need to search the rest of the aliases table for name so go on to the next k, v pair end end if found then -- true when we found an alias that matched name found = false; -- reset the flag break; -- go do next args k/v pair end end else -- enumerated parameters name = name:gsub ('%d$', '#'); -- replace enumeration digits with place holder for table search -- TODO: insert shortcut here? if num_params[name] then name holds the canonical parameter name; no need to search further for pname, aliases in pairs (enum_params) do -- loop through each parameter the num_params table for _, alias in ipairs (aliases) do -- loop through each alias in the parameter's aliases table if name == alias then pname = pname:gsub ('#$', enum); -- replace the '#' place holder with the actual enumerator new_args[pname] = v; -- create a new entry in the new_args table origin [pname] = k; -- create an entry to make canonical parameter name to original local language parameter name found = true; -- flag so that we can break out of these nested for loops break; -- no need to search the rest of the aliases table for name so go on to the next k, v pair end end if found then -- true when we found an alias that matched name found = false; -- reset the flag break; -- go do next args k/v pair end end end else unnamed_params = true; -- flag for unsupported positional parameters end end -- for k, v return new_args, origin, unnamed_params; end --[[--------------------------< W E B A R C H I V E >---------------------------------------------------------- template entry point ]] local function webarchive(frame) local args = getArgs (frame); local data = mw.loadData (table.concat ({ -- make a data module name; sandbox or live 'Module:Webarchive/data', frame:getTitle():find('sandbox', 1, true) and '/sandbox' or -- this instance is ./sandbox then append /sandbox })); categories = data.categories; -- fill in the forward declarations config = data.config; if data.digits.enable then digits = data.digits; -- for i18n; table of digits in the local wiki's language non_western_digits = true; -- use_non_western_digits end err_warn_msgs = data.err_warn_msgs; excepted_pages = data.excepted_pages; month_num = data.month_num; -- for i18n; table of month names in the local wiki's language prefixes = data.prefixes; services = data.services; s_text = data.s_text; uncategorized_namespaces = data.uncategorized_namespaces; uncategorized_subpages = data.uncategorized_subpages; local origin = {}; -- holds a map of English to local language parameter names used in the current template; not currently used local unnamed_params; -- boolean set to true when template call has unnamed parameters args, origin, unnamed_params = parameter_name_xlate (args, data.params, data.enum_params); -- translate parameter names in args to English local date, format, msg, udate, uri, url; local ldf = 'iso'; -- when there is no |date= parameter, render url dates in iso format if args.url and args.url1 then -- URL argument (first) return inlineError (data.crit_err_msgs.conflicting, {origin.url, origin.url1}); end url = args.url or args.url1; if not url then return inlineError (data.crit_err_msgs.empty); end -- these iabot bugs perportedly fixed; removing these causes lua script error --[[ -- at Template:Webarchive/testcases/Production; resolve that before deleting these tests if mw.ustring.find( url, "https://web.http", 1, true ) then -- track bug - TODO: IAbot bug; not known if the bug has been fixed; deferred track[categories.error] = 1; return inlineError (data.crit_err_msgs.iabot1); end if url == "https://web.archive.org/http:/" then -- track bug - TODO: IAbot bug; not known if the bug has been fixed; deferred track[categories.error] = 1; return inlineError (data.crit_err_msgs.iabot2); end ]] if not (url:lower():find ('^http') or url:find ('^//')) then return inlineError (data.crit_err_msgs.invalid_url ); end ulx.url1 = {} ulx.url1.url = url ulx.url1.extraurls = parseExtraArgs(args) local good = false; good, uri = pcall (mw.uri.new, ulx.url1.url); -- get a table of uri parts from this url; protected mode to prevent lua error when ulx.url1.url is malformed if not good or nil == uri.host then -- abandon when ulx.url1.url is malformed return inlineError (data.crit_err_msgs.invalid_url); end serviceName(uri.host, args.nolink) if args.date and args.date1 then -- Date argument return inlineError (data.crit_err_msgs.conflicting, {origin.date, origin.date1}); end date = args.date or args.date1; date = date and date:gsub (' +', ' '); -- replace multiple spaces with a single space if date and config.verifydates then if '*' == date then date = 'index'; ldf = 'iso'; -- set to default format elseif 'mdy' == date then date = nil; -- if date extracted from URL, ldf = 'mdy'; -- then |date=mdy overrides iso elseif 'dmy' == date then date = nil; -- if date extracted from URL, ldf = 'dmy'; -- then |date=dmy overrides iso elseif 'ymd' == date then date = nil; -- if date extracted from URL, ldf = 'ymd'; -- then |date=ymd overrides iso else date, ldf = decode_date (date); -- get an iso format date from date and get date's original format end end if 'wayback' == ulx.url1.service or 'locwebarchives' == ulx.url1.service or 'ukgwa' == ulx.url1.service then if date then if config.verifydates then if ldf then udate, msg = decodeWaybackDate (uri.path); -- get the url date in iso format and format of date in |date=; 'index' when wayback url date is * if not udate then -- this is the only 'fatal' error return return inlineError (data.crit_err_msgs[msg]); end if udate ~= date then -- date comparison using iso format dates date = udate; msg = table.concat ({ inlineRed (err_warn_msgs.mismatch, 'warning'), -- add warning message msg, -- add message if there is one }); end end end else -- no |date= udate, msg = decodeWaybackDate (uri.path); if not udate then -- this is the only 'fatal' error return return inlineError (data.crit_err_msgs[msg]); end if == udate then date = nil; -- unset else date = udate; end end elseif 'webcite' == ulx.url1.service then if date then if config.verifydates then if ldf then udate = decodeWebciteDate (uri.path); -- get the url date in iso format if 'query' ~= udate then -- skip if query if udate ~= date then -- date comparison using iso format dates date = udate; msg = table.concat ({ inlineRed (err_warn_msgs.mismatch, 'warning'), }); end end end end else date = decodeWebciteDate( uri.path, "iso" ) if date == "query" then date = nil; -- unset msg = inlineRed (err_warn_msgs.date_miss, 'warning'); elseif not date then -- invalid base62 string date = inlineRed (err_warn_msgs.date1, 'error'); end end elseif 'archiveis' == ulx.url1.service then if date then if config.verifydates then if ldf then udate, msg = decodeArchiveisDate (uri.path) -- get the url date in iso format if 'short link' ~= udate then -- skip if short link if udate ~= date then -- date comparison using iso format dates date = udate; msg = table.concat ({ inlineRed (err_warn_msgs.mismatch, 'warning'), -- add warning message msg, -- add message if there is one }); end end end end else -- no |date= udate, msg = decodeArchiveisDate( uri.path, "iso" ) if udate == "short link" then date = nil; -- unset msg = inlineRed (err_warn_msgs.date_miss, 'warning'); elseif == udate then date = nil; -- unset else date = udate; end end else -- some other service if not date then msg = inlineRed (err_warn_msgs.date_miss, 'warning'); end end if 'index' == date then ulx.url1.date = date .. (msg or ); -- create index + message (if there is one) elseif date then ulx.url1.date = makeDate (date, nil, nil, ldf) .. (msg or ); -- create a date in the wiki's local language + message (if there is one) else ulx.url1.date = msg; end format = args.format; -- Format argument if not format then format = "none" else for k, v in pairs (data.format_vals) do -- |format= accepts two specific values loop through a table of those values local found; -- declare a nil flag for _, p in ipairs (v) do -- loop through local language variants if format == p then -- when |format= value matches format = k; -- use name from table key found = true; -- declare found so that we can break out of outer for loop break; -- break out of inner for loop end end if found then break; end end if format == "addlpages" then if not ulx.url1.date then format = "none" end elseif format == "addlarchives" then format = "addlarchives" else format = "none" end end ulx.url1.format = format if args.title and args.title1 then -- Title argument return inlineError (data.crit_err_msgs.conflicting, {origin.title, origin.title1}); end ulx.url1.title = args.title or args.title1; local rend = createRendering() if not rend then return inlineError (data.crit_err_msgs.unknown); end return rend .. ((unnamed_params and inlineRed (err_warn_msgs.unnamed_params, 'warning')) or ) .. createTracking(); end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return {webarchive = webarchive};
- ↑ Classic TV – Old UK TV Show Ratings – 70s- FiftiesWeb.
- ↑ 50 Years of James Bond: Roger Moore, Seven Times 007. BBC America (19 October 2012). “"[Moore] played James Bond in 1964 on TV opposite British actress Millicent Martin in a guest appearance on her BBC comedy show, Mainly Millicent."”
- ↑ 30.0 30.1 "Roger Moore: From Saint to 007, Entertainment News & Top Stories".
- ↑ British Culture and Society in the 1970s: The Lost Decade edited by Laurel Forster, Sue Harper
- ↑ Weber, Bruce. "Richard Kiel Dies at 74; Played Jaws in Bond Films", 11 September 2014.
- ↑ "The Global Film: Will It Play in Uruguay?: The Global Film". By John M. Wilson. The New York Times, 26 November 1978: D1.
- ↑ "If a film chews gum, it's American", The Guardian (1959–2003) [London (UK)] 5 July 1980: 9.
- ↑ James Bond: James Brolin was set to REPLACE Roger Moore in Octopussy. Express Newspapers (8 April 2020).
- ↑ "James Bond: 12(!) actors, and 26 movies in 54 years", the web log of Evert. (in en-GB)
- ↑ "Roger Moore: debonair 007 played Bond role for laughs", The Australian.
- ↑ 38.00 38.01 38.02 38.03 38.04 38.05 38.06 38.07 38.08 38.09 38.10 38.11 38.12 38.13 38.14 38.15 38.16 38.17 38.18 38.19 38.20 38.21 38.22 38.23 38.24 38.25 38.26 38.27 38.28 38.29 38.30 38.31 38.32 38.33 38.34 38.35 38.36 38.37 38.38 38.39 38.40 38.41 38.42 Roger Moore. BFI.
- ↑ Champlin, Charles. "Roger Moore and Talia Shire Take Sequel Break", Los Angeles Times, 17 September 1989.
- ↑ "6 memorable Roger Moore roles including James Bond 007", New York Daily News.
- ↑ Bremner, Rory Beware of Imitations (1999)
- ↑ Episode 6 Have I Got News for You, Series 44 Episode 6 of 11. BBC One.
- ↑ "50 Best Dressed Men in Britain 2015", GQ, 5 January 2015.
- ↑ "Roger Moore backs children's fairy tales app in aid of Unicef", The Guardian, 18 June 2015.
- ↑ Sir Roger Moore: Goodwill Ambassador. Unicef People (13 August 2012).
- ↑ Script error: No such module "citation/CS1".
- ↑ The Fly Who Loved Me (directed by Dan Chambers). Unicef.org.uk.
- ↑ 48.0 48.1 48.2 McGrath, Nick. "Roger Moore: 'I love cash. The sheer luxury of crispy £1 notes'", The Telegraph, 30 September 2012.
- ↑ 49.0 49.1 Roger Moore (10 October 2009). My Word is My Bond: The Autobiography. Michael OMara, page 36–. ISBN 978-1-84317-419-6.
- ↑ Sir Roger Moore: James Bond actor 'beaten up by first two wives' The Telegraph, 12 September 2012
- ↑ 51.0 51.1 51.2 51.3 51.4 51.5 "Obituary: Dorothy Squires", The Times, London, 15 April 1998, pg. 21
- ↑ May, Luke. Sir Roger Moore, former James Bond actor, Bexley and Tunbridge Wells resident, dies aged 89 from cancer. Kentnews.co.uk. Archant.
- ↑ Retrieved May 2017
- ↑ 54.0 54.1 "Moore pays for Squires operation." The Times, London, 31 May 1996, pg. 6
- ↑ 55.0 55.1 55.2 55.3 55.4 55.5 Davies, Hugh. "Roger Moore pays wife £10m in divorce deal", The Telegraph, 10 October 2000.
- ↑ "News in Brief", The Times, London, 12 April 1969, pg. 3
- ↑ 57.0 57.1 57.2 57.3 57.4 57.5 57.6 Cavendish, Lucy. "Roger Moore Saint or Sinner?", London Evening Standard, 17 November 2003.
- ↑ Anstead, Mark. "Yes, the name's bonds", The Guardian, 10 August 2002.
- ↑ Christian Moore (IV).
- ↑ James Bone. "Roger Moore's £10m divorce." The Times, London, 10 October 2000
- ↑ 61.0 61.1 Lee, Veronica. "Roger Moore interview: 'If I had 24 hours to live, I'd make a dry martini'", The Telegraph, 26 October 2003.
- ↑ Roger Moore's Daughter, Christina Knudsen, Dies Aged 47 – Huffington Post UK
- ↑ Sir Roger Moore on Twitter.
- ↑ Sir Roger Moore on Twitter.
- ↑ "'Sean played Bond as a killer – I played him as a lover': Roger Moore's best quotes", The Telegraph, 23 May 2017.
- ↑ "Campaigning with the stars", BBC News, 14 May 2001.
- ↑ 67.0 67.1 Parfitt, Tom (23 May 2017). REVEALED: Sir Roger Moore snubbed Theresa May request to appear at campaign rally (en).
- ↑ "Obituary: Sir Roger Moore", BBC News, 23 May 2017. (in en-GB)
- ↑ Sir Roger Moore: 'I've paid my dues in taxes'. NME (11 December 2011).
- ↑ Roger Moore slams the Tory party traitors (en-gb).
- ↑ Roger Moore: Bond Can't Be A Woman Or A Gay Man (en-GB).
- ↑ bangshowbiz.com. "Sir Roger Moore: I like Bond crumpet", The Washington Post, 12 June 2015. (in en-US)
- ↑ BECTU has expressed sadness at the death of Sir Roger Moore, aged 89 (24 May 2017).
- ↑ McCormick, Ken (24 May 2017). Do you remember when Sir Roger Moore backed Keynsham workers in their fight to save their factory? (en).
- ↑ 75.0 75.1 75.2 75.3 Julia Llewelyn Smith. "Sir Roger Moore: 'I can't drink martinis any more – but life is bliss'", The Telegraph, 30 April 2014.
- ↑ Monaco Ambassador's Club – News. Monaco Ambassadors Club. Prince's Palace of Monaco (12 June 2012).
- ↑ "Sir Roger Moore defends decision to live in Monaco and Switzerland", The Scotsman, 12 December 2011.
- ↑ Gordon, Bryony. "Sir Roger Moore: I'm the worst James Bond, they say", The Telegraph, 24 September 2008.
- ↑ theguardian.com
- ↑ Chase, Chris. "At the Movies: Roger Moore is anybody's replacement", The New York Times, 26 June 1981.
- ↑ "Roger Moore: 'It's all a bit of a joke'", Sunday Star Times, 14 November 2008.
- ↑ McKay, Sinclair. "Review: Roger Moore: My Word Is My Bond by Roger Moore", The Telegraph, 11 October 2008. ; "Bond star Sir Roger Moore gets asked strange stuff", Newsbeat, BBC News, 30 March 2015.
- ↑ Moore, Roger (1973). Roger Moore As James Bond: Roger Moore's Own Account of Filming 'Live and Let Die'. London: Pan Books, page 15, 46. ISBN 9780330236539.
- ↑ Moore, Roger (2012). Bond on Bond: Reflections on 50 Years of James Bond Movies. Guilford, Conn.: Lyons Press, page 141. ISBN 9780762782819.
- ↑ France, Lisa. "Roger Moore, '007' actor, dies at 89", CNN, 23 May 2017.
- ↑ "Roger Moore collapses on stage", The Guardian, 9 May 2003.
- ↑ "Sir Roger Moore – Nobody Does It Better", BBC Radio 2, 26 December 2017.
- ↑ 88.0 88.1 "Roger Moore's daughter – My kind, naughty, funny dad", The Australian Women's Weekly, 9 November 2017.
- ↑ "Sir Roger Moore, James Bond actor, dies at age 89", BBC News, 23 May 2017.
- ↑ Family tweet re death of Sir Roger Moore (23 May 2017).
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namednzz
- ↑ Six Royals and 007: Memorial Service for Princess Lilian.
- ↑ Barchfield, Jenny. "Monaco palace releases wedding guest list", Forbes, 30 June 2011. [dead link]
- ↑ Template:London Gazette
- ↑ Template:London Gazette
- ↑ "Sir Roger Moore, James Bond actor, dies of cancer aged 89", The Telegraph, 23 May 2017.
- ↑ Roger Moore Official Site.
- ↑ "Roger Moore, Commandeur des Arts et des Lettres", 28 October 2008. (in fr)
- ↑ University of Hertfordshire News.
- ↑ 100.0 100.1 "Roger Moore stage opened at Pinewood Studios", BBC News, 21 December 2017.
- ↑ Statement by UNICEF Executive Director Anthony Lake on the Life of Goodwill Ambassador Sir Roger Moore. UNICEF (23 May 2017).
- ↑ Sir Roger Moore receives Dag Hammarskjöld Inspiration Award for his work with UNICEF (25 October 2017).
- ↑ "Katy Perry gets charity award for her work with children from Hillary Clinton", Newsbeat, BBC News, 30 November 2016.
- ↑ (10 February 2003) Actor Roger Moore Receives the Federal Service Fotografia de Noticias. Getty Images.
- ↑ Winners & Nominees Henrietta Award (World Film Favorites). Golden Globe Awards. Hollywood Foreign Press Association.
- ↑ Smith, Neil. "Seven celebs who invented things", BBC News, 7 June 2017. (in en-GB)
- ↑ Roger Moore is shooting "Christmas at Castlebury Hall" in Romania. Nine O'Clock (8 March 2011).
- ↑ Roger Moore's 1973 Book About The Making Of LIVE AND LET DIE Is Straight-Up Bonkers (21 April 2017).
- ↑ Roger Moore's official website (12 January 2010).
- ↑ Bond on Bond Review. mi6-hq.com.
External links[]
- Roger Moore at James Bond Wiki
- Roger Moore at the Internet Movie Database (IMDb)
- Roger Moore interview. ITV Cymru/Wales Archive (1963).
- People: Roger Moore. UNICEF. Archived from the original on March 5, 2009.