isodoc 1.7.3.1 → 1.7.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +7 -4
  3. data/lib/isodoc/class_utils.rb +2 -2
  4. data/lib/isodoc/convert.rb +2 -0
  5. data/lib/isodoc/function/blocks_example_note.rb +85 -79
  6. data/lib/isodoc/function/cleanup.rb +181 -175
  7. data/lib/isodoc/function/inline.rb +110 -108
  8. data/lib/isodoc/function/inline_simple.rb +55 -55
  9. data/lib/isodoc/function/lists.rb +75 -71
  10. data/lib/isodoc/function/references.rb +165 -160
  11. data/lib/isodoc/function/section.rb +140 -190
  12. data/lib/isodoc/function/section_titles.rb +82 -0
  13. data/lib/isodoc/function/table.rb +90 -87
  14. data/lib/isodoc/function/terms.rb +58 -56
  15. data/lib/isodoc/function/to_word_html.rb +3 -1
  16. data/lib/isodoc/function/utils.rb +34 -14
  17. data/lib/isodoc/html_function/comments.rb +107 -111
  18. data/lib/isodoc/html_function/footnotes.rb +68 -67
  19. data/lib/isodoc/html_function/html.rb +113 -103
  20. data/lib/isodoc/html_function/mathvariant_to_plain.rb +5 -3
  21. data/lib/isodoc/presentation_function/block.rb +73 -78
  22. data/lib/isodoc/presentation_function/concept.rb +68 -0
  23. data/lib/isodoc/presentation_function/image.rb +112 -0
  24. data/lib/isodoc/presentation_function/inline.rb +6 -39
  25. data/lib/isodoc/presentation_function/math.rb +9 -0
  26. data/lib/isodoc/presentation_function/section.rb +12 -1
  27. data/lib/isodoc/presentation_xml_convert.rb +3 -0
  28. data/lib/isodoc/version.rb +1 -1
  29. data/lib/isodoc/word_function/body.rb +176 -174
  30. data/lib/isodoc/word_function/comments.rb +117 -112
  31. data/lib/isodoc/word_function/footnotes.rb +88 -86
  32. data/lib/isodoc/word_function/inline.rb +42 -67
  33. data/lib/isodoc/word_function/postprocess_cover.rb +121 -110
  34. data/lib/isodoc/xref/xref_gen.rb +153 -150
  35. data/lib/isodoc/xslfo_convert.rb +2 -2
  36. data/spec/assets/odf.svg +1 -4
  37. data/spec/isodoc/blocks_spec.rb +187 -32
  38. data/spec/isodoc/inline_spec.rb +300 -116
  39. data/spec/isodoc/postproc_spec.rb +38 -0
  40. data/spec/isodoc/presentation_xml_spec.rb +144 -0
  41. data/spec/isodoc/section_spec.rb +764 -0
  42. data/spec/isodoc/terms_spec.rb +116 -0
  43. metadata +63 -18
@@ -702,6 +702,645 @@ RSpec.describe IsoDoc do
702
702
  .convert("test", presxml, true))).to be_equivalent_to xmlpp(word)
703
703
  end
704
704
 
705
+ it "processes section subtitles" do
706
+ input = <<~"INPUT"
707
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
708
+ <preface>
709
+ <abstract obligation="informative">
710
+ <title>Abstract</title>
711
+ <variant-title type="sub">Variant 1</variant-title>
712
+ </abstract>
713
+ <foreword obligation="informative">
714
+ <title>Foreword</title>
715
+ <variant-title type="sub">Variant 1</variant-title>
716
+ <p id="A">This is a preamble</p>
717
+ </foreword>
718
+ <introduction id="B" obligation="informative"><title>Introduction</title>
719
+ <clause id="C" inline-header="false" obligation="informative">
720
+ <title>Introduction Subsection</title>
721
+ <variant-title type="sub">Variant 1</variant-title>
722
+ </clause>
723
+ </introduction>
724
+ <clause id="B1"><title>Dedication</title>
725
+ <variant-title type="sub">Variant 1</variant-title>
726
+ </clause>
727
+ <clause id="B2"><title>Note to reader</title>
728
+ <variant-title type="sub">Variant 1</variant-title>
729
+ </clause>
730
+ <acknowledgements obligation="informative">
731
+ <title>Acknowledgements</title>
732
+ <variant-title type="sub">Variant 1</variant-title>
733
+ </acknowledgements>
734
+ </preface><sections>
735
+ <note id="NN1"><p>Initial note</p></note>
736
+ <admonition id="NN2" type="warning"><p>Initial admonition</p></admonition>
737
+ <clause id="D" obligation="normative" type="scope">
738
+ <title>Scope</title>
739
+ <variant-title type="sub">Variant 1</variant-title>
740
+ <p id="E">Text</p>
741
+ </clause>
742
+ <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title>
743
+ <variant-title type="sub">Variant 1</variant-title>
744
+ <terms id="I" obligation="normative">
745
+ <title>Normal Terms</title>
746
+ <variant-title type="sub">Variant 1</variant-title>
747
+ <term id="J">
748
+ <preferred>Term2</preferred>
749
+ </term>
750
+ </terms>
751
+ <definitions id="K">
752
+ <title>Definitions</title>
753
+ <variant-title type="sub">Variant 1</variant-title>
754
+ <dl>
755
+ <dt>Symbol</dt>
756
+ <dd>Definition</dd>
757
+ </dl>
758
+ </definitions>
759
+ </clause>
760
+ <definitions id="L">
761
+ <title>Symbols and abbreviated terms</title>
762
+ <variant-title type="sub">Variant 1</variant-title>
763
+ <dl>
764
+ <dt>Symbol</dt>
765
+ <dd>Definition</dd>
766
+ </dl>
767
+ </definitions>
768
+ <clause id="M" inline-header="false" obligation="normative">
769
+ <title>Clause 4</title>
770
+ <variant-title type="sub">Variant 1</variant-title>
771
+ <clause id="N" inline-header="false" obligation="normative">
772
+ <title>Introduction</title>
773
+ <variant-title type="sub">Variant 1</variant-title>
774
+ </clause>
775
+ <clause id="O" inline-header="false" obligation="normative">
776
+ <title>Clause 4.2</title>
777
+ <variant-title type="sub">Variant 1</variant-title>
778
+ </clause>
779
+ <clause id="O1" inline-header="false" obligation="normative">
780
+ </clause>
781
+ </clause>
782
+ </sections><annex id="P" inline-header="false" obligation="normative">
783
+ <title>Annex</title>
784
+ <variant-title type="sub">Variant 1</variant-title>
785
+ <clause id="Q" inline-header="false" obligation="normative">
786
+ <title>Annex A.1</title>
787
+ <variant-title type="sub">Variant 1</variant-title>
788
+ <clause id="Q1" inline-header="false" obligation="normative">
789
+ <title>Annex A.1a</title>
790
+ <variant-title type="sub">Variant 1</variant-title>
791
+ </clause>
792
+ <references id="Q2" normative="false">
793
+ <title>Annex Bibliography</title>
794
+ <variant-title type="sub">Variant 1</variant-title>
795
+ </references>
796
+ </clause>
797
+ </annex>
798
+ <annex id="P1" inline-header="false" obligation="normative">
799
+ </annex>
800
+ <bibliography><references id="R" obligation="informative" normative="true">
801
+ <title>Normative References</title>
802
+ <variant-title type="sub">Variant 1</variant-title>
803
+ </references><clause id="S" obligation="informative">
804
+ <title>Bibliography</title>
805
+ <variant-title type="sub">Variant 1</variant-title>
806
+ <references id="T" obligation="informative" normative="false">
807
+ <title>Bibliography Subsection</title>
808
+ <variant-title type="sub">Variant 1</variant-title>
809
+ </references>
810
+ </clause>
811
+ </bibliography>
812
+ </iso-standard>
813
+ INPUT
814
+ html = <<~OUTPUT
815
+ <html lang='en'>
816
+ <head/>
817
+ <body lang='en'>
818
+ <div class='title-section'>
819
+ <p>&#160;</p>
820
+ </div>
821
+ <br/>
822
+ <div class='prefatory-section'>
823
+ <p>&#160;</p>
824
+ </div>
825
+ <br/>
826
+ <div class='main-section'>
827
+ <br/>
828
+ <div>
829
+ <h1 class='AbstractTitle'>
830
+ Abstract
831
+ <br/>
832
+ <br/>
833
+ Variant 1
834
+ </h1>
835
+ </div>
836
+ <br/>
837
+ <div>
838
+ <h1 class='ForewordTitle'>
839
+ Foreword
840
+ <br/>
841
+ <br/>
842
+ Variant 1
843
+ </h1>
844
+ <p id='A'>This is a preamble</p>
845
+ </div>
846
+ <br/>
847
+ <div class='Section3' id='B'>
848
+ <h1 class='IntroTitle'>Introduction</h1>
849
+ <div id='C'>
850
+ <h2>
851
+ Introduction Subsection
852
+ <br/>
853
+ <br/>
854
+ Variant 1
855
+ </h2>
856
+ </div>
857
+ </div>
858
+ <br/>
859
+ <div class='Section3' id='B1'>
860
+ <h1 class='IntroTitle'>
861
+ Dedication
862
+ <br/>
863
+ <br/>
864
+ Variant 1
865
+ </h1>
866
+ </div>
867
+ <br/>
868
+ <div class='Section3' id='B2'>
869
+ <h1 class='IntroTitle'>
870
+ Note to reader
871
+ <br/>
872
+ <br/>
873
+ Variant 1
874
+ </h1>
875
+ </div>
876
+ <br/>
877
+ <div class='Section3' id=''>
878
+ <h1 class='IntroTitle'>
879
+ Acknowledgements
880
+ <br/>
881
+ <br/>
882
+ Variant 1
883
+ </h1>
884
+ </div>
885
+ <p class='zzSTDTitle1'/>
886
+ <div id='NN1' class='Note'>
887
+ <p>
888
+ <span class='note_label'>NOTE</span>
889
+ &#160; Initial note
890
+ </p>
891
+ </div>
892
+ <div id='NN2' class='Admonition'>
893
+ <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
894
+ <p>Initial admonition</p>
895
+ </div>
896
+ <div id='D'>
897
+ <h1>
898
+ 1.&#160; Scope
899
+ <br/>
900
+ <br/>
901
+ Variant 1
902
+ </h1>
903
+ <p id='E'>Text</p>
904
+ </div>
905
+ <div>
906
+ <h1>
907
+ 2.&#160; Normative References
908
+ <br/>
909
+ <br/>
910
+ Variant 1
911
+ </h1>
912
+ </div>
913
+ <div id='H'>
914
+ <h1>
915
+ 3.&#160; Terms, Definitions, Symbols and Abbreviated Terms
916
+ <br/>
917
+ <br/>
918
+ Variant 1
919
+ </h1>
920
+ <div id='I'>
921
+ <h2>
922
+ 3.1.&#160; Normal Terms
923
+ <br/>
924
+ <br/>
925
+ Variant 1
926
+ </h2>
927
+ <p class='TermNum' id='J'>3.1.1.</p>
928
+ <p class='Terms' style='text-align:left;'>Term2</p>
929
+ </div>
930
+ <div id='K'>
931
+ <h2>
932
+ 3.2.&#160; Definitions
933
+ <br/>
934
+ <br/>
935
+ Variant 1
936
+ </h2>
937
+ <dl>
938
+ <dt>
939
+ <p>Symbol</p>
940
+ </dt>
941
+ <dd>Definition</dd>
942
+ </dl>
943
+ </div>
944
+ </div>
945
+ <div id='L' class='Symbols'>
946
+ <h1>
947
+ 4.&#160; Symbols and abbreviated terms
948
+ <br/>
949
+ <br/>
950
+ Variant 1
951
+ </h1>
952
+ <dl>
953
+ <dt>
954
+ <p>Symbol</p>
955
+ </dt>
956
+ <dd>Definition</dd>
957
+ </dl>
958
+ </div>
959
+ <div id='M'>
960
+ <h1>
961
+ 5.&#160; Clause 4
962
+ <br/>
963
+ <br/>
964
+ Variant 1
965
+ </h1>
966
+ <div id='N'>
967
+ <h2>
968
+ 5.1.&#160; Introduction
969
+ <br/>
970
+ <br/>
971
+ Variant 1
972
+ </h2>
973
+ </div>
974
+ <div id='O'>
975
+ <h2>
976
+ 5.2.&#160; Clause 4.2
977
+ <br/>
978
+ <br/>
979
+ Variant 1
980
+ </h2>
981
+ </div>
982
+ <div id='O1'>
983
+ <h2>5.3.</h2>
984
+ </div>
985
+ </div>
986
+ <br/>
987
+ <div id='P' class='Section3'>
988
+ <h1 class='Annex'>
989
+ <b>Annex A</b>
990
+ <br/>
991
+ (normative)
992
+ <br/>
993
+ <br/>
994
+ <b>Annex</b>
995
+ <br/>
996
+ <br/>
997
+ Variant 1
998
+ </h1>
999
+ <div id='Q'>
1000
+ <h2>
1001
+ A.1.&#160; Annex A.1
1002
+ <br/>
1003
+ <br/>
1004
+ Variant 1
1005
+ </h2>
1006
+ <div id='Q1'>
1007
+ <h3>
1008
+ A.1.1.&#160; Annex A.1a
1009
+ <br/>
1010
+ <br/>
1011
+ Variant 1
1012
+ </h3>
1013
+ </div>
1014
+ <div>
1015
+ <h3 class='Section3'>
1016
+ A.1.2.&#160; Annex Bibliography
1017
+ <br/>
1018
+ <br/>
1019
+ Variant 1
1020
+ </h3>
1021
+ </div>
1022
+ </div>
1023
+ </div>
1024
+ <br/>
1025
+ <div id='P1' class='Section3'>
1026
+ <h1 class='Annex'>
1027
+ <b>Annex B</b>
1028
+ <br/>
1029
+ (normative)
1030
+ </h1>
1031
+ </div>
1032
+ <br/>
1033
+ <div>
1034
+ <h1 class='Section3'>Bibliography</h1>
1035
+ <div>
1036
+ <h2 class='Section3'>
1037
+ Bibliography Subsection
1038
+ <br/>
1039
+ <br/>
1040
+ Variant 1
1041
+ </h2>
1042
+ </div>
1043
+ </div>
1044
+ </div>
1045
+ </body>
1046
+ </html>
1047
+ OUTPUT
1048
+ word = <<~OUTPUT
1049
+ <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
1050
+ <head>
1051
+ <style>
1052
+ </style>
1053
+ </head>
1054
+ <body lang='EN-US' link='blue' vlink='#954F72'>
1055
+ <div class='WordSection1'>
1056
+ <p>&#160;</p>
1057
+ </div>
1058
+ <p>
1059
+ <br clear='all' class='section'/>
1060
+ </p>
1061
+ <div class='WordSection2'>
1062
+ <p>
1063
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1064
+ </p>
1065
+ <div>
1066
+ <h1 class='AbstractTitle'>
1067
+ Abstract
1068
+ <br/>
1069
+ <br/>
1070
+ Variant 1
1071
+ </h1>
1072
+ </div>
1073
+ <p>
1074
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1075
+ </p>
1076
+ <div>
1077
+ <h1 class='ForewordTitle'>
1078
+ Foreword
1079
+ <br/>
1080
+ <br/>
1081
+ Variant 1
1082
+ </h1>
1083
+ <p id='A'>This is a preamble</p>
1084
+ </div>
1085
+ <p>
1086
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1087
+ </p>
1088
+ <div class='Section3' id='B'>
1089
+ <h1 class='IntroTitle'>Introduction</h1>
1090
+ <div id='C'>
1091
+ <h2>
1092
+ Introduction Subsection
1093
+ <br/>
1094
+ <br/>
1095
+ Variant 1
1096
+ </h2>
1097
+ </div>
1098
+ </div>
1099
+ <p>
1100
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1101
+ </p>
1102
+ <div class='Section3' id='B1'>
1103
+ <h1 class='IntroTitle'>
1104
+ Dedication
1105
+ <br/>
1106
+ <br/>
1107
+ Variant 1
1108
+ </h1>
1109
+ </div>
1110
+ <p>
1111
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1112
+ </p>
1113
+ <div class='Section3' id='B2'>
1114
+ <h1 class='IntroTitle'>
1115
+ Note to reader
1116
+ <br/>
1117
+ <br/>
1118
+ Variant 1
1119
+ </h1>
1120
+ </div>
1121
+ <p>
1122
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1123
+ </p>
1124
+ <div class='Section3' id=''>
1125
+ <h1 class='IntroTitle'>
1126
+ Acknowledgements
1127
+ <br/>
1128
+ <br/>
1129
+ Variant 1
1130
+ </h1>
1131
+ </div>
1132
+ <p>&#160;</p>
1133
+ </div>
1134
+ <p>
1135
+ <br clear='all' class='section'/>
1136
+ </p>
1137
+ <div class='WordSection3'>
1138
+ <p class='zzSTDTitle1'/>
1139
+ <div id='NN1' class='Note'>
1140
+ <p class='Note'>
1141
+ <span class='note_label'>NOTE</span>
1142
+ <span style='mso-tab-count:1'>&#160; </span>
1143
+ Initial note
1144
+ </p>
1145
+ </div>
1146
+ <div id='NN2' class='Admonition'>
1147
+ <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
1148
+ <p>Initial admonition</p>
1149
+ </div>
1150
+ <div id='D'>
1151
+ <h1>
1152
+ 1.
1153
+ <span style='mso-tab-count:1'>&#160; </span>
1154
+ Scope
1155
+ <br/>
1156
+ <br/>
1157
+ Variant 1
1158
+ </h1>
1159
+ <p id='E'>Text</p>
1160
+ </div>
1161
+ <div>
1162
+ <h1>
1163
+ 2.
1164
+ <span style='mso-tab-count:1'>&#160; </span>
1165
+ Normative References
1166
+ <br/>
1167
+ <br/>
1168
+ Variant 1
1169
+ </h1>
1170
+ </div>
1171
+ <div id='H'>
1172
+ <h1>
1173
+ 3.
1174
+ <span style='mso-tab-count:1'>&#160; </span>
1175
+ Terms, Definitions, Symbols and Abbreviated Terms
1176
+ <br/>
1177
+ <br/>
1178
+ Variant 1
1179
+ </h1>
1180
+ <div id='I'>
1181
+ <h2>
1182
+ 3.1.
1183
+ <span style='mso-tab-count:1'>&#160; </span>
1184
+ Normal Terms
1185
+ <br/>
1186
+ <br/>
1187
+ Variant 1
1188
+ </h2>
1189
+ <p class='TermNum' id='J'>3.1.1.</p>
1190
+ <p class='Terms' style='text-align:left;'>Term2</p>
1191
+ </div>
1192
+ <div id='K'>
1193
+ <h2>
1194
+ 3.2.
1195
+ <span style='mso-tab-count:1'>&#160; </span>
1196
+ Definitions
1197
+ <br/>
1198
+ <br/>
1199
+ Variant 1
1200
+ </h2>
1201
+ <table class='dl'>
1202
+ <tr>
1203
+ <td valign='top' align='left'>
1204
+ <p align='left' style='margin-left:0pt;text-align:left;'>Symbol</p>
1205
+ </td>
1206
+ <td valign='top'>Definition</td>
1207
+ </tr>
1208
+ </table>
1209
+ </div>
1210
+ </div>
1211
+ <div id='L' class='Symbols'>
1212
+ <h1>
1213
+ 4.
1214
+ <span style='mso-tab-count:1'>&#160; </span>
1215
+ Symbols and abbreviated terms
1216
+ <br/>
1217
+ <br/>
1218
+ Variant 1
1219
+ </h1>
1220
+ <table class='dl'>
1221
+ <tr>
1222
+ <td valign='top' align='left'>
1223
+ <p align='left' style='margin-left:0pt;text-align:left;'>Symbol</p>
1224
+ </td>
1225
+ <td valign='top'>Definition</td>
1226
+ </tr>
1227
+ </table>
1228
+ </div>
1229
+ <div id='M'>
1230
+ <h1>
1231
+ 5.
1232
+ <span style='mso-tab-count:1'>&#160; </span>
1233
+ Clause 4
1234
+ <br/>
1235
+ <br/>
1236
+ Variant 1
1237
+ </h1>
1238
+ <div id='N'>
1239
+ <h2>
1240
+ 5.1.
1241
+ <span style='mso-tab-count:1'>&#160; </span>
1242
+ Introduction
1243
+ <br/>
1244
+ <br/>
1245
+ Variant 1
1246
+ </h2>
1247
+ </div>
1248
+ <div id='O'>
1249
+ <h2>
1250
+ 5.2.
1251
+ <span style='mso-tab-count:1'>&#160; </span>
1252
+ Clause 4.2
1253
+ <br/>
1254
+ <br/>
1255
+ Variant 1
1256
+ </h2>
1257
+ </div>
1258
+ <div id='O1'>
1259
+ <h2>5.3.</h2>
1260
+ </div>
1261
+ </div>
1262
+ <p>
1263
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1264
+ </p>
1265
+ <div id='P' class='Section3'>
1266
+ <h1 class='Annex'>
1267
+ <b>Annex A</b>
1268
+ <br/>
1269
+ (normative)
1270
+ <br/>
1271
+ <br/>
1272
+ <b>Annex</b>
1273
+ <br/>
1274
+ <br/>
1275
+ Variant 1
1276
+ </h1>
1277
+ <div id='Q'>
1278
+ <h2>
1279
+ A.1.
1280
+ <span style='mso-tab-count:1'>&#160; </span>
1281
+ Annex A.1
1282
+ <br/>
1283
+ <br/>
1284
+ Variant 1
1285
+ </h2>
1286
+ <div id='Q1'>
1287
+ <h3>
1288
+ A.1.1.
1289
+ <span style='mso-tab-count:1'>&#160; </span>
1290
+ Annex A.1a
1291
+ <br/>
1292
+ <br/>
1293
+ Variant 1
1294
+ </h3>
1295
+ </div>
1296
+ <div>
1297
+ <h3 class='Section3'>
1298
+ A.1.2.
1299
+ <span style='mso-tab-count:1'>&#160; </span>
1300
+ Annex Bibliography
1301
+ <br/>
1302
+ <br/>
1303
+ Variant 1
1304
+ </h3>
1305
+ </div>
1306
+ </div>
1307
+ </div>
1308
+ <p>
1309
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1310
+ </p>
1311
+ <div id='P1' class='Section3'>
1312
+ <h1 class='Annex'>
1313
+ <b>Annex B</b>
1314
+ <br/>
1315
+ (normative)
1316
+ </h1>
1317
+ </div>
1318
+ <p>
1319
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1320
+ </p>
1321
+ <div>
1322
+ <h1 class='Section3'>Bibliography</h1>
1323
+ <div>
1324
+ <h2 class='Section3'>
1325
+ Bibliography Subsection
1326
+ <br/>
1327
+ <br/>
1328
+ Variant 1
1329
+ </h2>
1330
+ </div>
1331
+ </div>
1332
+ </div>
1333
+ </body>
1334
+ </html>
1335
+ OUTPUT
1336
+ presxml = IsoDoc::PresentationXMLConvert.new({})
1337
+ .convert("test", input, true)
1338
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1339
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1340
+ expect(xmlpp(IsoDoc::WordConvert.new({})
1341
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(word)
1342
+ end
1343
+
705
1344
  it "processes section names suppressing section numbering" do
706
1345
  input = <<~INPUT
707
1346
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -1139,4 +1778,129 @@ RSpec.describe IsoDoc do
1139
1778
  expect(xmlpp(IsoDoc::HtmlConvert.new({})
1140
1779
  .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1141
1780
  end
1781
+
1782
+ it "processes annexes containing one, or more than one special sections" do
1783
+ input = <<~INPUT
1784
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
1785
+ <annex id='PP' obligation='normative'>
1786
+ <title>Glossary</title>
1787
+ <terms id='PP1' obligation='normative'>
1788
+ <term id='term-glossary'>
1789
+ <preferred>Glossary</preferred>
1790
+ </term>
1791
+ </terms>
1792
+ </annex>
1793
+ <annex id='QQ' obligation='normative'>
1794
+ <title>Glossary</title>
1795
+ <terms id='QQ1' obligation='normative'>
1796
+ <title>Term Collection</title>
1797
+ <term id='term-term-1'>
1798
+ <preferred>Term</preferred>
1799
+ </term>
1800
+ </terms>
1801
+ <terms id='QQ2' obligation='normative'>
1802
+ <title>Term Collection 2</title>
1803
+ <term id='term-term-2'>
1804
+ <preferred>Term</preferred>
1805
+ </term>
1806
+ </terms>
1807
+ </annex>
1808
+ <annex id='RR' obligation='normative'>
1809
+ <title>Glossary</title>
1810
+ <terms id='RR1' obligation='normative'>
1811
+ <title>Term Collection</title>
1812
+ <term id='term-term-3'>
1813
+ <preferred>Term</preferred>
1814
+ </term>
1815
+ </terms>
1816
+ <references id='RR2' obligation='normative'>
1817
+ <title>References</title>
1818
+ </terms>
1819
+ </annex>
1820
+ </iso-standard>
1821
+ INPUT
1822
+ presxml = <<~OUTPUT
1823
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
1824
+ <annex id='PP' obligation='normative' displayorder='1'>
1825
+ <title>
1826
+ <strong>Annex A</strong>
1827
+ <br/>
1828
+ (normative)
1829
+ <br/>
1830
+ <br/>
1831
+ <strong>Glossary</strong>
1832
+ </title>
1833
+ <terms id='PP1' obligation='normative'>
1834
+ <title>A.</title>
1835
+ <term id='term-glossary'>
1836
+ <name>A.1.</name>
1837
+ <preferred>Glossary</preferred>
1838
+ </term>
1839
+ </terms>
1840
+ </annex>
1841
+ <annex id='QQ' obligation='normative' displayorder='2'>
1842
+ <title>
1843
+ <strong>Annex B</strong>
1844
+ <br/>
1845
+ (normative)
1846
+ <br/>
1847
+ <br/>
1848
+ <strong>Glossary</strong>
1849
+ </title>
1850
+ <terms id='QQ1' obligation='normative'>
1851
+ <title depth='2'>
1852
+ B.1.
1853
+ <tab/>
1854
+ Term Collection
1855
+ </title>
1856
+ <term id='term-term-1'>
1857
+ <name>B.1.1.</name>
1858
+ <preferred>Term</preferred>
1859
+ </term>
1860
+ </terms>
1861
+ <terms id='QQ2' obligation='normative'>
1862
+ <title depth='2'>
1863
+ B.2.
1864
+ <tab/>
1865
+ Term Collection 2
1866
+ </title>
1867
+ <term id='term-term-2'>
1868
+ <name>B.2.1.</name>
1869
+ <preferred>Term</preferred>
1870
+ </term>
1871
+ </terms>
1872
+ </annex>
1873
+ <annex id='RR' obligation='normative' displayorder='3'>
1874
+ <title>
1875
+ <strong>Annex C</strong>
1876
+ <br/>
1877
+ (normative)
1878
+ <br/>
1879
+ <br/>
1880
+ <strong>Glossary</strong>
1881
+ </title>
1882
+ <terms id='RR1' obligation='normative'>
1883
+ <title depth='2'>
1884
+ C.1.
1885
+ <tab/>
1886
+ Term Collection
1887
+ </title>
1888
+ <term id='term-term-3'>
1889
+ <name>C.1.1.</name>
1890
+ <preferred>Term</preferred>
1891
+ </term>
1892
+ </terms>
1893
+ <references id='RR2' obligation='normative'>
1894
+ <title depth='2'>
1895
+ C.2.
1896
+ <tab/>
1897
+ References
1898
+ </title>
1899
+ </references>
1900
+ </annex>
1901
+ </iso-standard>
1902
+ OUTPUT
1903
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1904
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1905
+ end
1142
1906
  end