@polintpro/proposit-core 0.8.5 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1053 @@
1
+ // IEEE Citation Formatting — structured segment output
2
+ // Follows IEEE Reference Guide patterns for all 33 reference types.
3
+ // ---------------------------------------------------------------------------
4
+ // Public functions
5
+ // ---------------------------------------------------------------------------
6
+ /**
7
+ * Format a single structured author into IEEE citation style.
8
+ * Given names are abbreviated to initials with periods: "Jane Marie" → "J. M."
9
+ * Suffix is appended without comma: "W. P. Pratt Jr."
10
+ */
11
+ export function formatSingleAuthor(author) {
12
+ const initials = author.givenNames
13
+ .split(/\s+/)
14
+ .map((name) => `${name.charAt(0)}.`)
15
+ .join(" ");
16
+ const name = `${initials} ${author.familyName}`;
17
+ return author.suffix ? `${name} ${author.suffix}` : name;
18
+ }
19
+ /**
20
+ * Format an array of structured author names into IEEE citation style.
21
+ * 7+ authors → first author + " et al."
22
+ * 2 authors → "A and B"
23
+ * 3–6 authors → "A, B, C, and D"
24
+ */
25
+ export function formatNamesInCitation(authors) {
26
+ if (authors.length === 0)
27
+ return "";
28
+ if (authors.length > 6) {
29
+ return `${formatSingleAuthor(authors[0])} et al.`;
30
+ }
31
+ const formatted = authors.map(formatSingleAuthor);
32
+ if (formatted.length === 1)
33
+ return formatted[0];
34
+ if (formatted.length === 2)
35
+ return `${formatted[0]} and ${formatted[1]}`;
36
+ return `${formatted.slice(0, -1).join(", ")}, and ${formatted[formatted.length - 1]}`;
37
+ }
38
+ /**
39
+ * Build a structured citation for any IEEE reference type.
40
+ * Returns an array of typed segments that consumers can render into
41
+ * plain text, HTML, or any other format.
42
+ */
43
+ export function formatCitationParts(ref) {
44
+ const builder = BUILDERS[ref.type];
45
+ return {
46
+ type: ref.type,
47
+ segments: builder(ref),
48
+ };
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Internal helpers
52
+ // ---------------------------------------------------------------------------
53
+ function sep(text) {
54
+ return { text, role: "separator" };
55
+ }
56
+ const IEEE_MONTHS = [
57
+ "Jan.",
58
+ "Feb.",
59
+ "Mar.",
60
+ "Apr.",
61
+ "May",
62
+ "Jun.",
63
+ "Jul.",
64
+ "Aug.",
65
+ "Sep.",
66
+ "Oct.",
67
+ "Nov.",
68
+ "Dec.",
69
+ ];
70
+ function formatDate(d) {
71
+ const month = IEEE_MONTHS[d.getMonth()];
72
+ const day = d.getDate();
73
+ const year = d.getFullYear();
74
+ return `${month} ${day}, ${year}`;
75
+ }
76
+ function bookSegments(ref) {
77
+ const segs = [];
78
+ segs.push({
79
+ text: formatNamesInCitation(ref.authors),
80
+ role: "authors",
81
+ style: "plain",
82
+ });
83
+ segs.push(sep(", "));
84
+ segs.push({ text: ref.title, role: "title", style: "italic" });
85
+ if (ref.edition !== undefined) {
86
+ segs.push(sep(", "));
87
+ segs.push({ text: ref.edition, role: "edition" });
88
+ segs.push({ text: " ed.", role: "suffix" });
89
+ }
90
+ if (ref.location !== undefined) {
91
+ segs.push(sep(", "));
92
+ segs.push({ text: ref.location, role: "location" });
93
+ }
94
+ segs.push(sep(": "));
95
+ segs.push({ text: ref.publisher, role: "publisher" });
96
+ segs.push(sep(", "));
97
+ segs.push({ text: ref.year, role: "year" });
98
+ segs.push(sep("."));
99
+ if (ref.isbn !== undefined) {
100
+ segs.push(sep(" "));
101
+ segs.push({ text: ref.isbn, role: "isbn" });
102
+ }
103
+ return segs;
104
+ }
105
+ function websiteSegments(ref) {
106
+ const segs = [];
107
+ segs.push({
108
+ text: formatNamesInCitation(ref.authors),
109
+ role: "authors",
110
+ style: "plain",
111
+ });
112
+ segs.push(sep(". "));
113
+ segs.push({
114
+ text: ref.pageTitle,
115
+ role: "title",
116
+ style: "quoted",
117
+ });
118
+ segs.push(sep(". "));
119
+ segs.push({
120
+ text: ref.websiteTitle,
121
+ role: "misc",
122
+ style: "italic",
123
+ });
124
+ segs.push(sep(". "));
125
+ segs.push({ text: "Accessed: ", role: "prefix" });
126
+ segs.push({
127
+ text: formatDate(ref.accessedDate),
128
+ role: "accessedDate",
129
+ });
130
+ segs.push(sep(". "));
131
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
132
+ segs.push({ text: ref.url, role: "url", style: "link" });
133
+ return segs;
134
+ }
135
+ function bookChapterSegments(ref) {
136
+ const segs = [];
137
+ segs.push({
138
+ text: formatNamesInCitation(ref.authors),
139
+ role: "authors",
140
+ style: "plain",
141
+ });
142
+ segs.push(sep(", "));
143
+ segs.push({
144
+ text: ref.chapterTitle,
145
+ role: "title",
146
+ style: "quoted",
147
+ });
148
+ segs.push(sep(", in "));
149
+ segs.push({
150
+ text: ref.bookTitle,
151
+ role: "bookTitle",
152
+ style: "italic",
153
+ });
154
+ if (ref.editors !== undefined) {
155
+ const editors = ref.editors;
156
+ if (editors.length > 0) {
157
+ segs.push(sep(", "));
158
+ segs.push({
159
+ text: formatNamesInCitation(editors),
160
+ role: "misc",
161
+ });
162
+ segs.push({ text: ", Eds.", role: "suffix" });
163
+ }
164
+ }
165
+ segs.push(sep(". "));
166
+ segs.push({ text: ref.location, role: "location" });
167
+ segs.push(sep(": "));
168
+ segs.push({ text: ref.publisher, role: "publisher" });
169
+ segs.push(sep(", "));
170
+ segs.push({ text: ref.year, role: "year" });
171
+ if (ref.pages !== undefined) {
172
+ segs.push(sep(", "));
173
+ segs.push({ text: "pp. ", role: "prefix" });
174
+ segs.push({ text: ref.pages, role: "pages" });
175
+ }
176
+ segs.push(sep("."));
177
+ if (ref.isbn !== undefined) {
178
+ segs.push(sep(" "));
179
+ segs.push({ text: ref.isbn, role: "isbn" });
180
+ }
181
+ return segs;
182
+ }
183
+ function handbookSegments(ref) {
184
+ const segs = [];
185
+ segs.push({
186
+ text: ref.title,
187
+ role: "title",
188
+ style: "italic",
189
+ });
190
+ if (ref.edition !== undefined) {
191
+ segs.push(sep(", "));
192
+ segs.push({ text: ref.edition, role: "edition" });
193
+ segs.push({ text: " ed.", role: "suffix" });
194
+ }
195
+ segs.push(sep(". "));
196
+ segs.push({ text: ref.location, role: "location" });
197
+ segs.push(sep(": "));
198
+ segs.push({ text: ref.publisher, role: "publisher" });
199
+ segs.push(sep(", "));
200
+ segs.push({ text: ref.year, role: "year" });
201
+ segs.push(sep("."));
202
+ if (ref.isbn !== undefined) {
203
+ segs.push(sep(" "));
204
+ segs.push({ text: ref.isbn, role: "isbn" });
205
+ }
206
+ return segs;
207
+ }
208
+ function technicalReportSegments(ref) {
209
+ const segs = [];
210
+ segs.push({
211
+ text: formatNamesInCitation(ref.authors),
212
+ role: "authors",
213
+ style: "plain",
214
+ });
215
+ segs.push(sep(", "));
216
+ segs.push({
217
+ text: ref.title,
218
+ role: "title",
219
+ style: "quoted",
220
+ });
221
+ segs.push(sep(", "));
222
+ segs.push({ text: ref.institution, role: "institution" });
223
+ segs.push(sep(", "));
224
+ segs.push({ text: ref.location, role: "location" });
225
+ segs.push(sep(", "));
226
+ segs.push({ text: "Rep. ", role: "prefix" });
227
+ segs.push({ text: ref.reportNumber, role: "reportNumber" });
228
+ segs.push(sep(", "));
229
+ segs.push({ text: ref.year, role: "year" });
230
+ segs.push(sep("."));
231
+ return segs;
232
+ }
233
+ function standardSegments(ref) {
234
+ const segs = [];
235
+ segs.push({
236
+ text: ref.title,
237
+ role: "title",
238
+ style: "italic",
239
+ });
240
+ segs.push(sep(", "));
241
+ segs.push({
242
+ text: ref.standardNumber,
243
+ role: "standardNumber",
244
+ });
245
+ segs.push(sep(", "));
246
+ segs.push({ text: ref.organization, role: "organization" });
247
+ segs.push(sep(", "));
248
+ segs.push({
249
+ text: formatDate(ref.date),
250
+ role: "date",
251
+ });
252
+ segs.push(sep("."));
253
+ return segs;
254
+ }
255
+ function thesisSegments(ref) {
256
+ const segs = [];
257
+ segs.push({
258
+ text: formatNamesInCitation(ref.authors),
259
+ role: "authors",
260
+ style: "plain",
261
+ });
262
+ segs.push(sep(", "));
263
+ segs.push({
264
+ text: ref.title,
265
+ role: "title",
266
+ style: "quoted",
267
+ });
268
+ segs.push(sep(", "));
269
+ segs.push({ text: ref.degree, role: "degree" });
270
+ segs.push({ text: " thesis", role: "suffix" });
271
+ segs.push(sep(", "));
272
+ segs.push({ text: ref.institution, role: "institution" });
273
+ segs.push(sep(", "));
274
+ segs.push({ text: ref.location, role: "location" });
275
+ segs.push(sep(", "));
276
+ segs.push({ text: ref.year, role: "year" });
277
+ segs.push(sep("."));
278
+ return segs;
279
+ }
280
+ function patentSegments(ref) {
281
+ const segs = [];
282
+ segs.push({
283
+ text: formatNamesInCitation(ref.inventors),
284
+ role: "authors",
285
+ style: "plain",
286
+ });
287
+ segs.push(sep(", "));
288
+ segs.push({
289
+ text: ref.title,
290
+ role: "title",
291
+ style: "quoted",
292
+ });
293
+ segs.push(sep(", "));
294
+ segs.push({ text: ref.country, role: "country" });
295
+ segs.push({ text: " Patent ", role: "prefix" });
296
+ segs.push({ text: ref.patentNumber, role: "patentNumber" });
297
+ segs.push(sep(", "));
298
+ segs.push({
299
+ text: formatDate(ref.date),
300
+ role: "date",
301
+ });
302
+ segs.push(sep("."));
303
+ return segs;
304
+ }
305
+ function dictionarySegments(ref) {
306
+ const segs = [];
307
+ segs.push({
308
+ text: ref.title,
309
+ role: "title",
310
+ style: "italic",
311
+ });
312
+ segs.push(sep(". "));
313
+ segs.push({ text: ref.publisher, role: "publisher" });
314
+ if (ref.edition !== undefined) {
315
+ segs.push(sep(", "));
316
+ segs.push({ text: ref.edition, role: "edition" });
317
+ segs.push({ text: " ed.", role: "suffix" });
318
+ }
319
+ segs.push(sep(", "));
320
+ segs.push({ text: ref.year, role: "year" });
321
+ segs.push(sep("."));
322
+ return segs;
323
+ }
324
+ function encyclopediaSegments(ref) {
325
+ const segs = [];
326
+ segs.push({
327
+ text: ref.title,
328
+ role: "title",
329
+ style: "italic",
330
+ });
331
+ segs.push(sep(". "));
332
+ segs.push({ text: ref.publisher, role: "publisher" });
333
+ if (ref.edition !== undefined) {
334
+ segs.push(sep(", "));
335
+ segs.push({ text: ref.edition, role: "edition" });
336
+ segs.push({ text: " ed.", role: "suffix" });
337
+ }
338
+ segs.push(sep(", "));
339
+ segs.push({ text: ref.year, role: "year" });
340
+ segs.push(sep("."));
341
+ return segs;
342
+ }
343
+ function journalArticleSegments(ref) {
344
+ const segs = [];
345
+ segs.push({
346
+ text: formatNamesInCitation(ref.authors),
347
+ role: "authors",
348
+ style: "plain",
349
+ });
350
+ segs.push(sep(", "));
351
+ segs.push({
352
+ text: ref.title,
353
+ role: "title",
354
+ style: "quoted",
355
+ });
356
+ segs.push(sep(", "));
357
+ segs.push({
358
+ text: ref.journalTitle,
359
+ role: "misc",
360
+ style: "italic",
361
+ });
362
+ if (ref.volume !== undefined) {
363
+ segs.push(sep(", vol. "));
364
+ segs.push({ text: ref.volume, role: "volume" });
365
+ }
366
+ if (ref.issue !== undefined) {
367
+ segs.push(sep(", no. "));
368
+ segs.push({ text: ref.issue, role: "issue" });
369
+ }
370
+ if (ref.pages !== undefined) {
371
+ segs.push(sep(", pp. "));
372
+ segs.push({ text: ref.pages, role: "pages" });
373
+ }
374
+ segs.push(sep(", "));
375
+ segs.push({ text: ref.year, role: "year" });
376
+ if (ref.doi !== undefined) {
377
+ segs.push(sep(", doi: "));
378
+ segs.push({ text: ref.doi, role: "doi" });
379
+ }
380
+ segs.push(sep("."));
381
+ return segs;
382
+ }
383
+ function magazineArticleSegments(ref) {
384
+ const segs = [];
385
+ segs.push({
386
+ text: formatNamesInCitation(ref.authors),
387
+ role: "authors",
388
+ style: "plain",
389
+ });
390
+ segs.push(sep(", "));
391
+ segs.push({
392
+ text: ref.title,
393
+ role: "title",
394
+ style: "quoted",
395
+ });
396
+ segs.push(sep(", "));
397
+ segs.push({
398
+ text: ref.magazineTitle,
399
+ role: "misc",
400
+ style: "italic",
401
+ });
402
+ if (ref.volume !== undefined) {
403
+ segs.push(sep(", vol. "));
404
+ segs.push({ text: ref.volume, role: "volume" });
405
+ }
406
+ if (ref.issue !== undefined) {
407
+ segs.push(sep(", no. "));
408
+ segs.push({ text: ref.issue, role: "issue" });
409
+ }
410
+ if (ref.pages !== undefined) {
411
+ segs.push(sep(", pp. "));
412
+ segs.push({ text: ref.pages, role: "pages" });
413
+ }
414
+ segs.push(sep(", "));
415
+ segs.push({ text: ref.year, role: "year" });
416
+ segs.push(sep("."));
417
+ return segs;
418
+ }
419
+ function newspaperArticleSegments(ref) {
420
+ const segs = [];
421
+ segs.push({
422
+ text: formatNamesInCitation(ref.authors),
423
+ role: "authors",
424
+ style: "plain",
425
+ });
426
+ segs.push(sep(", "));
427
+ segs.push({
428
+ text: ref.title,
429
+ role: "title",
430
+ style: "quoted",
431
+ });
432
+ segs.push(sep(", "));
433
+ segs.push({
434
+ text: ref.newspaperTitle,
435
+ role: "misc",
436
+ style: "italic",
437
+ });
438
+ segs.push(sep(", "));
439
+ segs.push({
440
+ text: formatDate(ref.date),
441
+ role: "date",
442
+ });
443
+ if (ref.pages !== undefined) {
444
+ segs.push(sep(", pp. "));
445
+ segs.push({ text: ref.pages, role: "pages" });
446
+ }
447
+ segs.push(sep("."));
448
+ return segs;
449
+ }
450
+ function conferencePaperSegments(ref) {
451
+ const segs = [];
452
+ segs.push({
453
+ text: formatNamesInCitation(ref.authors),
454
+ role: "authors",
455
+ style: "plain",
456
+ });
457
+ segs.push(sep(", "));
458
+ segs.push({
459
+ text: ref.title,
460
+ role: "title",
461
+ style: "quoted",
462
+ });
463
+ segs.push(sep(", "));
464
+ segs.push({ text: "presented at ", role: "prefix" });
465
+ segs.push({
466
+ text: ref.conferenceName,
467
+ role: "misc",
468
+ style: "italic",
469
+ });
470
+ segs.push(sep(", "));
471
+ segs.push({ text: ref.location, role: "location" });
472
+ segs.push(sep(", "));
473
+ segs.push({
474
+ text: formatDate(ref.date),
475
+ role: "date",
476
+ });
477
+ if (ref.pages !== undefined) {
478
+ segs.push(sep(", pp. "));
479
+ segs.push({ text: ref.pages, role: "pages" });
480
+ }
481
+ if (ref.doi !== undefined) {
482
+ segs.push(sep(", doi: "));
483
+ segs.push({ text: ref.doi, role: "doi" });
484
+ }
485
+ segs.push(sep("."));
486
+ return segs;
487
+ }
488
+ function conferenceProceedingsSegments(ref) {
489
+ const segs = [];
490
+ if (ref.editors !== undefined) {
491
+ const editors = ref.editors;
492
+ if (editors.length > 0) {
493
+ segs.push({
494
+ text: formatNamesInCitation(editors),
495
+ role: "authors",
496
+ style: "plain",
497
+ });
498
+ segs.push({ text: ", Eds.", role: "suffix" });
499
+ segs.push(sep(", "));
500
+ }
501
+ }
502
+ segs.push({
503
+ text: ref.conferenceName,
504
+ role: "title",
505
+ style: "italic",
506
+ });
507
+ segs.push(sep(", "));
508
+ segs.push({ text: ref.location, role: "location" });
509
+ segs.push(sep(", "));
510
+ segs.push({
511
+ text: formatDate(ref.date),
512
+ role: "date",
513
+ });
514
+ segs.push(sep(". "));
515
+ segs.push({ text: ref.publisher, role: "publisher" });
516
+ if (ref.isbn !== undefined) {
517
+ segs.push(sep(". "));
518
+ segs.push({ text: ref.isbn, role: "isbn" });
519
+ }
520
+ segs.push(sep("."));
521
+ return segs;
522
+ }
523
+ function datasetSegments(ref) {
524
+ const segs = [];
525
+ if (ref.authors !== undefined) {
526
+ const authors = ref.authors;
527
+ if (authors.length > 0) {
528
+ segs.push({
529
+ text: formatNamesInCitation(authors),
530
+ role: "authors",
531
+ style: "plain",
532
+ });
533
+ segs.push(sep(", "));
534
+ }
535
+ }
536
+ segs.push({
537
+ text: ref.title,
538
+ role: "title",
539
+ style: "quoted",
540
+ });
541
+ segs.push(sep(", "));
542
+ segs.push({ text: ref.repository, role: "misc" });
543
+ if (ref.version !== undefined) {
544
+ segs.push(sep(", "));
545
+ segs.push({ text: "ver. ", role: "prefix" });
546
+ segs.push({ text: ref.version, role: "misc" });
547
+ }
548
+ segs.push(sep(", "));
549
+ segs.push({ text: ref.year, role: "year" });
550
+ if (ref.doi !== undefined) {
551
+ segs.push(sep(", doi: "));
552
+ segs.push({ text: ref.doi, role: "doi" });
553
+ }
554
+ segs.push(sep(". "));
555
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
556
+ segs.push({ text: ref.url, role: "url", style: "link" });
557
+ return segs;
558
+ }
559
+ function softwareSegments(ref) {
560
+ const segs = [];
561
+ if (ref.authors !== undefined) {
562
+ const authors = ref.authors;
563
+ if (authors.length > 0) {
564
+ segs.push({
565
+ text: formatNamesInCitation(authors),
566
+ role: "authors",
567
+ style: "plain",
568
+ });
569
+ segs.push(sep(", "));
570
+ }
571
+ }
572
+ segs.push({
573
+ text: ref.title,
574
+ role: "title",
575
+ style: "italic",
576
+ });
577
+ if (ref.version !== undefined) {
578
+ segs.push(sep(", "));
579
+ segs.push({ text: "ver. ", role: "prefix" });
580
+ segs.push({ text: ref.version, role: "misc" });
581
+ }
582
+ segs.push(sep(", "));
583
+ segs.push({ text: ref.year, role: "year" });
584
+ if (ref.publisher !== undefined) {
585
+ segs.push(sep(". "));
586
+ segs.push({ text: ref.publisher, role: "publisher" });
587
+ }
588
+ if (ref.doi !== undefined) {
589
+ segs.push(sep(". "));
590
+ segs.push({ text: "doi: ", role: "prefix" });
591
+ segs.push({ text: ref.doi, role: "doi" });
592
+ }
593
+ segs.push(sep(". "));
594
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
595
+ segs.push({ text: ref.url, role: "url", style: "link" });
596
+ return segs;
597
+ }
598
+ function onlineDocumentSegments(ref) {
599
+ const segs = [];
600
+ if (ref.authors !== undefined) {
601
+ const authors = ref.authors;
602
+ if (authors.length > 0) {
603
+ segs.push({
604
+ text: formatNamesInCitation(authors),
605
+ role: "authors",
606
+ style: "plain",
607
+ });
608
+ segs.push(sep(". "));
609
+ }
610
+ }
611
+ segs.push({
612
+ text: ref.title,
613
+ role: "title",
614
+ style: "quoted",
615
+ });
616
+ if (ref.publisher !== undefined) {
617
+ segs.push(sep(". "));
618
+ segs.push({ text: ref.publisher, role: "publisher" });
619
+ }
620
+ segs.push(sep(". "));
621
+ segs.push({ text: "Accessed: ", role: "prefix" });
622
+ segs.push({
623
+ text: formatDate(ref.accessedDate),
624
+ role: "accessedDate",
625
+ });
626
+ segs.push(sep(". "));
627
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
628
+ segs.push({ text: ref.url, role: "url", style: "link" });
629
+ return segs;
630
+ }
631
+ function blogSegments(ref) {
632
+ const segs = [];
633
+ segs.push({
634
+ text: formatSingleAuthor(ref.author),
635
+ role: "authors",
636
+ style: "plain",
637
+ });
638
+ segs.push(sep(", "));
639
+ segs.push({
640
+ text: ref.postTitle,
641
+ role: "title",
642
+ style: "quoted",
643
+ });
644
+ segs.push(sep(", "));
645
+ segs.push({
646
+ text: ref.blogName,
647
+ role: "misc",
648
+ style: "italic",
649
+ });
650
+ segs.push(sep(", "));
651
+ segs.push({
652
+ text: formatDate(ref.date),
653
+ role: "date",
654
+ });
655
+ segs.push(sep(". "));
656
+ segs.push({ text: "Accessed: ", role: "prefix" });
657
+ segs.push({
658
+ text: formatDate(ref.accessedDate),
659
+ role: "accessedDate",
660
+ });
661
+ segs.push(sep(". "));
662
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
663
+ segs.push({ text: ref.url, role: "url", style: "link" });
664
+ return segs;
665
+ }
666
+ function socialMediaSegments(ref) {
667
+ const segs = [];
668
+ segs.push({
669
+ text: formatSingleAuthor(ref.author),
670
+ role: "authors",
671
+ style: "plain",
672
+ });
673
+ segs.push(sep(". "));
674
+ segs.push({ text: ref.platform, role: "platform" });
675
+ segs.push(sep(". "));
676
+ segs.push({
677
+ text: formatDate(ref.postDate),
678
+ role: "date",
679
+ });
680
+ segs.push(sep(". "));
681
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
682
+ segs.push({ text: ref.url, role: "url", style: "link" });
683
+ return segs;
684
+ }
685
+ function preprintSegments(ref) {
686
+ const segs = [];
687
+ segs.push({
688
+ text: formatNamesInCitation(ref.authors),
689
+ role: "authors",
690
+ style: "plain",
691
+ });
692
+ segs.push(sep(", "));
693
+ segs.push({
694
+ text: ref.title,
695
+ role: "title",
696
+ style: "quoted",
697
+ });
698
+ segs.push(sep(", "));
699
+ segs.push({ text: ref.server, role: "misc", style: "italic" });
700
+ segs.push(sep(", "));
701
+ segs.push({ text: ref.year, role: "year" });
702
+ if (ref.doi !== undefined) {
703
+ segs.push(sep(", doi: "));
704
+ segs.push({ text: ref.doi, role: "doi" });
705
+ }
706
+ segs.push(sep(". "));
707
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
708
+ segs.push({ text: ref.url, role: "url", style: "link" });
709
+ return segs;
710
+ }
711
+ function videoSegments(ref) {
712
+ const segs = [];
713
+ if (ref.authors !== undefined) {
714
+ const authors = ref.authors;
715
+ if (authors.length > 0) {
716
+ segs.push({
717
+ text: formatNamesInCitation(authors),
718
+ role: "authors",
719
+ style: "plain",
720
+ });
721
+ segs.push(sep(". "));
722
+ }
723
+ }
724
+ segs.push({
725
+ text: ref.title,
726
+ role: "title",
727
+ style: "italic",
728
+ });
729
+ segs.push(sep(". "));
730
+ segs.push({ text: ref.platform, role: "platform" });
731
+ if (ref.releaseDate !== undefined) {
732
+ segs.push(sep(". "));
733
+ segs.push({
734
+ text: formatDate(ref.releaseDate),
735
+ role: "date",
736
+ });
737
+ }
738
+ segs.push(sep(". "));
739
+ segs.push({ text: "Accessed: ", role: "prefix" });
740
+ segs.push({
741
+ text: formatDate(ref.accessedDate),
742
+ role: "accessedDate",
743
+ });
744
+ segs.push(sep(". "));
745
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
746
+ segs.push({ text: ref.url, role: "url", style: "link" });
747
+ return segs;
748
+ }
749
+ function podcastSegments(ref) {
750
+ const segs = [];
751
+ if (ref.authors !== undefined) {
752
+ const authors = ref.authors;
753
+ if (authors.length > 0) {
754
+ segs.push({
755
+ text: formatNamesInCitation(authors),
756
+ role: "authors",
757
+ style: "plain",
758
+ });
759
+ segs.push(sep(". "));
760
+ }
761
+ }
762
+ segs.push({
763
+ text: ref.episodeTitle,
764
+ role: "title",
765
+ style: "quoted",
766
+ });
767
+ segs.push(sep(", in "));
768
+ segs.push({
769
+ text: ref.seriesTitle,
770
+ role: "misc",
771
+ style: "italic",
772
+ });
773
+ segs.push(sep(". "));
774
+ segs.push({ text: ref.platform, role: "platform" });
775
+ segs.push(sep(". "));
776
+ segs.push({ text: "Accessed: ", role: "prefix" });
777
+ segs.push({
778
+ text: formatDate(ref.accessedDate),
779
+ role: "accessedDate",
780
+ });
781
+ segs.push(sep(". "));
782
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
783
+ segs.push({ text: ref.url, role: "url", style: "link" });
784
+ return segs;
785
+ }
786
+ function courseSegments(ref) {
787
+ const segs = [];
788
+ segs.push({
789
+ text: formatSingleAuthor(ref.instructor),
790
+ role: "authors",
791
+ style: "plain",
792
+ });
793
+ segs.push(sep(", "));
794
+ segs.push({
795
+ text: ref.title,
796
+ role: "title",
797
+ style: "italic",
798
+ });
799
+ segs.push(sep(", "));
800
+ segs.push({ text: ref.institution, role: "institution" });
801
+ if (ref.courseCode !== undefined) {
802
+ segs.push(sep(", "));
803
+ segs.push({ text: ref.courseCode, role: "misc" });
804
+ }
805
+ segs.push(sep(", "));
806
+ segs.push({ text: ref.term, role: "misc" });
807
+ segs.push(sep(", "));
808
+ segs.push({ text: ref.year, role: "year" });
809
+ segs.push(sep("."));
810
+ return segs;
811
+ }
812
+ function presentationSegments(ref) {
813
+ const segs = [];
814
+ segs.push({
815
+ text: formatSingleAuthor(ref.presenter),
816
+ role: "authors",
817
+ style: "plain",
818
+ });
819
+ segs.push(sep(", "));
820
+ segs.push({
821
+ text: ref.title,
822
+ role: "title",
823
+ style: "quoted",
824
+ });
825
+ segs.push(sep(", "));
826
+ segs.push({ text: "presented at ", role: "prefix" });
827
+ segs.push({
828
+ text: ref.eventTitle,
829
+ role: "misc",
830
+ style: "italic",
831
+ });
832
+ segs.push(sep(", "));
833
+ segs.push({ text: ref.location, role: "location" });
834
+ segs.push(sep(", "));
835
+ segs.push({
836
+ text: formatDate(ref.date),
837
+ role: "date",
838
+ });
839
+ segs.push(sep("."));
840
+ return segs;
841
+ }
842
+ function interviewSegments(ref) {
843
+ const segs = [];
844
+ segs.push({
845
+ text: formatSingleAuthor(ref.interviewee),
846
+ role: "authors",
847
+ style: "plain",
848
+ });
849
+ if (ref.interviewer !== undefined) {
850
+ segs.push(sep(", "));
851
+ segs.push({ text: "interviewed by ", role: "prefix" });
852
+ segs.push({
853
+ text: formatSingleAuthor(ref.interviewer),
854
+ role: "misc",
855
+ });
856
+ }
857
+ segs.push(sep(", "));
858
+ segs.push({
859
+ text: formatDate(ref.date),
860
+ role: "date",
861
+ });
862
+ segs.push(sep("."));
863
+ return segs;
864
+ }
865
+ function personalCommunicationSegments(ref) {
866
+ const segs = [];
867
+ segs.push({
868
+ text: formatSingleAuthor(ref.person),
869
+ role: "authors",
870
+ style: "plain",
871
+ });
872
+ segs.push(sep(", "));
873
+ segs.push({ text: "personal communication", role: "misc" });
874
+ segs.push(sep(", "));
875
+ segs.push({
876
+ text: formatDate(ref.date),
877
+ role: "date",
878
+ });
879
+ segs.push(sep("."));
880
+ return segs;
881
+ }
882
+ function emailSegments(ref) {
883
+ const segs = [];
884
+ segs.push({
885
+ text: formatSingleAuthor(ref.sender),
886
+ role: "authors",
887
+ style: "plain",
888
+ });
889
+ segs.push(sep(", "));
890
+ segs.push({ text: "email to ", role: "prefix" });
891
+ segs.push({
892
+ text: formatSingleAuthor(ref.recipient),
893
+ role: "misc",
894
+ });
895
+ segs.push(sep(", "));
896
+ segs.push({
897
+ text: formatDate(ref.date),
898
+ role: "date",
899
+ });
900
+ segs.push(sep("."));
901
+ return segs;
902
+ }
903
+ function lawSegments(ref) {
904
+ const segs = [];
905
+ segs.push({
906
+ text: ref.title,
907
+ role: "title",
908
+ style: "italic",
909
+ });
910
+ segs.push(sep(", "));
911
+ segs.push({ text: ref.jurisdiction, role: "misc" });
912
+ segs.push(sep(", "));
913
+ segs.push({
914
+ text: formatDate(ref.dateEnacted),
915
+ role: "date",
916
+ });
917
+ segs.push(sep("."));
918
+ return segs;
919
+ }
920
+ function courtCaseSegments(ref) {
921
+ const segs = [];
922
+ segs.push({
923
+ text: ref.caseName,
924
+ role: "title",
925
+ style: "italic",
926
+ });
927
+ segs.push(sep(", "));
928
+ segs.push({ text: ref.court, role: "misc" });
929
+ if (ref.reporter !== undefined) {
930
+ segs.push(sep(", "));
931
+ segs.push({ text: ref.reporter, role: "misc" });
932
+ }
933
+ segs.push(sep(", "));
934
+ segs.push({
935
+ text: formatDate(ref.date),
936
+ role: "date",
937
+ });
938
+ segs.push(sep("."));
939
+ return segs;
940
+ }
941
+ function governmentPublicationSegments(ref) {
942
+ const segs = [];
943
+ if (ref.authors !== undefined) {
944
+ const authors = ref.authors;
945
+ if (authors.length > 0) {
946
+ segs.push({
947
+ text: formatNamesInCitation(authors),
948
+ role: "authors",
949
+ style: "plain",
950
+ });
951
+ segs.push(sep(", "));
952
+ }
953
+ }
954
+ segs.push({
955
+ text: ref.title,
956
+ role: "title",
957
+ style: "italic",
958
+ });
959
+ segs.push(sep(", "));
960
+ segs.push({ text: ref.agency, role: "organization" });
961
+ segs.push(sep(", "));
962
+ segs.push({ text: ref.location, role: "location" });
963
+ if (ref.reportNumber !== undefined) {
964
+ segs.push(sep(", "));
965
+ segs.push({ text: "Rep. ", role: "prefix" });
966
+ segs.push({ text: ref.reportNumber, role: "reportNumber" });
967
+ }
968
+ segs.push(sep(", "));
969
+ segs.push({
970
+ text: formatDate(ref.date),
971
+ role: "date",
972
+ });
973
+ segs.push(sep("."));
974
+ return segs;
975
+ }
976
+ function datasheetSegments(ref) {
977
+ const segs = [];
978
+ segs.push({
979
+ text: ref.title,
980
+ role: "title",
981
+ style: "italic",
982
+ });
983
+ segs.push(sep(", "));
984
+ segs.push({ text: ref.manufacturer, role: "publisher" });
985
+ segs.push(sep(", "));
986
+ segs.push({ text: ref.partNumber, role: "misc" });
987
+ segs.push(sep(", "));
988
+ segs.push({ text: ref.year, role: "year" });
989
+ segs.push(sep(". "));
990
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
991
+ segs.push({ text: ref.url, role: "url", style: "link" });
992
+ return segs;
993
+ }
994
+ function productManualSegments(ref) {
995
+ const segs = [];
996
+ segs.push({
997
+ text: ref.title,
998
+ role: "title",
999
+ style: "italic",
1000
+ });
1001
+ segs.push(sep(", "));
1002
+ segs.push({ text: ref.manufacturer, role: "publisher" });
1003
+ segs.push(sep(", "));
1004
+ segs.push({ text: ref.model, role: "misc" });
1005
+ segs.push(sep(", "));
1006
+ segs.push({ text: ref.year, role: "year" });
1007
+ if (ref.url !== undefined) {
1008
+ segs.push(sep(". "));
1009
+ segs.push({ text: "[Online]. Available: ", role: "prefix" });
1010
+ segs.push({ text: ref.url, role: "url", style: "link" });
1011
+ }
1012
+ segs.push(sep("."));
1013
+ return segs;
1014
+ }
1015
+ // ---------------------------------------------------------------------------
1016
+ // Builder dispatch map
1017
+ // ---------------------------------------------------------------------------
1018
+ const BUILDERS = {
1019
+ Book: bookSegments,
1020
+ Website: websiteSegments,
1021
+ BookChapter: bookChapterSegments,
1022
+ Handbook: handbookSegments,
1023
+ TechnicalReport: technicalReportSegments,
1024
+ Standard: standardSegments,
1025
+ Thesis: thesisSegments,
1026
+ Patent: patentSegments,
1027
+ Dictionary: dictionarySegments,
1028
+ Encyclopedia: encyclopediaSegments,
1029
+ JournalArticle: journalArticleSegments,
1030
+ MagazineArticle: magazineArticleSegments,
1031
+ NewspaperArticle: newspaperArticleSegments,
1032
+ ConferencePaper: conferencePaperSegments,
1033
+ ConferenceProceedings: conferenceProceedingsSegments,
1034
+ Dataset: datasetSegments,
1035
+ Software: softwareSegments,
1036
+ OnlineDocument: onlineDocumentSegments,
1037
+ Blog: blogSegments,
1038
+ SocialMedia: socialMediaSegments,
1039
+ Preprint: preprintSegments,
1040
+ Video: videoSegments,
1041
+ Podcast: podcastSegments,
1042
+ Course: courseSegments,
1043
+ Presentation: presentationSegments,
1044
+ Interview: interviewSegments,
1045
+ PersonalCommunication: personalCommunicationSegments,
1046
+ Email: emailSegments,
1047
+ Law: lawSegments,
1048
+ CourtCase: courtCaseSegments,
1049
+ GovernmentPublication: governmentPublicationSegments,
1050
+ Datasheet: datasheetSegments,
1051
+ ProductManual: productManualSegments,
1052
+ };
1053
+ //# sourceMappingURL=formatting.js.map