Module: EmbeddedEmailMatcher

Defined in:
lib/runger_email_reply_trimmer/embedded_email_matcher.rb

Constant Summary collapse

ON_DATE_SOMEONE_WROTE_REGEXES =

On Wed, Sep 25, 2013, at 03:57 PM, jorge_castro wrote: On Thursday, June 27, 2013, knwang via Discourse Meta wrote: On Wed, 2015-12-02 at 13:58 0000, Tom Newsom wrote: On 10/12/15 12:30, Jeff Atwood wrote: —- On Tue, 22 Dec 2015 14:17:36 0530 Sam Saffron&lt;[email protected]&gt; wrote —- Op 24 aug. 2013 om 16:48 heeft ven88 via Discourse Meta <[email protected]> het volgende geschreven: Le 4 janv. 2016 19:03, “Neil Lalonde” <[email protected]> a écrit : Dnia 14 lip 2015 o godz. 00:25 Michael Downey <[email protected]> napisał(a): Em seg, 27 de jul de 2015 17:13, Neil Lalonde <[email protected]> escreveu: El jueves, 21 de noviembre de 2013, codinghorror escribió: At 6/16/2016 08:32 PM, you wrote:

[
  # Chinese
  /^[[:blank:]<>-]*在 (?:(?!\b(?>在|写道)\b).)+?写道[[:blank:].:>-]*$/im,
  # Dutch
  /^[[:blank:]<>-]*Op (?:(?!\b(?>Op|het\svolgende\sgeschreven|schreef)\b).)+?(het\svolgende\sgeschreven|schreef[^:]+)[[:blank:].:>-]*$/im,
  # English
  /^[[:blank:]<>-]*In message (?:(?!\b(?>In message|writes)\b).)+?writes[[:blank:].:>-]*$/im,
  /^[[:blank:]<>-]*(On|At) (?:(?!\b(?>On|wrote|writes|says|said)\b).)+?(wrote|writes|says|said)[[:blank:].:>-]*$/im,
  # French
  /^[[:blank:]<>-]*Le (?:(?!\b(?>Le|nous\sa\sdit|a\s+écrit)\b).)+?(nous\sa\sdit|a\s+écrit)[[:blank:].:>-]*$/im,
  # German
  /^[[:blank:]<>-]*Am (?:(?!\b(?>Am|schrieben\sSie)\b).)+?schrieben\sSie[[:blank:].:>-]*$/im,
  /^[[:blank:]<>-]*Am (?:(?!\b(?>Am|geschrieben)\b).)+?(geschrieben|schrieb[^:]+)[[:blank:].:>-]*$/im,
  # Italian
  /^[[:blank:]<>-]*Il (?:(?!\b(?>Il|ha\sscritto)\b).)+?ha\sscritto[[:blank:].:>-]*$/im,
  # Polish
  /^[[:blank:]<>-]*(Dnia|Dňa) (?:(?!\b(?>Dnia|Dňa|napisał)\b).)+?napisał(\(a\))?[[:blank:].:>-]*$/im,
  # Portuguese
  /^[[:blank:]<>-]*Em (?:(?!\b(?>Em|escreveu)\b).)+?escreveu[[:blank:].:>-]*$/im,
  # Spanish
  /^[[:blank:]<>-]*El (?:(?!\b(?>El|escribió)\b).)+?escribió[[:blank:].:>-]*$/im,
].freeze
ON_DATE_WROTE_SOMEONE_MARKERS =

Op 10 dec. 2015 18:35 schreef “Arpit Jalan” <[email protected]>: Am 18.09.2013 um 16:24 schrieb codinghorror <[email protected]>: Den 15. jun. 2016 kl. 20.42 skrev Jeff Atwood <[email protected]>: søn. 30. apr. 2017 kl. 00.26 skrev David Taylor <[email protected]>:

[
  # Dutch
  ['Op', 'schreef'],
  # German
  ['Am', 'schrieb'],
  # Norwegian
  ['Den', 'skrev'],
  # Dutch
  ['søn.', 'skrev'],
].freeze
ON_DATE_WROTE_SOMEONE_REGEXES =
ON_DATE_WROTE_SOMEONE_MARKERS.map do |on, wrote|
  /^[[:blank:]>]*#{on}\s.+\s#{wrote}\s[^:]+:/
end
DATE_SOMEONE_WROTE_MARKERS =

суббота, 14 марта 2015 г. пользователь etewiah написал: 23 mar 2017 21:25 “Neil Lalonde” <[email protected]> napisał(a): 30 серп. 2016 р. 20:45 “Arpit” [email protected] пише:

[
  # Russian
  ['пользователь', 'написал'],
  # Polish
  ['', 'napisał\\(a\\)'],
  # Ukrainian
  ['', 'пише'],
].freeze
DATE_SOMEONE_WROTE_REGEXES =
DATE_SOMEONE_WROTE_MARKERS.map do |user, wrote|
  if user.empty?
    /\d{4}.{1,80}\n?.{0,80}?#{wrote}:/
  else
    /\d{4}.{1,80}#{user}.{0,80}\n?.{0,80}?#{wrote}:/
  end
end
SOMEONE_WROTE_ON_DATE_REGEXES =

Max Mustermann <[email protected]> schrieb am Fr., 28. Apr. 2017 um 11:53 Uhr:

[
  # English
  /^.+\bwrote\b[[:space:]]+\bon\b.+[^:]+:/,
  # German
  /^.+\bschrieb\b[[:space:]]+\bam\b.+[^:]+:/,
].freeze
ISO_DATE_SOMEONE_REGEX =

2016-03-03 17:21 GMT+01:00 Some One

/^[[:blank:]>]*20\d\d-\d\d-\d\d \d\d:\d\d GMT\+\d\d:\d\d [\w[:blank:]]+$/
DATE_SOMEONE_EMAIL_REGEX =

2015-10-18 0:17 GMT+03:00 Matt Palmer <[email protected]>: 2013/10/2 camilohollanda <[email protected]> вт, 5 янв. 2016 г. в 23:39, Erlend Sogge Heggen <[email protected]>: ср, 1 апр. 2015, 18:29, Denis Didkovsky <[email protected]>:

/\d{4}.{1,80}\s?<[^@<>]+@[^@<>.]+\.[^@<>]+>:?$/
SOMEONE_VIA_SOMETHING_WROTE_MARKERS =

codinghorror via Discourse Meta wrote: codinghorror via Discourse Meta <[email protected]> schrieb:

[
  # English
  'wrote',
  # German
  'schrieb',
].freeze
SOMEONE_VIA_SOMETHING_WROTE_REGEXES =
SOMEONE_VIA_SOMETHING_WROTE_MARKERS.map do |wrote|
  /^.+ via .+ #{wrote}:?[[:blank:]]*$/
end
SOMEONE_EMAIL_WROTE_REGEX =

Some One <[email protected]> wrote: Gavin Sinclair ([email protected]) wrote:

/^.+\b[\w.+-]+@[\w.-]+\.\w{2,}\b.+wrote:?$/
POSTED_BY_SOMEONE_ON_DATE_REGEX =

Posted by mpalmer on 01/21/2016

/^[[:blank:]>]*Posted by .+ on \d{2}\/\d{2}\/\d{4}$/i
FORWARDED_EMAIL_REGEXES =

Begin forwarded message: Reply Message —– Forwarded Message —– —– Original Message —– —–Original Message—– *—– Original Message —–* —– Reply message —– —————— 原始邮件 ——————

[
  # English
  /^[[:blank:]>]*Begin forwarded message:/i,
  /^[[:blank:]>*]*-{2,}[[:blank:]]*(Forwarded|Original|Reply) Message[[:blank:]]*-{2,}/i,
  # French
  /^[[:blank:]>]*Début du message transféré :/i,
  /^[[:blank:]>*]*-{2,}[[:blank:]]*Message transféré[[:blank:]]*-{2,}/i,
  # German
  /^[[:blank:]>*]*-{2,}[[:blank:]]*Ursprüngliche Nachricht[[:blank:]]*-{2,}/i,
  # Spanish
  /^[[:blank:]>*]*-{2,}[[:blank:]]*Mensaje original[[:blank:]]*-{2,}/i,
  # Chinese
  /^[[:blank:]>*]*-{2,}[[:blank:]]*原始邮件[[:blank:]]*-{2,}/i,
].freeze
EMBEDDED_REGEXES =
[
  ON_DATE_SOMEONE_WROTE_REGEXES,
  ON_DATE_WROTE_SOMEONE_REGEXES,
  DATE_SOMEONE_WROTE_REGEXES,
  DATE_SOMEONE_EMAIL_REGEX,
  SOMEONE_WROTE_ON_DATE_REGEXES,
  ISO_DATE_SOMEONE_REGEX,
  SOMEONE_VIA_SOMETHING_WROTE_REGEXES,
  SOMEONE_EMAIL_WROTE_REGEX,
  POSTED_BY_SOMEONE_ON_DATE_REGEX,
  FORWARDED_EMAIL_REGEXES,
].flatten

Class Method Summary collapse

Class Method Details

.match?(line) ⇒ Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/runger_email_reply_trimmer/embedded_email_matcher.rb', line 155

def match?(line)
  EMBEDDED_REGEXES.any? { |r| line =~ r }
end