mirror of
https://github.com/redmine/redmine.git
synced 2025-10-31 18:36:07 +01:00
Better handle html-only emails (#16962).
git-svn-id: http://svn.redmine.org/redmine/trunk@14313 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
1
Gemfile
1
Gemfile
@@ -13,6 +13,7 @@ gem "mime-types"
|
|||||||
gem "protected_attributes"
|
gem "protected_attributes"
|
||||||
gem "actionpack-action_caching"
|
gem "actionpack-action_caching"
|
||||||
gem "actionpack-xml_parser"
|
gem "actionpack-xml_parser"
|
||||||
|
gem "loofah", "~> 2.0"
|
||||||
|
|
||||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||||
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin, :jruby]
|
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin, :jruby]
|
||||||
|
|||||||
@@ -433,14 +433,11 @@ class MailHandler < ActionMailer::Base
|
|||||||
@plain_text_body = parts.map do |p|
|
@plain_text_body = parts.map do |p|
|
||||||
body_charset = Mail::RubyVer.respond_to?(:pick_encoding) ?
|
body_charset = Mail::RubyVer.respond_to?(:pick_encoding) ?
|
||||||
Mail::RubyVer.pick_encoding(p.charset).to_s : p.charset
|
Mail::RubyVer.pick_encoding(p.charset).to_s : p.charset
|
||||||
Redmine::CodesetUtil.to_utf8(p.body.decoded, body_charset)
|
|
||||||
end.join("\r\n")
|
|
||||||
|
|
||||||
# strip html tags and remove doctype directive
|
body = Redmine::CodesetUtil.to_utf8(p.body.decoded, body_charset)
|
||||||
if parts.any? {|p| p.mime_type == 'text/html'}
|
# convert html parts to text
|
||||||
@plain_text_body = strip_tags(@plain_text_body.strip)
|
p.mime_type == 'text/html' ? self.class.html_body_to_text(body) : body
|
||||||
@plain_text_body.sub! %r{^<!DOCTYPE .*$}, ''
|
end.join("\r\n")
|
||||||
end
|
|
||||||
|
|
||||||
@plain_text_body
|
@plain_text_body
|
||||||
end
|
end
|
||||||
@@ -454,6 +451,11 @@ class MailHandler < ActionMailer::Base
|
|||||||
subject.strip[0,255]
|
subject.strip[0,255]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Converts a HTML email body to text
|
||||||
|
def self.html_body_to_text(html)
|
||||||
|
Redmine::WikiFormatting.html_parser.to_text(html)
|
||||||
|
end
|
||||||
|
|
||||||
def self.assign_string_attribute_with_limit(object, attribute, value, limit=nil)
|
def self.assign_string_attribute_with_limit(object, attribute, value, limit=nil)
|
||||||
limit ||= object.class.columns_hash[attribute.to_s].limit || 255
|
limit ||= object.class.columns_hash[attribute.to_s].limit || 255
|
||||||
value = value.to_s.slice(0, limit)
|
value = value.to_s.slice(0, limit)
|
||||||
|
|||||||
@@ -267,11 +267,8 @@ Redmine::Search.map do |search|
|
|||||||
end
|
end
|
||||||
|
|
||||||
Redmine::WikiFormatting.map do |format|
|
Redmine::WikiFormatting.map do |format|
|
||||||
format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper
|
format.register :textile
|
||||||
if Object.const_defined?(:Redcarpet)
|
format.register :markdown if Object.const_defined?(:Redcarpet)
|
||||||
format.register :markdown, Redmine::WikiFormatting::Markdown::Formatter, Redmine::WikiFormatting::Markdown::Helper,
|
|
||||||
:label => 'Markdown'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler
|
ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler
|
||||||
|
|||||||
@@ -28,12 +28,19 @@ module Redmine
|
|||||||
yield self
|
yield self
|
||||||
end
|
end
|
||||||
|
|
||||||
def register(name, formatter, helper, options={})
|
def register(name, *args)
|
||||||
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
||||||
name = name.to_s
|
name = name.to_s
|
||||||
raise ArgumentError, "format name '#{name}' is already taken" if @@formatters[name]
|
raise ArgumentError, "format name '#{name}' is already taken" if @@formatters[name]
|
||||||
|
|
||||||
|
formatter, helper, parser = args.any? ?
|
||||||
|
args :
|
||||||
|
%w(Formatter Helper HtmlParser).map {|m| "Redmine::WikiFormatting::#{name.classify}::#{m}".constantize}
|
||||||
|
|
||||||
@@formatters[name] = {
|
@@formatters[name] = {
|
||||||
:formatter => formatter,
|
:formatter => formatter,
|
||||||
:helper => helper,
|
:helper => helper,
|
||||||
|
:html_parser => parser,
|
||||||
:label => options[:label] || name.humanize
|
:label => options[:label] || name.humanize
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@@ -42,6 +49,10 @@ module Redmine
|
|||||||
formatter_for(Setting.text_formatting)
|
formatter_for(Setting.text_formatting)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def html_parser
|
||||||
|
html_parser_for(Setting.text_formatting)
|
||||||
|
end
|
||||||
|
|
||||||
def formatter_for(name)
|
def formatter_for(name)
|
||||||
entry = @@formatters[name.to_s]
|
entry = @@formatters[name.to_s]
|
||||||
(entry && entry[:formatter]) || Redmine::WikiFormatting::NullFormatter::Formatter
|
(entry && entry[:formatter]) || Redmine::WikiFormatting::NullFormatter::Formatter
|
||||||
@@ -52,6 +63,11 @@ module Redmine
|
|||||||
(entry && entry[:helper]) || Redmine::WikiFormatting::NullFormatter::Helper
|
(entry && entry[:helper]) || Redmine::WikiFormatting::NullFormatter::Helper
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def html_parser_for(name)
|
||||||
|
entry = @@formatters[name.to_s]
|
||||||
|
(entry && entry[:html_parser]) || Redmine::WikiFormatting::HtmlParser
|
||||||
|
end
|
||||||
|
|
||||||
def format_names
|
def format_names
|
||||||
@@formatters.keys.map
|
@@formatters.keys.map
|
||||||
end
|
end
|
||||||
|
|||||||
54
lib/redmine/wiki_formatting/html_parser.rb
Normal file
54
lib/redmine/wiki_formatting/html_parser.rb
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2015 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
require 'loofah/helpers'
|
||||||
|
|
||||||
|
module Redmine
|
||||||
|
module WikiFormatting
|
||||||
|
class HtmlParser
|
||||||
|
|
||||||
|
class_attribute :tags
|
||||||
|
self.tags = {
|
||||||
|
'br' => {:post => "\n"}
|
||||||
|
}
|
||||||
|
|
||||||
|
def self.to_text(html)
|
||||||
|
html = html.gsub(/[\n\r]/, '').squeeze(' ')
|
||||||
|
|
||||||
|
doc = Loofah.document(html)
|
||||||
|
doc.scrub!(WikiTags.new(tags))
|
||||||
|
doc.scrub!(:newline_block_elements)
|
||||||
|
|
||||||
|
Loofah::Helpers.remove_extraneous_whitespace(doc.text).strip
|
||||||
|
end
|
||||||
|
|
||||||
|
class WikiTags < ::Loofah::Scrubber
|
||||||
|
def initialize(tags_to_text)
|
||||||
|
@direction = :bottom_up
|
||||||
|
@tags_to_text = tags_to_text || {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def scrub(node)
|
||||||
|
formatting = @tags_to_text[node.name]
|
||||||
|
return CONTINUE unless formatting
|
||||||
|
node.add_next_sibling Nokogiri::XML::Text.new("#{formatting[:pre]}#{node.content}#{formatting[:post]}", node.document)
|
||||||
|
node.remove
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
40
lib/redmine/wiki_formatting/markdown/html_parser.rb
Normal file
40
lib/redmine/wiki_formatting/markdown/html_parser.rb
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2015 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
module Redmine
|
||||||
|
module WikiFormatting
|
||||||
|
module Markdown
|
||||||
|
class HtmlParser < Redmine::WikiFormatting::HtmlParser
|
||||||
|
|
||||||
|
self.tags = {
|
||||||
|
'b' => {:pre => '**', :post => '**'},
|
||||||
|
'strong' => {:pre => '**', :post => '**'},
|
||||||
|
'i' => {:pre => '_', :post => '_'},
|
||||||
|
'em' => {:pre => '_', :post => '_'},
|
||||||
|
'strike' => {:pre => '~~', :post => '~~'},
|
||||||
|
'br' => {:post => "\n"},
|
||||||
|
'h1' => {:pre => "\n\n# ", :post => "\n\n"},
|
||||||
|
'h2' => {:pre => "\n\n## ", :post => "\n\n"},
|
||||||
|
'h3' => {:pre => "\n\n### ", :post => "\n\n"},
|
||||||
|
'h4' => {:pre => "\n\n#### ", :post => "\n\n"},
|
||||||
|
'h5' => {:pre => "\n\n##### ", :post => "\n\n"},
|
||||||
|
'h6' => {:pre => "\n\n###### ", :post => "\n\n"}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
41
lib/redmine/wiki_formatting/textile/html_parser.rb
Normal file
41
lib/redmine/wiki_formatting/textile/html_parser.rb
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2015 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
module Redmine
|
||||||
|
module WikiFormatting
|
||||||
|
module Textile
|
||||||
|
class HtmlParser < Redmine::WikiFormatting::HtmlParser
|
||||||
|
|
||||||
|
self.tags = {
|
||||||
|
'b' => {:pre => '*', :post => '*'},
|
||||||
|
'strong' => {:pre => '*', :post => '*'},
|
||||||
|
'i' => {:pre => '_', :post => '_'},
|
||||||
|
'em' => {:pre => '_', :post => '_'},
|
||||||
|
'u' => {:pre => '+', :post => '+'},
|
||||||
|
'strike' => {:pre => '-', :post => '-'},
|
||||||
|
'br' => {:post => "\n"},
|
||||||
|
'h1' => {:pre => "\n\nh1. ", :post => "\n\n"},
|
||||||
|
'h2' => {:pre => "\n\nh2. ", :post => "\n\n"},
|
||||||
|
'h3' => {:pre => "\n\nh3. ", :post => "\n\n"},
|
||||||
|
'h4' => {:pre => "\n\nh4. ", :post => "\n\n"},
|
||||||
|
'h5' => {:pre => "\n\nh5. ", :post => "\n\n"},
|
||||||
|
'h6' => {:pre => "\n\nh6. ", :post => "\n\n"}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
966
test/fixtures/mail_handler/outlook_2010_html_only.eml
vendored
Normal file
966
test/fixtures/mail_handler/outlook_2010_html_only.eml
vendored
Normal file
@@ -0,0 +1,966 @@
|
|||||||
|
From: jsmith@somenet.foo
|
||||||
|
To: testuser@example.org
|
||||||
|
Subject: =?utf-8?Q?Test_email?=
|
||||||
|
Date: Mon, 11 May 2015 10:50:31 -0500
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: multipart/alternative;
|
||||||
|
boundary="Mark=_539924359269962179476"
|
||||||
|
X-Priority: 3
|
||||||
|
|
||||||
|
This is a multi-part message in MIME format.
|
||||||
|
|
||||||
|
--Mark=_539924359269962179476
|
||||||
|
Content-Type: text/plain;
|
||||||
|
charset="utf-8"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
Simple, unadorned test email generated by Outlook 2010. It is in HTML f=
|
||||||
|
ormat, but no special formatting has been chosen. I=E2=80=99m going to =
|
||||||
|
save this as a draft and then manually drop it into the Inbox for scrap=
|
||||||
|
ing by Redmine 3.0.2.
|
||||||
|
|
||||||
|
--Mark=_539924359269962179476
|
||||||
|
Content-Type: text/html;
|
||||||
|
charset="utf-8"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
<STYLE>
|
||||||
|
pre {
|
||||||
|
white-space: pre-wrap; /* css-3 */
|
||||||
|
white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
|
||||||
|
white-space: -pre-wrap; /* Opera 4-6 */
|
||||||
|
white-space: -o-pre-wrap; /* Opera 7 */
|
||||||
|
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||||
|
}
|
||||||
|
</STYLE>
|
||||||
|
<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-=
|
||||||
|
microsoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:offic=
|
||||||
|
e:word" xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xm=
|
||||||
|
lns=3D"http://www.w3.org/TR/REC-html40"><head><meta name=3DProgId conte=
|
||||||
|
nt=3DWord.Document><meta name=3DGenerator content=3D"Microsoft Word 15"=
|
||||||
|
><meta name=3DOriginator content=3D"Microsoft Word 15"><link rel=3DFile=
|
||||||
|
-List href=3D"cid:filelist.xml@01D08BD8.4D051580"><!--[if gte mso 9]><x=
|
||||||
|
ml>
|
||||||
|
<o:OfficeDocumentSettings>
|
||||||
|
<o:AllowPNG/>
|
||||||
|
</o:OfficeDocumentSettings>
|
||||||
|
</xml><![endif]--><link rel=3DthemeData href=3D"~~themedata~~"><link re=
|
||||||
|
l=3DcolorSchemeMapping href=3D"~~colorschememapping~~"><!--[if gte mso =
|
||||||
|
9]><xml>
|
||||||
|
<w:WordDocument>
|
||||||
|
<w:Zoom>120</w:Zoom>
|
||||||
|
<w:SpellingState>Clean</w:SpellingState>
|
||||||
|
<w:TrackMoves/>
|
||||||
|
<w:TrackFormatting/>
|
||||||
|
<w:EnvelopeVis/>
|
||||||
|
<w:PunctuationKerning/>
|
||||||
|
<w:ValidateAgainstSchemas/>
|
||||||
|
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
|
||||||
|
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
|
||||||
|
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
|
||||||
|
<w:DoNotPromoteQF/>
|
||||||
|
<w:LidThemeOther>EN-US</w:LidThemeOther>
|
||||||
|
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
|
||||||
|
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
|
||||||
|
<w:Compatibility>
|
||||||
|
<w:DoNotExpandShiftReturn/>
|
||||||
|
<w:BreakWrappedTables/>
|
||||||
|
<w:SnapToGridInCell/>
|
||||||
|
<w:WrapTextWithPunct/>
|
||||||
|
<w:UseAsianBreakRules/>
|
||||||
|
<w:DontGrowAutofit/>
|
||||||
|
<w:SplitPgBreakAndParaMark/>
|
||||||
|
<w:EnableOpenTypeKerning/>
|
||||||
|
<w:DontFlipMirrorIndents/>
|
||||||
|
<w:OverrideTableStyleHps/>
|
||||||
|
</w:Compatibility>
|
||||||
|
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
|
||||||
|
<m:mathPr>
|
||||||
|
<m:mathFont m:val=3D"Cambria Math"/>
|
||||||
|
<m:brkBin m:val=3D"before"/>
|
||||||
|
<m:brkBinSub m:val=3D"--"/>
|
||||||
|
<m:smallFrac m:val=3D"off"/>
|
||||||
|
<m:dispDef/>
|
||||||
|
<m:lMargin m:val=3D"0"/>
|
||||||
|
<m:rMargin m:val=3D"0"/>
|
||||||
|
<m:defJc m:val=3D"centerGroup"/>
|
||||||
|
<m:wrapIndent m:val=3D"1440"/>
|
||||||
|
<m:intLim m:val=3D"subSup"/>
|
||||||
|
<m:naryLim m:val=3D"undOvr"/>
|
||||||
|
</m:mathPr></w:WordDocument>
|
||||||
|
</xml><![endif]--><!--[if gte mso 9]><xml>
|
||||||
|
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"false" De=
|
||||||
|
fSemiHidden=3D"false" DefQFormat=3D"false" DefPriority=3D"99" LatentSty=
|
||||||
|
leCount=3D"371">
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"0" QFormat=3D"true" Name=3D=
|
||||||
|
"Normal"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D=
|
||||||
|
"heading 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 7"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 8"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" QFormat=3D"true" Name=3D"heading 9"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 7"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 8"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index 9"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 7"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 8"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"toc 9"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Normal Indent"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"footnote text"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"annotation text"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"header"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"footer"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"index heading"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"35" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" QFormat=3D"true" Name=3D"caption"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"table of figures"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"envelope address"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"envelope return"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"footnote reference"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"annotation reference"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"line number"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"page number"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"endnote reference"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"endnote text"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"table of authorities"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"macro"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"toa heading"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Bullet"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Number"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Bullet 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Bullet 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Bullet 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Bullet 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Number 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Number 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Number 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Number 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"10" QFormat=3D"true" Name=3D=
|
||||||
|
"Title"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Closing"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Signature"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"true" Unh=
|
||||||
|
ideWhenUsed=3D"true" Name=3D"Default Paragraph Font"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text Indent"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Continue"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Continue 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Continue 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Continue 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"List Continue 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Message Header"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"11" QFormat=3D"true" Name=3D=
|
||||||
|
"Subtitle"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Salutation"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Date"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text First Indent"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text First Indent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Note Heading"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text Indent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Body Text Indent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Block Text"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Hyperlink"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"FollowedHyperlink"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"22" QFormat=3D"true" Name=3D=
|
||||||
|
"Strong"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"20" QFormat=3D"true" Name=3D=
|
||||||
|
"Emphasis"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Document Map"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Plain Text"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"E-mail Signature"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Top of Form"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Bottom of Form"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Normal (Web)"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Acronym"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Address"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Cite"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Code"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Definition"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Keyboard"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Preformatted"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Sample"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Typewriter"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"HTML Variable"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Normal Table"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"annotation subject"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"No List"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Outline List 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Outline List 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Outline List 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Simple 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Simple 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Simple 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Classic 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Classic 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Classic 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Classic 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Colorful 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Colorful 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Colorful 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Columns 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Columns 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Columns 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Columns 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Columns 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 7"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Grid 8"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 7"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table List 8"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table 3D effects 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table 3D effects 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table 3D effects 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Contemporary"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Elegant"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Professional"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Subtle 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Subtle 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Web 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Web 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Web 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Balloon Text"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"59" Name=3D"Table Grid"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" UnhideWhenUsed=3D"=
|
||||||
|
true" Name=3D"Table Theme"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" Name=3D"Placeholde=
|
||||||
|
r Text"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"1" QFormat=3D"true" Name=3D=
|
||||||
|
"No Spacing"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List Acc=
|
||||||
|
ent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid Acc=
|
||||||
|
ent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1 Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2 Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1 =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" SemiHidden=3D"true" Name=3D"Revision"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"34" QFormat=3D"true" Name=3D=
|
||||||
|
"List Paragraph"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"29" QFormat=3D"true" Name=3D=
|
||||||
|
"Quote"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"30" QFormat=3D"true" Name=3D=
|
||||||
|
"Intense Quote"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2 =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1 =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2 =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3 =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List Acce=
|
||||||
|
nt 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid =
|
||||||
|
Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List Acc=
|
||||||
|
ent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid Acc=
|
||||||
|
ent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1 Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2 Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1 =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2 =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1 =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2 =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3 =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List Acce=
|
||||||
|
nt 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid =
|
||||||
|
Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List Acc=
|
||||||
|
ent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid Acc=
|
||||||
|
ent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1 Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2 Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1 =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2 =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1 =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2 =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3 =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List Acce=
|
||||||
|
nt 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid =
|
||||||
|
Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List Acc=
|
||||||
|
ent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid Acc=
|
||||||
|
ent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1 Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2 Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1 =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2 =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1 =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2 =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3 =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List Acce=
|
||||||
|
nt 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid =
|
||||||
|
Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List Acc=
|
||||||
|
ent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid Acc=
|
||||||
|
ent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1 Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2 Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1 =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2 =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1 =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2 =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3 =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List Acce=
|
||||||
|
nt 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid =
|
||||||
|
Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"60" Name=3D"Light Shading =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"61" Name=3D"Light List Acc=
|
||||||
|
ent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"62" Name=3D"Light Grid Acc=
|
||||||
|
ent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"63" Name=3D"Medium Shading=
|
||||||
|
1 Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"64" Name=3D"Medium Shading=
|
||||||
|
2 Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"65" Name=3D"Medium List 1 =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"66" Name=3D"Medium List 2 =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"67" Name=3D"Medium Grid 1 =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"68" Name=3D"Medium Grid 2 =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"69" Name=3D"Medium Grid 3 =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"70" Name=3D"Dark List Acce=
|
||||||
|
nt 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"71" Name=3D"Colorful Shadi=
|
||||||
|
ng Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"72" Name=3D"Colorful List =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"73" Name=3D"Colorful Grid =
|
||||||
|
Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"19" QFormat=3D"true" Name=3D=
|
||||||
|
"Subtle Emphasis"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"21" QFormat=3D"true" Name=3D=
|
||||||
|
"Intense Emphasis"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"31" QFormat=3D"true" Name=3D=
|
||||||
|
"Subtle Reference"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"32" QFormat=3D"true" Name=3D=
|
||||||
|
"Intense Reference"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"33" QFormat=3D"true" Name=3D=
|
||||||
|
"Book Title"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"37" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" Name=3D"Bibliography"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"39" SemiHidden=3D"true" Un=
|
||||||
|
hideWhenUsed=3D"true" QFormat=3D"true" Name=3D"TOC Heading"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"41" Name=3D"Plain Table 1"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"42" Name=3D"Plain Table 2"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"43" Name=3D"Plain Table 3"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"44" Name=3D"Plain Table 4"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"45" Name=3D"Plain Table 5"=
|
||||||
|
/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"40" Name=3D"Grid Table Lig=
|
||||||
|
ht"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2 A=
|
||||||
|
ccent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3 A=
|
||||||
|
ccent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4 A=
|
||||||
|
ccent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2 A=
|
||||||
|
ccent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3 A=
|
||||||
|
ccent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4 A=
|
||||||
|
ccent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2 A=
|
||||||
|
ccent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3 A=
|
||||||
|
ccent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4 A=
|
||||||
|
ccent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2 A=
|
||||||
|
ccent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3 A=
|
||||||
|
ccent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4 A=
|
||||||
|
ccent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2 A=
|
||||||
|
ccent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3 A=
|
||||||
|
ccent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4 A=
|
||||||
|
ccent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"Grid Table 1 L=
|
||||||
|
ight Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"Grid Table 2 A=
|
||||||
|
ccent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"Grid Table 3 A=
|
||||||
|
ccent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"Grid Table 4 A=
|
||||||
|
ccent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"Grid Table 5 D=
|
||||||
|
ark Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"Grid Table 6 C=
|
||||||
|
olorful Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"Grid Table 7 C=
|
||||||
|
olorful Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4"/=
|
||||||
|
>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2 A=
|
||||||
|
ccent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3 A=
|
||||||
|
ccent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4 A=
|
||||||
|
ccent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful Accent 1"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2 A=
|
||||||
|
ccent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3 A=
|
||||||
|
ccent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4 A=
|
||||||
|
ccent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful Accent 2"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2 A=
|
||||||
|
ccent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3 A=
|
||||||
|
ccent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4 A=
|
||||||
|
ccent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful Accent 3"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2 A=
|
||||||
|
ccent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3 A=
|
||||||
|
ccent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4 A=
|
||||||
|
ccent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful Accent 4"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2 A=
|
||||||
|
ccent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3 A=
|
||||||
|
ccent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4 A=
|
||||||
|
ccent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful Accent 5"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"46" Name=3D"List Table 1 L=
|
||||||
|
ight Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"47" Name=3D"List Table 2 A=
|
||||||
|
ccent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"48" Name=3D"List Table 3 A=
|
||||||
|
ccent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"49" Name=3D"List Table 4 A=
|
||||||
|
ccent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"50" Name=3D"List Table 5 D=
|
||||||
|
ark Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"51" Name=3D"List Table 6 C=
|
||||||
|
olorful Accent 6"/>
|
||||||
|
<w:LsdException Locked=3D"false" Priority=3D"52" Name=3D"List Table 7 C=
|
||||||
|
olorful Accent 6"/>
|
||||||
|
</w:LatentStyles>
|
||||||
|
</xml><![endif]--><style><!--
|
||||||
|
/* Font Definitions */
|
||||||
|
@font-face
|
||||||
|
{font-family:"Cambria Math";
|
||||||
|
panose-1:2 4 5 3 5 4 6 3 2 4;
|
||||||
|
mso-font-charset:0;
|
||||||
|
mso-generic-font-family:roman;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:-536870145 1107305727 0 0 415 0;}
|
||||||
|
@font-face
|
||||||
|
{font-family:Calibri;
|
||||||
|
panose-1:2 15 5 2 2 2 4 3 2 4;
|
||||||
|
mso-font-alt:"Times New Roman";
|
||||||
|
mso-font-charset:0;
|
||||||
|
mso-generic-font-family:swiss;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:-536870145 1073786111 1 0 415 0;}
|
||||||
|
/* Style Definitions */
|
||||||
|
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-style-qformat:yes;
|
||||||
|
mso-style-parent:"";
|
||||||
|
margin:0in;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:11.0pt;
|
||||||
|
font-family:"Calibri",sans-serif;
|
||||||
|
mso-ascii-font-family:Calibri;
|
||||||
|
mso-ascii-theme-font:minor-latin;
|
||||||
|
mso-fareast-font-family:Calibri;
|
||||||
|
mso-fareast-theme-font:minor-latin;
|
||||||
|
mso-hansi-font-family:Calibri;
|
||||||
|
mso-hansi-theme-font:minor-latin;
|
||||||
|
mso-bidi-font-family:"Times New Roman";
|
||||||
|
mso-bidi-theme-font:minor-bidi;}
|
||||||
|
a:link, span.MsoHyperlink
|
||||||
|
{mso-style-noshow:yes;
|
||||||
|
mso-style-priority:99;
|
||||||
|
color:blue;
|
||||||
|
mso-themecolor:hyperlink;
|
||||||
|
text-decoration:underline;
|
||||||
|
text-underline:single;}
|
||||||
|
a:visited, span.MsoHyperlinkFollowed
|
||||||
|
{mso-style-noshow:yes;
|
||||||
|
mso-style-priority:99;
|
||||||
|
color:purple;
|
||||||
|
mso-themecolor:followedhyperlink;
|
||||||
|
text-decoration:underline;
|
||||||
|
text-underline:single;}
|
||||||
|
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
|
||||||
|
{mso-style-noshow:yes;
|
||||||
|
mso-style-priority:99;
|
||||||
|
mso-style-link:"Plain Text Char";
|
||||||
|
margin:0in;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:11.0pt;
|
||||||
|
mso-bidi-font-size:10.5pt;
|
||||||
|
font-family:"Calibri",sans-serif;
|
||||||
|
mso-fareast-font-family:Calibri;
|
||||||
|
mso-fareast-theme-font:minor-latin;
|
||||||
|
mso-bidi-font-family:"Times New Roman";
|
||||||
|
mso-bidi-theme-font:minor-bidi;}
|
||||||
|
span.PlainTextChar
|
||||||
|
{mso-style-name:"Plain Text Char";
|
||||||
|
mso-style-noshow:yes;
|
||||||
|
mso-style-priority:99;
|
||||||
|
mso-style-unhide:no;
|
||||||
|
mso-style-locked:yes;
|
||||||
|
mso-style-link:"Plain Text";
|
||||||
|
mso-bidi-font-size:10.5pt;
|
||||||
|
font-family:"Calibri",sans-serif;
|
||||||
|
mso-ascii-font-family:Calibri;
|
||||||
|
mso-hansi-font-family:Calibri;}
|
||||||
|
span.EmailStyle19
|
||||||
|
{mso-style-type:personal-compose;
|
||||||
|
mso-style-noshow:yes;
|
||||||
|
mso-style-unhide:no;}
|
||||||
|
.MsoChpDefault
|
||||||
|
{mso-style-type:export-only;
|
||||||
|
mso-default-props:yes;
|
||||||
|
font-size:10.0pt;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
mso-bidi-font-size:10.0pt;
|
||||||
|
font-family:"Calibri",sans-serif;
|
||||||
|
mso-ascii-font-family:Calibri;
|
||||||
|
mso-ascii-theme-font:minor-latin;
|
||||||
|
mso-fareast-font-family:Calibri;
|
||||||
|
mso-fareast-theme-font:minor-latin;
|
||||||
|
mso-hansi-font-family:Calibri;
|
||||||
|
mso-hansi-theme-font:minor-latin;
|
||||||
|
mso-bidi-font-family:"Times New Roman";
|
||||||
|
mso-bidi-theme-font:minor-bidi;}
|
||||||
|
@page WordSection1
|
||||||
|
{size:8.5in 11.0in;
|
||||||
|
margin:1.0in 1.0in 1.0in 1.0in;
|
||||||
|
mso-header-margin:.5in;
|
||||||
|
mso-footer-margin:.5in;
|
||||||
|
mso-paper-source:0;}
|
||||||
|
div.WordSection1
|
||||||
|
{page:WordSection1;}
|
||||||
|
--></style><!--[if gte mso 10]><style>/* Style Definitions */
|
||||||
|
table.MsoNormalTable
|
||||||
|
{mso-style-name:"Table Normal";
|
||||||
|
mso-tstyle-rowband-size:0;
|
||||||
|
mso-tstyle-colband-size:0;
|
||||||
|
mso-style-noshow:yes;
|
||||||
|
mso-style-priority:99;
|
||||||
|
mso-style-parent:"";
|
||||||
|
mso-padding-alt:0in 5.4pt 0in 5.4pt;
|
||||||
|
mso-para-margin:0in;
|
||||||
|
mso-para-margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:10.0pt;
|
||||||
|
font-family:"Calibri",sans-serif;
|
||||||
|
mso-ascii-font-family:Calibri;
|
||||||
|
mso-ascii-theme-font:minor-latin;
|
||||||
|
mso-hansi-font-family:Calibri;
|
||||||
|
mso-hansi-theme-font:minor-latin;}
|
||||||
|
</style><![endif]--><!--[if gte mso 9]><xml>
|
||||||
|
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
|
||||||
|
</xml><![endif]--><!--[if gte mso 9]><xml>
|
||||||
|
<o:shapelayout v:ext=3D"edit">
|
||||||
|
<o:idmap v:ext=3D"edit" data=3D"1" />
|
||||||
|
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue=
|
||||||
|
vlink=3Dpurple style=3D'tab-interval:.5in'><div class=3DWordSection1><=
|
||||||
|
p class=3DMsoPlainText>Simple, unadorned test email generated by Outloo=
|
||||||
|
k 2010. It is in HTML format, but no special formatting has been chosen=
|
||||||
|
. I=E2=80=99m going to save this as a draft and then manually drop it i=
|
||||||
|
nto the Inbox for scraping by Redmine 3.0.2.<o:p></o:p></p></div></body=
|
||||||
|
></html>
|
||||||
|
|
||||||
|
--Mark=_539924359269962179476--
|
||||||
65
test/fixtures/mail_handler/outlook_web_access_2010_html_only.eml
vendored
Normal file
65
test/fixtures/mail_handler/outlook_web_access_2010_html_only.eml
vendored
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
From: "John Smith" <jsmith@somenet.foo>
|
||||||
|
To: redmine <r@MYCOMPANYNAME.com>
|
||||||
|
Subject: Upgrade Redmine to 3.0.x
|
||||||
|
Thread-Topic: Upgrade Redmine to 3.0.x
|
||||||
|
Thread-Index: AQHQknBe94y5Or7Yl02JransMRF41p2Dv6Hu
|
||||||
|
Date: Tue, 19 May 2015 16:27:43 -0400
|
||||||
|
Message-ID: <A2D341A8808F024CAFA63F1287B9929CF1BC440F@EMBX01.exch.local>
|
||||||
|
Accept-Language: en-US
|
||||||
|
Content-Language: en-US
|
||||||
|
X-MS-Exchange-Organization-AuthAs: Internal
|
||||||
|
X-MS-Exchange-Organization-AuthMechanism: 04
|
||||||
|
X-MS-Exchange-Organization-AuthSource: EHUB01.exch.local
|
||||||
|
X-MS-Has-Attach:
|
||||||
|
X-MS-Exchange-Organization-SCL: -1
|
||||||
|
X-MS-TNEF-Correlator:
|
||||||
|
Content-Type: text/html; charset="iso-8859-1"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
MIME-Version: 1.0
|
||||||
|
|
||||||
|
<html dir=3D"ltr">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
|
||||||
|
1">
|
||||||
|
<style>=0A=
|
||||||
|
<!--=0A=
|
||||||
|
body=0A=
|
||||||
|
{font-family:Verdana,sans-serif;=0A=
|
||||||
|
font-size:0.8em;=0A=
|
||||||
|
color:#484848}=0A=
|
||||||
|
h1, h2, h3=0A=
|
||||||
|
{font-family:"Trebuchet MS",Verdana,sans-serif;=0A=
|
||||||
|
margin:0px}=0A=
|
||||||
|
h1=0A=
|
||||||
|
{font-size:1.2em}=0A=
|
||||||
|
h2, h3=0A=
|
||||||
|
{font-size:1.1em}=0A=
|
||||||
|
a, a:link, a:visited=0A=
|
||||||
|
{color:#2A5685}=0A=
|
||||||
|
a:hover, a:active=0A=
|
||||||
|
{color:#c61a1a}=0A=
|
||||||
|
fieldset.attachments=0A=
|
||||||
|
{border-width:1px 0 0 0}=0A=
|
||||||
|
hr=0A=
|
||||||
|
{width:100%;=0A=
|
||||||
|
height:1px;=0A=
|
||||||
|
background:#ccc;=0A=
|
||||||
|
border:0}=0A=
|
||||||
|
span.footer=0A=
|
||||||
|
{font-size:0.8em;=0A=
|
||||||
|
font-style:italic}=0A=
|
||||||
|
-->=0A=
|
||||||
|
</style><style id=3D"owaParaStyle" type=3D"text/css">P {margin-top:0;margin=
|
||||||
|
-bottom:0;}</style>
|
||||||
|
</head>
|
||||||
|
<body ocsi=3D"0" fpstyle=3D"1">
|
||||||
|
<div style=3D"direction: ltr;font-family: Tahoma;color: #000000;font-size: =
|
||||||
|
10pt;">A mess.<br>
|
||||||
|
<div><br>
|
||||||
|
<div style=3D"font-family:Tahoma; font-size:13px">--Geoff Maciolek<br>
|
||||||
|
MYCOMPANYNAME, LLC<br>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -15,8 +15,9 @@ Content-Transfer-Encoding: 7bit
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
<style>p {font-size:12.0pt;}</style>
|
||||||
</head>
|
</head>
|
||||||
<body bgcolor="#ffffff" text="#000000">
|
<body bgcolor="#ffffff" text="#000000">
|
||||||
This is a <b>html-only</b> email.<br>
|
This is a <b>html-only</b> email.<br><h1>With a title</h1><p>and a paragraph.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
30
test/unit/lib/redmine/wiki_formatting/html_parser_test.rb
Normal file
30
test/unit/lib/redmine/wiki_formatting/html_parser_test.rb
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2015 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
require File.expand_path('../../../../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class Redmine::WikiFormatting::HtmlParserTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@parser = Redmine::WikiFormatting::HtmlParser
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_convert_line_breaks
|
||||||
|
assert_equal "A html snippet with\na new line.",
|
||||||
|
@parser.to_text('<p>A html snippet with<br>a new line.</p>')
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2015 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
require File.expand_path('../../../../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class Redmine::WikiFormatting::MarkdownHtmlParserTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@parser = Redmine::WikiFormatting::Markdown::HtmlParser
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_should_convert_tags
|
||||||
|
assert_equal 'A **simple** html snippet.',
|
||||||
|
@parser.to_text('<p>A <b>simple</b> html snippet.</p>')
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2015 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
require File.expand_path('../../../../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class Redmine::WikiFormatting::TextileHtmlParserTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@parser = Redmine::WikiFormatting::Textile::HtmlParser
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_should_convert_tags
|
||||||
|
assert_equal 'A *simple* html snippet.',
|
||||||
|
@parser.to_text('<p>A <b>simple</b> html snippet.</p>')
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -797,13 +797,33 @@ class MailHandlerTest < ActiveSupport::TestCase
|
|||||||
assert_equal Message.find(1), m.parent
|
assert_equal Message.find(1), m.parent
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_should_strip_tags_of_html_only_emails
|
def test_should_convert_tags_of_html_only_emails
|
||||||
issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
|
with_settings :text_formatting => 'textile' do
|
||||||
|
issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
|
||||||
|
assert issue.is_a?(Issue)
|
||||||
|
assert !issue.new_record?
|
||||||
|
issue.reload
|
||||||
|
assert_equal 'HTML email', issue.subject
|
||||||
|
assert_equal "This is a *html-only* email.\r\n\r\nh1. With a title\r\n\r\nand a paragraph.", issue.description
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_should_handle_outlook_web_access_2010_html_only
|
||||||
|
issue = submit_email('outlook_web_access_2010_html_only.eml', :issue => {:project => 'ecookbook'})
|
||||||
assert issue.is_a?(Issue)
|
assert issue.is_a?(Issue)
|
||||||
assert !issue.new_record?
|
|
||||||
issue.reload
|
issue.reload
|
||||||
assert_equal 'HTML email', issue.subject
|
assert_equal 'Upgrade Redmine to 3.0.x', issue.subject
|
||||||
assert_equal 'This is a html-only email.', issue.description
|
assert_equal "A mess.\r\n\r\n--Geoff Maciolek\r\nMYCOMPANYNAME, LLC", issue.description
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_should_handle_outlook_2010_html_only
|
||||||
|
issue = submit_email('outlook_2010_html_only.eml', :issue => {:project => 'ecookbook'})
|
||||||
|
assert issue.is_a?(Issue)
|
||||||
|
issue.reload
|
||||||
|
assert_equal 'Test email', issue.subject
|
||||||
|
assert_equal "Simple, unadorned test email generated by Outlook 2010. It is in HTML format, but" +
|
||||||
|
" no special formatting has been chosen. I’m going to save this as a draft and then manually" +
|
||||||
|
" drop it into the Inbox for scraping by Redmine 3.0.2.", issue.description
|
||||||
end
|
end
|
||||||
|
|
||||||
test "truncate emails with no setting should add the entire email into the issue" do
|
test "truncate emails with no setting should add the entire email into the issue" do
|
||||||
|
|||||||
Reference in New Issue
Block a user