472 lines
15 KiB
Go
472 lines
15 KiB
Go
|
package reply
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"strings"
|
|||
|
|
|||
|
"github.com/dlclark/regexp2"
|
|||
|
)
|
|||
|
|
|||
|
var patterns = map[string][]*regexp2.Regexp{
|
|||
|
"REMOVE_PGP_MARKERS_REGEX": {
|
|||
|
regexp2.MustCompile(`\A-----BEGIN PGP SIGNED MESSAGE-----\n(?:Hash: \w+)?\s+`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^-----BEGIN PGP SIGNATURE-----$[\s\S]+^-----END PGP SIGNATURE-----`,
|
|||
|
regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
"REMOVE_UNSUBSCRIBE_REGEX": {
|
|||
|
regexp2.MustCompile(`^Unsubscribe: .+@.+(\n.+http:.+)?\s*\z`, regexp2.IgnoreCase|regexp2.RE2),
|
|||
|
},
|
|||
|
|
|||
|
"REMOVE_ALIAS_REGEX": {
|
|||
|
regexp2.MustCompile(`^.*>{5} "[^"\n]+" == .+ writes:`, regexp2.RE2),
|
|||
|
},
|
|||
|
|
|||
|
"CHANGE_ENCLOSED_QUOTE_ONE_REGEX": {
|
|||
|
regexp2.MustCompile(`^>>> ?(.+) ?>>>$\n([\s\S]+?)\n^<<< ?1 ?<<<$`, regexp2.RE2),
|
|||
|
},
|
|||
|
|
|||
|
"CHANGE_ENCLOSED_QUOTE_TWO_REGEX": {
|
|||
|
regexp2.MustCompile(`^>{4,}[[:blank:]]*$\n([\s\S]+?)\n^<{4,}[[:blank:]]*$`, regexp2.RE2|regexp2.Multiline),
|
|||
|
},
|
|||
|
|
|||
|
"FIX_QUOTES_FORMAT_REGEX": {
|
|||
|
regexp2.MustCompile(`^((?:[[:blank:]]*[[:alpha:]]*[>|])+)`, regexp2.RE2|regexp2.Multiline),
|
|||
|
},
|
|||
|
|
|||
|
// On init
|
|||
|
"FIX_EMBEDDED_REGEX": {},
|
|||
|
|
|||
|
// Envoyé depuis mon iPhone
|
|||
|
// Von meinem Mobilgerät gesendet
|
|||
|
// Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.
|
|||
|
// Nik from mobile
|
|||
|
// From My Iphone 6
|
|||
|
// Sent via mobile
|
|||
|
// Sent with Airmail
|
|||
|
// Sent from Windows Mail
|
|||
|
// Sent from my TI-85
|
|||
|
// <<sent by galaxy>>
|
|||
|
// (sent from a phone)
|
|||
|
// (Sent from mobile device)
|
|||
|
// 從我的 iPhone 傳送
|
|||
|
"SIGNATURE_REGEXES": {
|
|||
|
// Chinese
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*從我的 iPhone 傳送`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// English
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*[[:word:]]+ from mobile`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*[(<]*Sent (from|via|with|by) .+[)>]*`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*From my .{1,20}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Get Outlook for `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// French
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Envoyé depuis (mon|Yahoo Mail)`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// German
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Von meinem .+ gesendet`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Diese Nachricht wurde von .+ gesendet`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Italian
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Inviato da `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Norwegian
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Sendt fra min `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Portuguese
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Enviado do meu `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Spanish
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Enviado desde mi `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Dutch
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Verzonden met `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*Verstuurd vanaf mijn `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Swedish
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]]*från min `,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// On init
|
|||
|
"EMAIL_HEADERS_WITH_DATE_REGEXES": {},
|
|||
|
"EMAIL_HEADERS_WITH_TEXT_REGEXES": {},
|
|||
|
"EMAIL_HEADER_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<info@discourse.org> wrote ----
|
|||
|
// Op 24 aug. 2013 om 16:48 heeft ven88 via Discourse Meta <info@discourse.org> het volgende geschreven:
|
|||
|
// Le 4 janv. 2016 19:03, "Neil Lalonde" <info@discourse.org> a écrit :
|
|||
|
// Dnia 14 lip 2015 o godz. 00:25 Michael Downey <info@discourse.org> napisał(a):
|
|||
|
// Em seg, 27 de jul de 2015 17:13, Neil Lalonde <info@discourse.org> escreveu:
|
|||
|
// El jueves, 21 de noviembre de 2013, codinghorror escribió:
|
|||
|
// At 6/16/2016 08:32 PM, you wrote:
|
|||
|
"ON_DATE_SOMEONE_WROTE_REGEXES": {
|
|||
|
// Chinese
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*在 (?:(?!\b(?>在|写道)\b).)+?写道[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// Dutch
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*Op (?:(?!\b(?>Op|het\svolgende\sgeschreven|schreef)\b).)+?(het\svolgende\sgeschreven|schreef[^:]+)[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// English
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*In message (?:(?!\b(?>In message|writes)\b).)+?writes[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*(On|At) (?:(?!\b(?>On|wrote|writes|says|said)\b).)+?(wrote|writes|says|said)[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// French
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*Le (?:(?!\b(?>Le|nous\sa\sdit|a\s+écrit)\b).)+?(nous\sa\sdit|a\s+écrit)[[:blank:].:>- ]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// German
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*Am (?:(?!\b(?>Am|schrieben\sSie)\b).)+?schrieben\sSie[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*Am (?:(?!\b(?>Am|geschrieben)\b).)+?(geschrieben|schrieb[^:]+)[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// Italian
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*Il (?:(?!\b(?>Il|ha\sscritto)\b).)+?ha\sscritto[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// Polish
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*(Dnia|Dňa) (?:(?!\b(?>Dnia|Dňa|napisał)\b).)+?napisał(\(a\))?[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// Portuguese
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*Em (?:(?!\b(?>Em|escreveu)\b).)+?escreveu[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
// Spanish
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]<>-]*El (?:(?!\b(?>El|escribió)\b).)+?escribió[[:blank:].:>-]*$`,
|
|||
|
regexp2.IgnoreCase|regexp2.Singleline|regexp2.Multiline|regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// On init
|
|||
|
"ON_DATE_WROTE_SOMEONE_REGEXES": {},
|
|||
|
"DATE_SOMEONE_WROTE_REGEXES": {},
|
|||
|
|
|||
|
// 2015-10-18 0:17 GMT+03:00 Matt Palmer <info@discourse.org>:
|
|||
|
// 2013/10/2 camilohollanda <info@discourse.org>
|
|||
|
// вт, 5 янв. 2016 г. в 23:39, Erlend Sogge Heggen <info@discourse.org>:
|
|||
|
// ср, 1 апр. 2015, 18:29, Denis Didkovsky <info@discourse.org>:
|
|||
|
"DATE_SOMEONE_EMAIL_REGEX": {
|
|||
|
regexp2.MustCompile(
|
|||
|
`\d{4}.{1,80}\s?<[^@<>]+@[^@<>.]+\.[^@<>]+>:?$`,
|
|||
|
regexp2.RE2|regexp2.Multiline,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// Max Mustermann <try_discourse@discoursemail.com> schrieb am Fr., 28. Apr. 2017 um 11:53 Uhr:
|
|||
|
"SOMEONE_WROTE_ON_DATE_REGEXES": {
|
|||
|
// English
|
|||
|
regexp2.MustCompile(
|
|||
|
`^.+\bwrote\b[[:space:]]+\bon\b.+[^:]+:`,
|
|||
|
regexp2.RE2|regexp2.Multiline,
|
|||
|
),
|
|||
|
// German
|
|||
|
regexp2.MustCompile(
|
|||
|
`^.+\bschrieb\b[[:space:]]+\bam\b.+[^:]+:`,
|
|||
|
regexp2.RE2|regexp2.Multiline,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// 2016-03-03 17:21 GMT+01:00 Some One
|
|||
|
"ISO_DATE_SOMEONE_REGEX": {
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>]*20\d\d-\d\d-\d\d \d\d:\d\d GMT\+\d\d:\d\d [\w[:blank:]]+$`,
|
|||
|
regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// Some One <info@discourse.org> wrote:
|
|||
|
// Gavin Sinclair (gsinclair@soyabean.com.au) wrote:
|
|||
|
"SOMEONE_EMAIL_WROTE_REGEX": {
|
|||
|
regexp2.MustCompile(
|
|||
|
`^.+\b[\w.+-]+@[\w.-]+\.\w{2,}\b.+wrote:?$`,
|
|||
|
regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
"SOMEONE_VIA_SOMETHING_WROTE_REGEXES": {},
|
|||
|
|
|||
|
// Posted by mpalmer on 01/21/2016
|
|||
|
"POSTED_BY_SOMEONE_ON_DATE_REGEX": {
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>]*Posted by .+ on \d{2}\/\d{2}\/\d{4}$`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// Begin forwarded message:
|
|||
|
// Reply Message
|
|||
|
// ----- Forwarded Message -----
|
|||
|
// ----- Original Message -----
|
|||
|
// -----Original Message-----
|
|||
|
// ----- Mensagem Original -----
|
|||
|
// -----Mensagem Original-----
|
|||
|
// *----- Original Message -----*
|
|||
|
// ----- Reply message -----
|
|||
|
// ------------------ 原始邮件 ------------------
|
|||
|
"FORWARDED_EMAIL_REGEXES": {
|
|||
|
// English
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>]*Begin forwarded message:`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>*]*-{2,}[[:blank:]]*(Forwarded|Original|Reply) Message[[:blank:]]*-{2,}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// French
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>]*Début du message transféré :`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>*]*-{2,}[[:blank:]]*Message transféré[[:blank:]]*-{2,}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// German
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>*]*-{2,}[[:blank:]]*Ursprüngliche Nachricht[[:blank:]]*-{2,}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Spanish
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>*]*-{2,}[[:blank:]]*Mensaje original[[:blank:]]*-{2,}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Portuguese
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>*]*-{2,}[[:blank:]]*Mensagem original[[:blank:]]*-{2,}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
// Chinese
|
|||
|
regexp2.MustCompile(
|
|||
|
`^[[:blank:]>*]*-{2,}[[:blank:]]*原始邮件[[:blank:]]*-{2,}`,
|
|||
|
regexp2.IgnoreCase|regexp2.RE2,
|
|||
|
),
|
|||
|
},
|
|||
|
|
|||
|
// on init
|
|||
|
"EMBEDDED_REGEXES": {},
|
|||
|
}
|
|||
|
|
|||
|
// init ON_DATE_WROTE_SOMEONE_REGEXES
|
|||
|
func init() {
|
|||
|
dateMarkers := [][]string{
|
|||
|
// Norwegian
|
|||
|
{"Sendt"},
|
|||
|
// English
|
|||
|
{"Sent", "Date"},
|
|||
|
// French
|
|||
|
{"Date", "Le"},
|
|||
|
// German
|
|||
|
{"Gesendet"},
|
|||
|
// Portuguese
|
|||
|
{"Enviada em"},
|
|||
|
// Spanish
|
|||
|
{"Enviado"},
|
|||
|
// Spanish (Mexican)
|
|||
|
{"Fecha"},
|
|||
|
// Italian
|
|||
|
{"Data"},
|
|||
|
// Dutch
|
|||
|
{"Datum"},
|
|||
|
// Swedish
|
|||
|
{"Skickat"},
|
|||
|
// Chinese
|
|||
|
{"发送时间"},
|
|||
|
}
|
|||
|
|
|||
|
textMarkers := [][]string{
|
|||
|
// Norwegian
|
|||
|
{"Fra", "Til", "Emne"},
|
|||
|
// English
|
|||
|
{"From", "To", "Cc", "Reply-To", "Subject"},
|
|||
|
// French
|
|||
|
{"De", "Expéditeur", "À", "Destinataire", "Répondre à", "Objet"},
|
|||
|
// German
|
|||
|
{"Von", "An", "Betreff"},
|
|||
|
// Portuguese
|
|||
|
{"De", "Para", "Assunto"},
|
|||
|
// Spanish
|
|||
|
{"De", "Para", "Asunto"},
|
|||
|
// Italian
|
|||
|
{"Da", "Risposta", "A", "Oggetto"},
|
|||
|
// Dutch
|
|||
|
{"Van", "Beantwoorden - Aan", "Aan", "Onderwerp"},
|
|||
|
// Swedish
|
|||
|
{"Från", "Till", "Ämne"},
|
|||
|
// Chinese
|
|||
|
{"发件人", "收件人", "主题"},
|
|||
|
}
|
|||
|
|
|||
|
// Op 10 dec. 2015 18:35 schreef "Arpit Jalan" <info@discourse.org>:
|
|||
|
// Am 18.09.2013 um 16:24 schrieb codinghorror <info@discourse.org>:
|
|||
|
// Den 15. jun. 2016 kl. 20.42 skrev Jeff Atwood <info@discourse.org>:
|
|||
|
// søn. 30. apr. 2017 kl. 00.26 skrev David Taylor <meta@discoursemail.com>:
|
|||
|
onDateWroteSomeoneMarkers := [][]string{
|
|||
|
// Dutch
|
|||
|
{"Op", "schreef"},
|
|||
|
// German
|
|||
|
{"Am", "schrieb"},
|
|||
|
// Norwegian
|
|||
|
{"Den", "skrev"},
|
|||
|
// Dutch
|
|||
|
{`søn\.`, "skrev"},
|
|||
|
}
|
|||
|
|
|||
|
// суббота, 14 марта 2015 г. пользователь etewiah написал:
|
|||
|
// 23 mar 2017 21:25 "Neil Lalonde" <meta@discoursemail.com> napisał(a):
|
|||
|
// 30 серп. 2016 р. 20:45 "Arpit" no-reply@example.com пише:
|
|||
|
dateSomeoneWroteMarkers := [][]string{
|
|||
|
// Russian
|
|||
|
{"пользователь", "написал"},
|
|||
|
// Polish
|
|||
|
{"", "napisał\\(a\\)"},
|
|||
|
// Ukrainian
|
|||
|
{"", "пише"},
|
|||
|
}
|
|||
|
|
|||
|
// codinghorror via Discourse Meta wrote:
|
|||
|
// codinghorror via Discourse Meta <info@discourse.org> schrieb:
|
|||
|
someoneViaSomethingWroteMarkers := []string{
|
|||
|
// English
|
|||
|
"wrote",
|
|||
|
// German
|
|||
|
"schrieb",
|
|||
|
}
|
|||
|
|
|||
|
// date
|
|||
|
for _, markers := range dateMarkers {
|
|||
|
pattern := regexp2.MustCompile(
|
|||
|
fmt.Sprintf(`^[[:blank:]*]*(?:%s)[[:blank:]*]*:.*\d+`, strings.Join(markers, "|")),
|
|||
|
regexp2.RE2|regexp2.Multiline,
|
|||
|
)
|
|||
|
patterns["EMAIL_HEADERS_WITH_DATE_REGEXES"] = append(
|
|||
|
patterns["EMAIL_HEADERS_WITH_DATE_REGEXES"],
|
|||
|
pattern,
|
|||
|
)
|
|||
|
|
|||
|
patterns["EMAIL_HEADER_REGEXES"] = append(patterns["EMAIL_HEADER_REGEXES"], pattern)
|
|||
|
}
|
|||
|
|
|||
|
// text
|
|||
|
for _, markers := range textMarkers {
|
|||
|
pattern := regexp2.MustCompile(
|
|||
|
fmt.Sprintf(`^[[:blank:]*]*(?:%s)[[:blank:]*]*:.*[[:word:]]+`, strings.Join(markers, "|")),
|
|||
|
regexp2.IgnoreCase|regexp2.Multiline|regexp2.RE2,
|
|||
|
)
|
|||
|
patterns["EMAIL_HEADERS_WITH_TEXT_REGEXES"] = append(
|
|||
|
patterns["EMAIL_HEADERS_WITH_TEXT_REGEXES"],
|
|||
|
pattern,
|
|||
|
)
|
|||
|
|
|||
|
patterns["EMAIL_HEADER_REGEXES"] = append(patterns["EMAIL_HEADER_REGEXES"], pattern)
|
|||
|
}
|
|||
|
|
|||
|
for _, marker := range onDateWroteSomeoneMarkers {
|
|||
|
patterns["ON_DATE_WROTE_SOMEONE_REGEXES"] = append(
|
|||
|
patterns["ON_DATE_WROTE_SOMEONE_REGEXES"],
|
|||
|
regexp2.MustCompile(fmt.Sprintf(`^[[:blank:]>]*%s\s.+\s%s\s[^:]+:`, marker[0], marker[1]), regexp2.RE2),
|
|||
|
)
|
|||
|
}
|
|||
|
|
|||
|
for _, marker := range dateSomeoneWroteMarkers {
|
|||
|
if marker[0] == "" {
|
|||
|
patterns["DATE_SOMEONE_WROTE_REGEXES"] = append(
|
|||
|
patterns["DATE_SOMEONE_WROTE_REGEXES"],
|
|||
|
regexp2.MustCompile(fmt.Sprintf(`\d{4}.{1,80}\n?.{0,80}?%s:`, marker[1]), regexp2.RE2),
|
|||
|
)
|
|||
|
} else {
|
|||
|
patterns["DATE_SOMEONE_WROTE_REGEXES"] = append(
|
|||
|
patterns["DATE_SOMEONE_WROTE_REGEXES"],
|
|||
|
regexp2.MustCompile(fmt.Sprintf(`\d{4}.{1,80}%s.{0,80}\n?.{0,80}?%s:`, marker[0], marker[1]), regexp2.RE2),
|
|||
|
)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for _, marker := range someoneViaSomethingWroteMarkers {
|
|||
|
patterns["SOMEONE_VIA_SOMETHING_WROTE_REGEXES"] = append(
|
|||
|
patterns["SOMEONE_VIA_SOMETHING_WROTE_REGEXES"],
|
|||
|
regexp2.MustCompile(fmt.Sprintf(`^.+ via .+ %s:?[[:blank:]]*$`, marker), regexp2.RE2),
|
|||
|
)
|
|||
|
}
|
|||
|
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["ON_DATE_SOMEONE_WROTE_REGEXES"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["ON_DATE_WROTE_SOMEONE_REGEXES"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["DATE_SOMEONE_WROTE_REGEXES"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["DATE_SOMEONE_EMAIL_REGEX"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["SOMEONE_WROTE_ON_DATE_REGEXES"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["ISO_DATE_SOMEONE_REGEX"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["SOMEONE_VIA_SOMETHING_WROTE_REGEXES"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["SOMEONE_EMAIL_WROTE_REGEX"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["POSTED_BY_SOMEONE_ON_DATE_REGEX"]...)
|
|||
|
patterns["EMBEDDED_REGEXES"] = append(patterns["EMBEDDED_REGEXES"], patterns["FORWARDED_EMAIL_REGEXES"]...)
|
|||
|
|
|||
|
patterns["FIX_EMBEDDED_REGEX"] = append(patterns["FIX_EMBEDDED_REGEX"], patterns["ON_DATE_SOMEONE_WROTE_REGEXES"]...)
|
|||
|
patterns["FIX_EMBEDDED_REGEX"] = append(patterns["FIX_EMBEDDED_REGEX"], patterns["SOMEONE_WROTE_ON_DATE_REGEXES"]...)
|
|||
|
patterns["FIX_EMBEDDED_REGEX"] = append(patterns["FIX_EMBEDDED_REGEX"], patterns["DATE_SOMEONE_WROTE_REGEXES"]...)
|
|||
|
patterns["FIX_EMBEDDED_REGEX"] = append(patterns["FIX_EMBEDDED_REGEX"], patterns["DATE_SOMEONE_EMAIL_REGEX"]...)
|
|||
|
|
|||
|
}
|