Skip to content

Commit

Permalink
Match GCN Circular references with parentheses, periods, and pound signs
Browse files Browse the repository at this point in the history
Fixes #51.

---------

Co-authored-by: Leo Singer <leo.singer@ligo.org>
  • Loading branch information
Courey and lpsinger authored Jul 19, 2024
1 parent 6a03950 commit d39d0e6
Show file tree
Hide file tree
Showing 5 changed files with 1,003 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
src/replacements/*/*.md -text
src/replacements/*/*.json -text
src/replacements/*/*.html -text
6 changes: 3 additions & 3 deletions src/replacements/gcn-circular/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ function normalize(match: string) {
return parseFloat(match.replace(/a$/i, '.5'))
}

const preamble = /GCN(?:s|\s+Circulars?|\s+Circs?\.)?\s*/.source
const conjunction = /(?:\s*|,|and)+/.source
const preamble = /GCN(?:s|\s+Circulars?|\s+Circs?\.?)?\s*(?:#)?/gi.source
const conjunction = /(?:\s*#?|,|and\s*#?)+/.source
const circularIdRegExp = /\d+(?:a|\.5)?/gi
const circularId = circularIdRegExp.source
const legacyUrlOrigin = /https?:\/\/gcn\.gsfc\.nasa\.gov/.source
Expand All @@ -17,7 +17,7 @@ const url = `${urlOrigin}/circulars/(${circularId})`

export default {
find: new RegExp(
`${url}|${legacyUrl}|(?<=^|\\s)(?:${preamble}${circularId}(?:${conjunction}${circularId})*)`,
`${url}|${legacyUrl}|(?<=^|\\s|\\()(?:${preamble}${circularId}(?:${conjunction}${circularId})*)`,
'gi'
),
replace(data, value, circularIdFromUrl, circularIdFromLegacyUrl) {
Expand Down
44 changes: 43 additions & 1 deletion src/replacements/gcn-circular/test.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,46 @@ <h1>Hello, world</h1>
<p>And even really weird legacy URLs work: <data class="gcn-circular" value="33567">https://gcn.gsfc.nasa.gov/gcn/gcn/gcn/gcn3/33567.gcn3</data></p>
<p>GCN Circ. <data class="gcn-circular" value="789">789</data> and GCN Circs. <data class="gcn-circular" value="3">3</data> and <data class="gcn-circular" value="4">4</data></p>
<p>And this one refers to GCNs <data class="gcn-circular" value="1">1</data>, <data class="gcn-circular" value="23.5">23a</data>, <data class="gcn-circular" value="45.5">45.5</data> and <data class="gcn-circular" value="42">42</data></p>
<p>This is not a Circular: http://gcn.gsfc.nasa.gov/gcn/other/971227.gcn3</p>
<p>This is not a Circular: http://gcn.gsfc.nasa.gov/gcn/other/971227.gcn3</p>
<p>All of these minor variations with parentheses, octothorpes, character casing, and periods, and different conjunctions are also supported:
GCN <data class="gcn-circular" value="123">123</data>
GCN #<data class="gcn-circular" value="123">123</data>
(GCN <data class="gcn-circular" value="123">123</data>)
(GCN #<data class="gcn-circular" value="123">123</data>)
GCN circ. <data class="gcn-circular" value="123">123</data>
GCN circ. #<data class="gcn-circular" value="123">123</data>
(GCN circ. #<data class="gcn-circular" value="123">123</data>)
GCN circ <data class="gcn-circular" value="123">123</data>
(GCN circ <data class="gcn-circular" value="123">123</data>)
GCN Circ. <data class="gcn-circular" value="123">123</data>
GCN Circ. #<data class="gcn-circular" value="123">123</data>
(GCN Circ. #<data class="gcn-circular" value="123">123</data>)
GCN Circ <data class="gcn-circular" value="123">123</data>
(GCN Circ <data class="gcn-circular" value="123">123</data>)
GCN Circular <data class="gcn-circular" value="123">123</data>
GCN Circular #<data class="gcn-circular" value="123">123</data>
(GCN Circular <data class="gcn-circular" value="123">123</data>)
(GCN Circular #<data class="gcn-circular" value="123">123</data>)
GCN Circs <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>
GCN Circs. <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>
GCN Circs #<data class="gcn-circular" value="123">123</data>, #<data class="gcn-circular" value="456">456</data>
(GCN Circs #<data class="gcn-circular" value="123">123</data>, #<data class="gcn-circular" value="456">456</data>)
(GCN Circs <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>)
GCN Circ <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>
GCN Circ. <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>
GCN Circ #<data class="gcn-circular" value="123">123</data>, #<data class="gcn-circular" value="456">456</data>
(GCN Circ <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>)
GCN circs <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>
GCN circs. <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>
GCN circs #<data class="gcn-circular" value="123">123</data>, #<data class="gcn-circular" value="456">456</data>
(GCN circs <data class="gcn-circular" value="123">123</data>, <data class="gcn-circular" value="456">456</data>)
GCN circs <data class="gcn-circular" value="123">123</data> and <data class="gcn-circular" value="456">456</data>
GCN circs. <data class="gcn-circular" value="123">123</data> and <data class="gcn-circular" value="456">456</data>
GCN circs #<data class="gcn-circular" value="123">123</data> and #<data class="gcn-circular" value="456">456</data>
(GCN circs <data class="gcn-circular" value="123">123</data> and <data class="gcn-circular" value="456">456</data>)
GCN circs <data class="gcn-circular" value="123">123</data> <data class="gcn-circular" value="456">456</data>
GCN circs. <data class="gcn-circular" value="123">123</data> <data class="gcn-circular" value="456">456</data>
GCN circs #<data class="gcn-circular" value="123">123</data> #<data class="gcn-circular" value="456">456</data>
(GCN circs <data class="gcn-circular" value="123">123</data> <data class="gcn-circular" value="456">456</data>)
GCN #<data class="gcn-circular" value="123">123</data>
gcn <data class="gcn-circular" value="123">123</data></p>
Loading

0 comments on commit d39d0e6

Please sign in to comment.