html2doc 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89f05f87cd25266b64654929b7087a07c912fcf8b24beb33f2faceb5123da190
4
- data.tar.gz: de12518aafb1ac65bf1f4addf76f16ff246c58aa99561e321dc3d8af7cd0a623
3
+ metadata.gz: f1d55301cebf98f75ddfd8966237d19c39bae1c9c8b4b01a39f124ca5da8e588
4
+ data.tar.gz: a84cd4d87e2cf1c9f107300c883b6b6b85496e2067e76d7f0a282feecf6550c1
5
5
  SHA512:
6
- metadata.gz: 535aa46b12785253d9b5ebacf7f0c70f2f7045a5367dbf3ae2c023188a6005be39f6f003574d7855ca8ca2e757ddcde2f5128602e18156699248281fa6db4502
7
- data.tar.gz: 5452e2880c9ba6f231d02039e5f2b2054e5535c903539f34804c65aeb77b63361994fd604f9d3d92ce808244fa5c46e9fc790f747041955606a1a474bdd02449
6
+ metadata.gz: 2ef21ec975f624420db8ee706ab1997ab7941bb7e9f75bfaecdde056346a08f73842cd151ad6f5c7a9711a0616ccc61177bd24f17693f8c31c6db70e7aa78088
7
+ data.tar.gz: c204dfcb3f27a24f86908195d47287c74daaaa41d02de5f28fbb99167b17895f7b46e27971ae533c18874f09ed2d32d4205c6dcd9c6ee6b9e045a9dc06656bfa
@@ -0,0 +1,42 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: rake
4
+
5
+ on:
6
+ push:
7
+ branches: [ master, main ]
8
+ tags: [ v* ]
9
+ pull_request:
10
+
11
+ jobs:
12
+ rake:
13
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
14
+ runs-on: ${{ matrix.os }}
15
+ continue-on-error: ${{ matrix.experimental }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ ruby: [ '2.7', '2.6', '2.5', '2.4' ]
20
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
21
+ experimental: [ false ]
22
+ include:
23
+ - ruby: '3.0'
24
+ os: 'ubuntu-latest'
25
+ experimental: true
26
+ - ruby: '3.0'
27
+ os: 'windows-latest'
28
+ experimental: true
29
+ - ruby: '3.0'
30
+ os: 'macos-latest'
31
+ experimental: true
32
+ steps:
33
+ - uses: actions/checkout@v2
34
+ with:
35
+ submodules: true
36
+
37
+ - uses: ruby/setup-ruby@v1
38
+ with:
39
+ ruby-version: ${{ matrix.ruby }}
40
+ bundler-cache: true
41
+
42
+ - run: bundle exec rake
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ .rubocop-https--*
data/.rubocop.yml CHANGED
@@ -1,10 +1,14 @@
1
1
  # This project follows the Ribose OSS style guide.
2
2
  # https://github.com/riboseinc/oss-guides
3
3
  # All project-specific additions and overrides should be specified in this file.
4
-
5
4
  inherit_from:
6
5
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
6
+
7
+ # local repo-specific modifications
8
+
7
9
  AllCops:
8
- TargetRubyVersion: 2.3
10
+ DisplayCopNames: false
11
+ StyleGuideCopsOnly: false
12
+ TargetRubyVersion: 2.4
9
13
  Rails:
10
14
  Enabled: true
data/README.adoc CHANGED
@@ -3,9 +3,7 @@
3
3
  https://github.com/metanorma/html2doc/workflows/main/badge.svg
4
4
 
5
5
  image:https://img.shields.io/gem/v/html2doc.svg["Gem Version", link="https://rubygems.org/gems/html2doc"]
6
- image:https://github.com/metanorma/html2doc/workflows/ubuntu/badge.svg["Ubuntu Build Status", link="https://github.com/metanorma/html2doc/actions?query=workflow%3Aubuntu"]
7
- image:https://github.com/metanorma/html2doc/workflows/macos/badge.svg["OSX Build Status", link="https://github.com/metanorma/html2doc/actions?query=workflow%3Amacos"]
8
- image:https://github.com/metanorma/html2doc/workflows/windows/badge.svg["Windows Build Status", link="https://github.com/metanorma/html2doc/actions?query=workflow%3Awindows"]
6
+ image:https://github.com/metanorma/html2doc/workflows/rake/badge.svg["Build Status", link="https://github.com/metanorma/html2doc/actions?workflow=rake"]
9
7
  image:https://codeclimate.com/github/metanorma/html2doc/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/html2doc"]
10
8
  image:https://img.shields.io/github/issues-pr-raw/metanorma/html2doc.svg["Pull Requests", link="https://github.com/metanorma/html2doc/pulls"]
11
9
  image:https://img.shields.io/github/commits-since/metanorma/html2doc/latest.svg["Commits since latest",link="https://github.com/metanorma/html2doc/releases"]
data/html2doc.gemspec CHANGED
@@ -28,10 +28,11 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency "htmlentities", "~> 4.3.4"
29
29
  spec.add_dependency "image_size"
30
30
  spec.add_dependency "mime-types"
31
- spec.add_dependency "nokogiri", ">= 1.10.4"
31
+ spec.add_dependency "nokogiri", "~> 1.10.4"
32
32
  spec.add_dependency "thread_safe"
33
33
  spec.add_dependency "uuidtools"
34
- spec.add_dependency "asciimath", "~> 2.0.0"
34
+ spec.add_dependency "asciimath", "~> 2.0.2"
35
+ spec.add_dependency "plane1converter", "~> 0.0.1"
35
36
 
36
37
  spec.add_development_dependency "byebug", "~> 9.1"
37
38
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
@@ -39,7 +40,7 @@ Gem::Specification.new do |spec|
39
40
  spec.add_development_dependency "guard-rspec", "~> 4.7"
40
41
  spec.add_development_dependency "rake", "~> 12.0"
41
42
  spec.add_development_dependency "rspec", "~> 3.6"
42
- spec.add_development_dependency "rubocop", "= 0.54.0"
43
+ spec.add_development_dependency "rubocop", "~> 1.5.2"
43
44
  spec.add_development_dependency "simplecov", "~> 0.15"
44
45
  spec.add_development_dependency "timecop", "~> 0.9"
45
46
  spec.add_development_dependency "rspec-match_fuzzy", "~> 0.1.3"
data/lib/html2doc/base.rb CHANGED
@@ -24,11 +24,19 @@ module Html2Doc
24
24
  File.open("#{hash[:dir1]}/header.html", "w:UTF-8") { |f| f.write(doc) }
25
25
  end
26
26
 
27
+ def self.clear_dir(dir)
28
+ Dir.foreach(dir) do |f|
29
+ fn = File.join(dir, f)
30
+ File.delete(fn) if f != '.' && f != '..'
31
+ end
32
+ dir
33
+ end
34
+
27
35
  def self.create_dir(filename, dir)
28
- return dir if dir
36
+ dir and return clear_dir(dir)
29
37
  dir = "#{filename}_files"
30
38
  Dir.mkdir(dir) unless File.exists?(dir)
31
- dir
39
+ clear_dir(dir)
32
40
  end
33
41
 
34
42
  def self.process_html(result, hash)
@@ -123,18 +131,19 @@ module Html2Doc
123
131
  docxml.xpath("//*[local-name() = 'head']").each do |h|
124
132
  h.children.first.add_previous_sibling <<~XML
125
133
  #{PRINT_VIEW}
126
- <link rel="File-List" href="#{File.basename(dir)}/filelist.xml"/>
134
+ <link rel="File-List" href="cid:filelist.xml"/>
127
135
  XML
128
136
  end
129
137
  end
130
138
 
131
139
  def self.filename_substitute(stylesheet, header_filename, filename)
132
140
  if header_filename.nil?
133
- stylesheet.gsub!(/\n[^\n]*FILENAME[^\n]*i\n/, "\n")
141
+ stylesheet
134
142
  else
135
- stylesheet.gsub!(/FILENAME/, File.basename(filename))
143
+ stylesheet.gsub(/url\("[^"]+"\)/) do |m|
144
+ /FILENAME/.match(m) ? "url(cid:header.html)" : m
145
+ end
136
146
  end
137
- stylesheet
138
147
  end
139
148
 
140
149
  def self.stylesheet(filename, header_filename, fn)
data/lib/html2doc/math.rb CHANGED
@@ -2,6 +2,7 @@ require "uuidtools"
2
2
  require "asciimath"
3
3
  require "htmlentities"
4
4
  require "nokogiri"
5
+ require "plane1converter"
5
6
 
6
7
  module Html2Doc
7
8
  @xsltemplate =
@@ -9,9 +10,15 @@ module Html2Doc
9
10
  encoding: "utf-8"))
10
11
 
11
12
  def self.asciimath_to_mathml1(x)
12
- AsciiMath::MathMLBuilder.new(:msword => true).append_expression(
13
- AsciiMath.parse(HTMLEntities.new.decode(x)).ast).to_s.
14
- gsub(/<math>/, "<math xmlns='http://www.w3.org/1998/Math/MathML'>")
13
+ begin
14
+ AsciiMath::MathMLBuilder.new(:msword => true).append_expression(
15
+ AsciiMath.parse(HTMLEntities.new.decode(x)).ast).to_s.
16
+ gsub(/<math>/, "<math xmlns='http://www.w3.org/1998/Math/MathML'>")
17
+ rescue StandardError => e
18
+ puts "parsing: #{x}"
19
+ puts e.message
20
+ raise e
21
+ end
15
22
  end
16
23
 
17
24
  def self.asciimath_to_mathml(doc, delims)
@@ -25,20 +32,93 @@ module Html2Doc
25
32
  end.join
26
33
  end
27
34
 
35
+ def self.unwrap_accents(doc)
36
+ doc.xpath("//*[@accent = 'true']").each do |x|
37
+ x.elements.length > 1 or next
38
+ x.elements[1].name == "mrow" and
39
+ x.elements[1].replace(x.elements[1].children)
40
+ end
41
+ doc
42
+ end
43
+
28
44
  # random fixes to MathML input that OOXML needs to render properly
29
45
  def self.ooxml_cleanup(m, docnamespaces)
46
+ m = unwrap_accents(mathml_preserve_space(
47
+ mathml_insert_rows(m, docnamespaces), docnamespaces))
48
+ m.add_namespace(nil, "http://www.w3.org/1998/Math/MathML")
49
+ m
50
+ end
51
+
52
+ def self.mathml_insert_rows(m, docnamespaces)
30
53
  m.xpath(%w(msup msub msubsup munder mover munderover).
31
54
  map { |m| ".//xmlns:#{m}" }.join(" | "), docnamespaces).each do |x|
32
55
  next unless x.next_element && x.next_element != "mrow"
33
56
  x.next_element.wrap("<mrow/>")
34
57
  end
58
+ m
59
+ end
60
+
61
+ def self.mathml_preserve_space(m, docnamespaces)
35
62
  m.xpath(".//xmlns:mtext", docnamespaces).each do |x|
36
63
  x.children = x.children.to_xml.gsub(/^\s/, "&#xA0;").gsub(/\s$/, "&#xA0;")
37
64
  end
38
- m.add_namespace(nil, "http://www.w3.org/1998/Math/MathML")
39
65
  m
40
66
  end
41
67
 
68
+ def self.unitalic(m)
69
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:scr)]/xmlns:sty[@m:val = 'p']]").each do |x|
70
+ x.wrap("<span style='font-style:normal;'></span>")
71
+ end
72
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:scr)]/xmlns:sty[@m:val = 'bi']]").each do |x|
73
+ x.wrap("<span class='nostem' style='font-weight:bold;'><em></em></span>")
74
+ end
75
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:scr)]/xmlns:sty[@m:val = 'i']]").each do |x|
76
+ x.wrap("<span class='nostem'><em></em></span>")
77
+ end
78
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:scr)]/xmlns:sty[@m:val = 'b']]").each do |x|
79
+ x.wrap("<span style='font-style:normal;font-weight:bold;'></span>")
80
+ end
81
+ m.xpath(".//xmlns:r[xmlns:rPr/xmlns:scr[@m:val = 'monospace']]").each do |x|
82
+ toPlane1(x, :monospace)
83
+ end
84
+ m.xpath(".//xmlns:r[xmlns:rPr/xmlns:scr[@m:val = 'double-struck']]").each do |x|
85
+ toPlane1(x, :doublestruck)
86
+ end
87
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:sty) or xmlns:sty/@m:val = 'p']/xmlns:scr[@m:val = 'script']]").each do |x|
88
+ toPlane1(x, :script)
89
+ end
90
+ m.xpath(".//xmlns:r[xmlns:rPr[xmlns:sty/@m:val = 'b']/xmlns:scr[@m:val = 'script']]").each do |x|
91
+ toPlane1(x, :scriptbold)
92
+ end
93
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:sty) or xmlns:sty/@m:val = 'p']/xmlns:scr[@m:val = 'fraktur']]").each do |x|
94
+ toPlane1(x, :fraktur)
95
+ end
96
+ m.xpath(".//xmlns:r[xmlns:rPr[xmlns:sty/@m:val = 'b']/xmlns:scr[@m:val = 'fraktur']]").each do |x|
97
+ toPlane1(x, :frakturbold)
98
+ end
99
+ m.xpath(".//xmlns:r[xmlns:rPr[not(xmlns:sty) or xmlns:sty/@m:val = 'p']/xmlns:scr[@m:val = 'sans-serif']]").each do |x|
100
+ toPlane1(x, :sans)
101
+ end
102
+ m.xpath(".//xmlns:r[xmlns:rPr[xmlns:sty/@m:val = 'b']/xmlns:scr[@m:val = 'sans-serif']]").each do |x|
103
+ toPlane1(x, :sansbold)
104
+ end
105
+ m.xpath(".//xmlns:r[xmlns:rPr[xmlns:sty/@m:val = 'i']/xmlns:scr[@m:val = 'sans-serif']]").each do |x|
106
+ toPlane1(x, :sansitalic)
107
+ end
108
+ m.xpath(".//xmlns:r[xmlns:rPr[xmlns:sty/@m:val = 'bi']/xmlns:scr[@m:val = 'sans-serif']]").each do |x|
109
+ toPlane1(x, :sansbolditalic)
110
+ end
111
+ m
112
+ end
113
+
114
+ def self.toPlane1(x, font)
115
+ x.traverse do |n|
116
+ next unless n.text?
117
+ n.replace(Plane1Converter.conv(HTMLEntities.new.decode(n.text), font))
118
+ end
119
+ x
120
+ end
121
+
42
122
  def self.mathml_to_ooml(docxml)
43
123
  docnamespaces = docxml.collect_namespaces
44
124
  m = docxml.xpath("//*[local-name() = 'math']")
@@ -48,10 +128,10 @@ module Html2Doc
48
128
  element = ooxml_cleanup(x, docnamespaces)
49
129
  doc = Nokogiri::XML::Document::new()
50
130
  doc.root = element
51
- ooxml = (esc_space(@xsltemplate.transform(doc))).to_s.
131
+ ooxml = (unitalic(esc_space(@xsltemplate.transform(doc)))).to_s.
52
132
  gsub(/<\?[^>]+>\s*/, "").
53
133
  gsub(/ xmlns(:[^=]+)?="[^"]+"/, "").
54
- gsub(%r{<(/)?([a-z])}, "<\\1m:\\2")
134
+ gsub(%r{<(/)?(?!span)(?!em)([a-z])}, "<\\1m:\\2")
55
135
  ooxml = uncenter(x, ooxml)
56
136
  x.swap(ooxml)
57
137
  end
data/lib/html2doc/mime.rb CHANGED
@@ -11,7 +11,8 @@ module Html2Doc
11
11
  Content-Type: multipart/related; boundary="#{boundary}"
12
12
 
13
13
  --#{boundary}
14
- Content-Location: file:///C:/Doc/#{File.basename(filename)}.htm
14
+ Content-ID: <#{File.basename(filename)}>
15
+ Content-Disposition: inline; filename="#{File.basename(filename)}"
15
16
  Content-Type: text/html; charset="utf-8"
16
17
 
17
18
  #{result}
@@ -29,7 +30,8 @@ module Html2Doc
29
30
  encoded_file = Base64.strict_encode64(content).gsub(/(.{76})/, "\\1\n")
30
31
  <<~"FILE"
31
32
  --#{boundary}
32
- Content-Location: file:///C:/Doc/#{File.basename(filename)}_files/#{item}
33
+ Content-ID: <#{File.basename(item)}>
34
+ Content-Disposition: inline; filename="#{File.basename(item)}"
33
35
  Content-Transfer-Encoding: base64
34
36
  Content-Type: #{content_type}
35
37
 
@@ -52,15 +54,22 @@ module Html2Doc
52
54
 
53
55
  def self.mime_package(result, filename, dir)
54
56
  boundary = mime_boundary
55
- mhtml = mime_preamble(boundary, filename, result)
56
- mhtml += mime_attachment(boundary, filename, "filelist.xml", dir)
57
+ mhtml = mime_preamble(boundary, "#{filename}.htm", result)
58
+ mhtml += mime_attachment(boundary, "#{filename}.htm", "filelist.xml", dir)
57
59
  Dir.foreach(dir) do |item|
58
60
  next if item == "." || item == ".." || /^\./.match(item) ||
59
61
  item == "filelist.xml"
60
- mhtml += mime_attachment(boundary, filename, item, dir)
62
+ mhtml += mime_attachment(boundary, "#{filename}.htm", item, dir)
61
63
  end
62
64
  mhtml += "--#{boundary}--"
63
- File.open("#{filename}.doc", "w:UTF-8") { |f| f.write mhtml }
65
+ File.open("#{filename}.doc", "w:UTF-8") { |f| f.write contentid(mhtml) }
66
+ end
67
+
68
+ def self.contentid(mhtml)
69
+ mhtml.gsub %r{(<img[^>]*?src=")([^\"']+)(['"])}m do |m|
70
+ repl = "#{$1}cid:#{File.basename($2)}#{$3}"
71
+ /^data:|^https?:/.match($2) ? m : repl
72
+ end
64
73
  end
65
74
 
66
75
  # max width for Word document is 400, max height is 680
@@ -68,7 +77,7 @@ module Html2Doc
68
77
  realSize = ImageSize.path(path).size
69
78
  s = [i["width"].to_i, i["height"].to_i]
70
79
  s = realSize if s[0].zero? && s[1].zero?
71
- return [nil, nil] if realSize[0].nil? || realSize[1].nil?
80
+ return [nil, nil] if realSize.nil? || realSize[0].nil? || realSize[1].nil?
72
81
  s[1] = s[0] * realSize[1] / realSize[0] if s[1].zero? && !s[0].zero?
73
82
  s[0] = s[1] * realSize[0] / realSize[1] if s[0].zero? && !s[1].zero?
74
83
  s = [(s[0] * maxheight / s[1]).ceil, maxheight] if s[1] > maxheight
@@ -92,7 +101,7 @@ module Html2Doc
92
101
  next unless i.element? && %w(img v:imagedata).include?(i.name)
93
102
  #warnsvg(i["src"])
94
103
  next if /^http/.match i["src"]
95
- next if %r{^data:image/[^;]+;base64}.match i["src"]
104
+ next if %r{^data:(image|application)/[^;]+;base64}.match i["src"]
96
105
  local_filename = %r{^([A-Z]:)?/}.match(i["src"]) ? i["src"] :
97
106
  File.join(localdir, i["src"])
98
107
  new_filename = "#{mkuuid}#{File.extname(i["src"])}"
@@ -113,14 +122,14 @@ module Html2Doc
113
122
 
114
123
  def self.header_image_cleanup1(a, dir, filename, localdir)
115
124
  if a.size == 2 && !(/ src="https?:/.match a[1]) &&
116
- !(%r{ src="data:image/[^;]+;base64}.match a[1])
125
+ !(%r{ src="data:(image|application)/[^;]+;base64}.match a[1])
117
126
  m = / src=['"](?<src>[^"']+)['"]/.match a[1]
118
127
  #warnsvg(m[:src])
119
128
  m2 = /\.(?<suffix>[a-zA-Z_0-9]+)$/.match m[:src]
120
129
  new_filename = "#{mkuuid}.#{m2[:suffix]}"
121
130
  old_filename = %r{^([A-Z]:)?/}.match(m[:src]) ? m[:src] : File.join(localdir, m[:src])
122
131
  FileUtils.cp old_filename, File.join(dir, new_filename)
123
- a[1].sub!(%r{ src=['"](?<src>[^"']+)['"]}, " src='file:///C:/Doc/#{filename}_files/#{new_filename}'")
132
+ a[1].sub!(%r{ src=['"](?<src>[^"']+)['"]}, " src='cid:#{new_filename}'")
124
133
  end
125
134
  a.join
126
135
  end
@@ -878,9 +878,21 @@
878
878
  </xsl:otherwise>
879
879
  </xsl:choose>
880
880
  </xsl:if>
881
- </xsl:variable>
881
+ </xsl:variable>
882
+ <!-- NN 20200831 https://github.com/metanorma/metanorma-nist/issues/155 Read in ancestor mstyle -->
883
+ <xsl:variable name="mathvariant2">
884
+ <xsl:choose>
885
+ <xsl:when test="$mathvariant=''">
886
+ <xsl:value-of select="$ndCur/ancestor::mml:mstyle[@mathvariant][1]/@mathvariant"/>
887
+ </xsl:when>
888
+ <xsl:otherwise>
889
+ <xsl:value-of select="$mathvariant"/>
890
+ </xsl:otherwise>
891
+ </xsl:choose>
892
+ </xsl:variable>
893
+ <!-- END NN -->
882
894
  <xsl:call-template name="CreateMathRPR">
883
- <xsl:with-param name="mathvariant" select="$mathvariant"/>
895
+ <xsl:with-param name="mathvariant" select="$mathvariant2"/>
884
896
  <xsl:with-param name="fontstyle" select="$fontstyle"/>
885
897
  <xsl:with-param name="fontweight" select="$fontweight"/>
886
898
  <xsl:with-param name="ndCur" select="$ndCur"/>
@@ -905,7 +917,7 @@
905
917
  <xsl:with-param name="fontweight" select="$fontweight"/>
906
918
  <xsl:with-param name="ndCur" select="$ndCur"/>
907
919
  </xsl:call-template>
908
- </xsl:variable>
920
+ </xsl:variable>
909
921
  <xsl:if test="$fLit=1 or $fNor=1 or ($sFontCur!='italic' and $sFontCur!='')">
910
922
  <rPr>
911
923
  <xsl:if test="$fNor=1">
@@ -919,7 +931,7 @@
919
931
  <xsl:with-param name="fNor" select="$fNor"/>
920
932
  </xsl:call-template>
921
933
  </rPr>
922
- </xsl:if>
934
+ </xsl:if>
923
935
  </xsl:template>
924
936
 
925
937
  <!-- %%Template: GetFontCur
@@ -935,8 +947,10 @@
935
947
  </xsl:when>
936
948
  <xsl:when test="not($ndCur)">
937
949
  <xsl:value-of select="'italic'"/>
938
- </xsl:when>
939
- <xsl:when test="$ndCur/self::mml:mi and (string-length(normalize-space($ndCur)) &lt;= 1) or $ndCur/self::mml:mn and string(number($ndCur/text()))!='NaN' or $ndCur/self::mml:mo">
950
+ </xsl:when>
951
+ <!--<xsl:when test="$ndCur/self::mml:mi and (string-length(normalize-space($ndCur)) &lt;= 1) or $ndCur/self::mml:mn and string(number($ndCur/text()))!='NaN' or $ndCur/self::mml:mo">-->
952
+ <!-- https://github.com/metanorma/metanorma-nist/issues/155 : DO NOT italicise mml:mo -->
953
+ <xsl:when test="$ndCur/self::mml:mi and (string-length(normalize-space($ndCur)) &lt;= 1) or $ndCur/self::mml:mn and string(number($ndCur/text()))!='NaN'">
940
954
 
941
955
  <!-- The default for the above three cases is fontstyle=italic fontweight=normal.-->
942
956
  <xsl:choose>
@@ -1000,6 +1014,12 @@
1000
1014
  </sty>
1001
1015
  </xsl:when>
1002
1016
  <xsl:when test="$font='italic'">
1017
+ <!-- NN 20200901 https://github.com/metanorma/metanorma-itu/issues/173 italic needs to be added explicitly to mtext -->
1018
+ <xsl:if test="$fNor=1">
1019
+ <sty>
1020
+ <xsl:attribute name="m:val">i</xsl:attribute>
1021
+ </sty>
1022
+ </xsl:if>
1003
1023
  </xsl:when>
1004
1024
  <xsl:when test="$font='script'">
1005
1025
  <scr>
@@ -1067,8 +1087,16 @@
1067
1087
  <xsl:attribute name="m:val">bi</xsl:attribute>
1068
1088
  </sty>
1069
1089
  </xsl:when>
1070
- <xsl:when test="$font='monospace'"/>
1090
+ <xsl:when test="$font='monospace'">
1071
1091
  <!-- We can't do monospace, so leave empty -->
1092
+ <!-- NN 2020 https://github.com/metanorma/html2doc/issues/47 no, we will -->
1093
+ <scr>
1094
+ <xsl:attribute name="m:val">monospace</xsl:attribute>
1095
+ </scr>
1096
+ <sty>
1097
+ <xsl:attribute name="m:val">p</xsl:attribute>
1098
+ </sty>
1099
+ </xsl:when>
1072
1100
  <xsl:when test="$font='bold'">
1073
1101
  <sty>
1074
1102
  <xsl:attribute name="m:val">b</xsl:attribute>