nmea_plus 1.0.25 → 1.1.0

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.
Files changed (209) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +2 -2
  3. data/lib/nmea_plus/ais_message_factory.rb +3 -4
  4. data/lib/nmea_plus/generated_parser/parser.rb +7 -5
  5. data/lib/nmea_plus/generated_parser/tokenizer.rb +76 -75
  6. data/lib/nmea_plus/message/ais/base_ais.rb +1 -2
  7. data/lib/nmea_plus/message/ais/vdm.rb +30 -27
  8. data/lib/nmea_plus/message/ais/vdm_payload/mmsi_info.rb +9 -3
  9. data/lib/nmea_plus/message/ais/vdm_payload/payload.rb +8 -2
  10. data/lib/nmea_plus/message/ais/vdm_payload/sub_area.rb +2 -3
  11. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg.rb +3 -2
  12. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg1.rb +1 -1
  13. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg10.rb +1 -1
  14. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg11.rb +1 -1
  15. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg12.rb +1 -1
  16. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg13.rb +1 -1
  17. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg14.rb +1 -1
  18. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg15.rb +1 -1
  19. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg16.rb +1 -1
  20. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg17.rb +1 -1
  21. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg18.rb +1 -1
  22. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg19.rb +1 -1
  23. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg2.rb +1 -1
  24. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg20.rb +1 -1
  25. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg21.rb +3 -3
  26. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg24.rb +1 -1
  27. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg27.rb +1 -1
  28. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg3.rb +1 -1
  29. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg4.rb +1 -1
  30. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg5.rb +1 -1
  31. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6.rb +8 -8
  32. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6_dynamic_payload.rb +1 -1
  33. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1022f61.rb +7 -2
  34. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f0.rb +1 -1
  35. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f2.rb +1 -1
  36. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f3.rb +1 -1
  37. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f4.rb +1 -1
  38. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f5.rb +1 -1
  39. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d235f10.rb +1 -1
  40. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg7.rb +1 -1
  41. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8.rb +6 -6
  42. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8_dynamic_payload.rb +1 -1
  43. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d1f0.rb +1 -1
  44. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d1f22.rb +5 -2
  45. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d1f31.rb +7 -3
  46. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d200f10.rb +2 -1
  47. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d366f56.rb +1 -1
  48. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg9.rb +3 -3
  49. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_binary_acknowledgement.rb +1 -1
  50. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_class_b_cs_position.rb +3 -3
  51. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_cnb.rb +5 -4
  52. data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_station_report.rb +4 -4
  53. data/lib/nmea_plus/message/ais/vdo.rb +1 -1
  54. data/lib/nmea_plus/message/base.rb +14 -6
  55. data/lib/nmea_plus/message/nmea/aam.rb +1 -2
  56. data/lib/nmea_plus/message/nmea/alm.rb +1 -1
  57. data/lib/nmea_plus/message/nmea/apa.rb +1 -1
  58. data/lib/nmea_plus/message/nmea/apb.rb +1 -1
  59. data/lib/nmea_plus/message/nmea/base_nmea.rb +5 -6
  60. data/lib/nmea_plus/message/nmea/bec.rb +1 -1
  61. data/lib/nmea_plus/message/nmea/ber.rb +1 -1
  62. data/lib/nmea_plus/message/nmea/bod.rb +1 -1
  63. data/lib/nmea_plus/message/nmea/bpi.rb +1 -1
  64. data/lib/nmea_plus/message/nmea/bwc.rb +2 -2
  65. data/lib/nmea_plus/message/nmea/bwr.rb +1 -1
  66. data/lib/nmea_plus/message/nmea/bww.rb +2 -2
  67. data/lib/nmea_plus/message/nmea/dbk.rb +1 -1
  68. data/lib/nmea_plus/message/nmea/dbs.rb +2 -2
  69. data/lib/nmea_plus/message/nmea/dbt.rb +2 -2
  70. data/lib/nmea_plus/message/nmea/dcn.rb +1 -1
  71. data/lib/nmea_plus/message/nmea/dpt.rb +1 -1
  72. data/lib/nmea_plus/message/nmea/dru.rb +1 -1
  73. data/lib/nmea_plus/message/nmea/dtm.rb +1 -1
  74. data/lib/nmea_plus/message/nmea/fsi.rb +1 -1
  75. data/lib/nmea_plus/message/nmea/gbs.rb +1 -1
  76. data/lib/nmea_plus/message/nmea/gda.rb +1 -1
  77. data/lib/nmea_plus/message/nmea/gdf.rb +1 -1
  78. data/lib/nmea_plus/message/nmea/gdp.rb +1 -1
  79. data/lib/nmea_plus/message/nmea/gga.rb +1 -2
  80. data/lib/nmea_plus/message/nmea/gla.rb +1 -1
  81. data/lib/nmea_plus/message/nmea/glc.rb +1 -1
  82. data/lib/nmea_plus/message/nmea/glf.rb +1 -1
  83. data/lib/nmea_plus/message/nmea/gll.rb +1 -1
  84. data/lib/nmea_plus/message/nmea/glp.rb +1 -1
  85. data/lib/nmea_plus/message/nmea/gns.rb +1 -2
  86. data/lib/nmea_plus/message/nmea/goa.rb +1 -1
  87. data/lib/nmea_plus/message/nmea/gof.rb +1 -1
  88. data/lib/nmea_plus/message/nmea/gop.rb +1 -1
  89. data/lib/nmea_plus/message/nmea/grs.rb +4 -1
  90. data/lib/nmea_plus/message/nmea/gsa.rb +1 -1
  91. data/lib/nmea_plus/message/nmea/gst.rb +1 -1
  92. data/lib/nmea_plus/message/nmea/gsv.rb +1 -1
  93. data/lib/nmea_plus/message/nmea/gtd.rb +1 -1
  94. data/lib/nmea_plus/message/nmea/gxa.rb +1 -1
  95. data/lib/nmea_plus/message/nmea/gxf.rb +1 -1
  96. data/lib/nmea_plus/message/nmea/gxp.rb +1 -1
  97. data/lib/nmea_plus/message/nmea/hcc.rb +1 -1
  98. data/lib/nmea_plus/message/nmea/hcd.rb +1 -1
  99. data/lib/nmea_plus/message/nmea/hdg.rb +1 -1
  100. data/lib/nmea_plus/message/nmea/hdm.rb +1 -1
  101. data/lib/nmea_plus/message/nmea/hdt.rb +1 -1
  102. data/lib/nmea_plus/message/nmea/hfb.rb +1 -1
  103. data/lib/nmea_plus/message/nmea/hsc.rb +1 -1
  104. data/lib/nmea_plus/message/nmea/htc.rb +1 -1
  105. data/lib/nmea_plus/message/nmea/hvd.rb +1 -1
  106. data/lib/nmea_plus/message/nmea/hvm.rb +1 -1
  107. data/lib/nmea_plus/message/nmea/ima.rb +1 -1
  108. data/lib/nmea_plus/message/nmea/its.rb +1 -1
  109. data/lib/nmea_plus/message/nmea/lcd.rb +1 -1
  110. data/lib/nmea_plus/message/nmea/mda.rb +1 -1
  111. data/lib/nmea_plus/message/nmea/mhu.rb +1 -1
  112. data/lib/nmea_plus/message/nmea/mmb.rb +1 -1
  113. data/lib/nmea_plus/message/nmea/msk.rb +1 -1
  114. data/lib/nmea_plus/message/nmea/mss.rb +1 -1
  115. data/lib/nmea_plus/message/nmea/mta.rb +1 -1
  116. data/lib/nmea_plus/message/nmea/mtw.rb +1 -1
  117. data/lib/nmea_plus/message/nmea/mwh.rb +1 -1
  118. data/lib/nmea_plus/message/nmea/mws.rb +1 -1
  119. data/lib/nmea_plus/message/nmea/mwv.rb +1 -1
  120. data/lib/nmea_plus/message/nmea/oln.rb +1 -1
  121. data/lib/nmea_plus/message/nmea/olw.rb +1 -1
  122. data/lib/nmea_plus/message/nmea/omp.rb +1 -1
  123. data/lib/nmea_plus/message/nmea/onz.rb +1 -1
  124. data/lib/nmea_plus/message/nmea/osd.rb +1 -1
  125. data/lib/nmea_plus/message/nmea/proprietary/pashr.rb +1 -1
  126. data/lib/nmea_plus/message/nmea/r00.rb +1 -1
  127. data/lib/nmea_plus/message/nmea/rma.rb +1 -1
  128. data/lib/nmea_plus/message/nmea/rmb.rb +1 -1
  129. data/lib/nmea_plus/message/nmea/rmc.rb +1 -1
  130. data/lib/nmea_plus/message/nmea/rnn.rb +1 -1
  131. data/lib/nmea_plus/message/nmea/rot.rb +1 -1
  132. data/lib/nmea_plus/message/nmea/rpm.rb +1 -1
  133. data/lib/nmea_plus/message/nmea/rsa.rb +1 -1
  134. data/lib/nmea_plus/message/nmea/rsd.rb +1 -1
  135. data/lib/nmea_plus/message/nmea/rte.rb +1 -1
  136. data/lib/nmea_plus/message/nmea/sbk.rb +1 -1
  137. data/lib/nmea_plus/message/nmea/scd.rb +2 -2
  138. data/lib/nmea_plus/message/nmea/scy.rb +1 -1
  139. data/lib/nmea_plus/message/nmea/sdb.rb +1 -1
  140. data/lib/nmea_plus/message/nmea/sfi.rb +1 -1
  141. data/lib/nmea_plus/message/nmea/sgd.rb +1 -1
  142. data/lib/nmea_plus/message/nmea/sgr.rb +2 -1
  143. data/lib/nmea_plus/message/nmea/siu.rb +1 -1
  144. data/lib/nmea_plus/message/nmea/slc.rb +2 -2
  145. data/lib/nmea_plus/message/nmea/snc.rb +3 -3
  146. data/lib/nmea_plus/message/nmea/snu.rb +1 -1
  147. data/lib/nmea_plus/message/nmea/sps.rb +1 -1
  148. data/lib/nmea_plus/message/nmea/ssf.rb +1 -1
  149. data/lib/nmea_plus/message/nmea/stc.rb +1 -1
  150. data/lib/nmea_plus/message/nmea/stn.rb +1 -1
  151. data/lib/nmea_plus/message/nmea/str.rb +1 -1
  152. data/lib/nmea_plus/message/nmea/sys.rb +6 -6
  153. data/lib/nmea_plus/message/nmea/tds.rb +1 -1
  154. data/lib/nmea_plus/message/nmea/tec.rb +1 -1
  155. data/lib/nmea_plus/message/nmea/tep.rb +1 -1
  156. data/lib/nmea_plus/message/nmea/tfi.rb +1 -1
  157. data/lib/nmea_plus/message/nmea/tga.rb +1 -1
  158. data/lib/nmea_plus/message/nmea/tif.rb +14 -11
  159. data/lib/nmea_plus/message/nmea/tpc.rb +1 -1
  160. data/lib/nmea_plus/message/nmea/tpr.rb +1 -1
  161. data/lib/nmea_plus/message/nmea/tpt.rb +1 -1
  162. data/lib/nmea_plus/message/nmea/trf.rb +1 -1
  163. data/lib/nmea_plus/message/nmea/trp.rb +1 -1
  164. data/lib/nmea_plus/message/nmea/trs.rb +20 -17
  165. data/lib/nmea_plus/message/nmea/ttm.rb +1 -1
  166. data/lib/nmea_plus/message/nmea/vbw.rb +1 -1
  167. data/lib/nmea_plus/message/nmea/vcd.rb +1 -1
  168. data/lib/nmea_plus/message/nmea/vdr.rb +1 -1
  169. data/lib/nmea_plus/message/nmea/vhw.rb +1 -1
  170. data/lib/nmea_plus/message/nmea/vlw.rb +1 -1
  171. data/lib/nmea_plus/message/nmea/vpe.rb +1 -1
  172. data/lib/nmea_plus/message/nmea/vpw.rb +1 -1
  173. data/lib/nmea_plus/message/nmea/vta.rb +1 -1
  174. data/lib/nmea_plus/message/nmea/vtg.rb +6 -2
  175. data/lib/nmea_plus/message/nmea/vti.rb +1 -1
  176. data/lib/nmea_plus/message/nmea/vwe.rb +1 -1
  177. data/lib/nmea_plus/message/nmea/vwr.rb +1 -1
  178. data/lib/nmea_plus/message/nmea/vwt.rb +1 -1
  179. data/lib/nmea_plus/message/nmea/wcv.rb +1 -1
  180. data/lib/nmea_plus/message/nmea/wdc.rb +1 -1
  181. data/lib/nmea_plus/message/nmea/wdr.rb +1 -1
  182. data/lib/nmea_plus/message/nmea/wfm.rb +1 -1
  183. data/lib/nmea_plus/message/nmea/wnc.rb +1 -1
  184. data/lib/nmea_plus/message/nmea/wnr.rb +1 -1
  185. data/lib/nmea_plus/message/nmea/wpl.rb +1 -1
  186. data/lib/nmea_plus/message/nmea/xdr.rb +1 -1
  187. data/lib/nmea_plus/message/nmea/xte.rb +1 -1
  188. data/lib/nmea_plus/message/nmea/xtr.rb +1 -1
  189. data/lib/nmea_plus/message/nmea/ywp.rb +1 -1
  190. data/lib/nmea_plus/message/nmea/yws.rb +1 -1
  191. data/lib/nmea_plus/message/nmea/zaa.rb +1 -1
  192. data/lib/nmea_plus/message/nmea/zcd.rb +8 -6
  193. data/lib/nmea_plus/message/nmea/zda.rb +5 -3
  194. data/lib/nmea_plus/message/nmea/zev.rb +8 -6
  195. data/lib/nmea_plus/message/nmea/zfi.rb +1 -1
  196. data/lib/nmea_plus/message/nmea/zfo.rb +1 -1
  197. data/lib/nmea_plus/message/nmea/zlz.rb +1 -1
  198. data/lib/nmea_plus/message/nmea/zpi.rb +1 -1
  199. data/lib/nmea_plus/message/nmea/zta.rb +1 -1
  200. data/lib/nmea_plus/message/nmea/zte.rb +1 -1
  201. data/lib/nmea_plus/message/nmea/ztg.rb +1 -1
  202. data/lib/nmea_plus/message/nmea/zti.rb +1 -1
  203. data/lib/nmea_plus/message/nmea/zwp.rb +1 -1
  204. data/lib/nmea_plus/message/nmea/zzu.rb +1 -1
  205. data/lib/nmea_plus/message_factory.rb +4 -4
  206. data/lib/nmea_plus/nmea_message_factory.rb +152 -153
  207. data/lib/nmea_plus/version.rb +1 -1
  208. data/lib/nmea_plus.rb +6 -4
  209. metadata +13 -167
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 206e8ee8be3af439463f923eb6d0f3703fa3f4c3
4
- data.tar.gz: 7b8d132bdc71151b34669a542f95702621f3ceb0
2
+ SHA256:
3
+ metadata.gz: cb281d4016ac12b0aceba18a59c9db5093319742bdf06619f5f16d1030939e38
4
+ data.tar.gz: bc20490025d2a92fee9f545fe4a147f4043ab0d8e220daf821bdf9d446048404
5
5
  SHA512:
6
- metadata.gz: 7d2cdc43eeca106ce582b2876db6103d20180283f53d7def21325a47b14e84b0f53dd8b1912badba1f7490531103bd54ae8fb2900e0d3caef36d4d850e79ebf8
7
- data.tar.gz: ab4f557f03abadb9ab9a23fc3426c9f1fa8234e5346cddfc16e6b6709c250a851e569ba0d3dde1fff13b56dd1950a147250c05e040f51fbecee00b532266135c
6
+ metadata.gz: a85275556747da743ea2b77f61a8d73b6a227be80be17c87b4c220d58cd2a2f3fd34c2cee9c7407ee0acb14bbf61ed21b676a5e261b5ce568cea9962ef7cd5af
7
+ data.tar.gz: 5551674f7e846c8cfcd7ae68edc08382acd36647fb6c642eec9f9aee96ffbbb7d010b61197a006c6647e1ccb4464f2eab4af83dfc4c27b323385bdbe0b67bcb6
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # NMEA (GPS) and AIS Parser / Decoder for Ruby (nmea_plus)
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/nmea_plus.svg)](https://rubygems.org/gems/nmea_plus)
4
- [![Build Status](https://travis-ci.org/ianfixes/nmea_plus.svg)](https://travis-ci.org/ianfixes/nmea_plus)
5
- [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](http://www.rubydoc.info/gems/nmea_plus/1.0.25)
4
+ [![Ruby CI](https://github.com/ianfixes/nmea_plus/actions/workflows/ruby.yml/badge.svg)](https://github.com/ianfixes/nmea_plus/actions/workflows/ruby.yml)
5
+ [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](http://www.rubydoc.info/gems/nmea_plus/1.1.0)
6
6
  [![Documentation completeness](http://inch-ci.org/github/ianfixes/nmea_plus.svg?branch=master)](http://inch-ci.org/github/ianfixes/nmea_plus)
7
7
 
8
8
  [NMEA Plus](https://github.com/ianfixes/nmea_plus) is a Ruby gem for parsing and decoding "GPS" messages: NMEA, AIS, and any other similar formats of short messaging typically used by marine equipment. It provides convenient access (by name) to the fields of each message type, and a stream reader designed for use with Ruby Blocks.
@@ -1,7 +1,6 @@
1
-
2
- require 'nmea_plus/message_factory'
3
- require 'nmea_plus/message/ais/vdm'
4
- require 'nmea_plus/message/ais/vdo'
1
+ require "nmea_plus/message_factory"
2
+ require "nmea_plus/message/ais/vdm"
3
+ require "nmea_plus/message/ais/vdo"
5
4
 
6
5
  module NMEAPlus
7
6
 
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.14
4
- # from Racc grammer file "".
3
+ # This file is automatically generated by Racc 1.8.1
4
+ # from Racc grammar file "parser.y".
5
5
  #
6
6
 
7
7
  require 'racc/parser.rb'
@@ -88,6 +88,7 @@ Racc_arg = [
88
88
  racc_shift_n,
89
89
  racc_reduce_n,
90
90
  racc_use_result_var ]
91
+ Ractor.make_shareable(Racc_arg) if defined?(Ractor)
91
92
 
92
93
  Racc_token_to_s_table = [
93
94
  "$end",
@@ -98,6 +99,7 @@ Racc_token_to_s_table = [
98
99
  "DATA",
99
100
  "$start",
100
101
  "start" ]
102
+ Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
101
103
 
102
104
  Racc_debug_parser = false
103
105
 
@@ -107,14 +109,14 @@ Racc_debug_parser = false
107
109
 
108
110
  module_eval(<<'.,.,', 'parser.y', 8)
109
111
  def _reduce_1(val, _values, result)
110
- result = NMEAPlus::NMEAMessageFactory.create(val[0], val[1], val[2])
112
+ result = NMEAPlus::NMEAMessageFactory.create(val[0], val[1], val[2])
111
113
  result
112
114
  end
113
115
  .,.,
114
116
 
115
117
  module_eval(<<'.,.,', 'parser.y', 9)
116
118
  def _reduce_2(val, _values, result)
117
- result = NMEAPlus::AISMessageFactory.create(val[0], val[1], val[2])
119
+ result = NMEAPlus::AISMessageFactory.create(val[0], val[1], val[2])
118
120
  result
119
121
  end
120
122
  .,.,
@@ -124,4 +126,4 @@ def _reduce_none(val, _values, result)
124
126
  end
125
127
 
126
128
  end # class Parser
127
- end # module NMEAPlus
129
+ end # module NMEAPlus
@@ -1,85 +1,86 @@
1
1
  #--
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by rex 1.0.5
4
- # from lexical definition file "/Users/ikatz/Development/Public Github/nmea_plus/parser/tokenizer.rex".
3
+ # This file is automatically generated by rex 1.0.8
4
+ # from lexical definition file "/Users/ian/Development/nmea_plus/parser/tokenizer.rex".
5
5
  #++
6
6
 
7
7
 
8
8
  module NMEAPlus
9
9
  class Decoder < Parser # The source file is in .rex format -- indentation and most yard documentation is impossible. This class does a very basic parse of an input line, calling {NMEAPlus::MessageFactory.create} on the result. In parser.y, this is currently defined to be a {NMEAPlus::NMEAMessageFactory} if the line begins with `$` and {NMEAPlus::AISMessageFactory} if the line begins with `!`. In pratice, you should be using {NMEAPlus::SourceDecoder} (which wraps this class) to parse messages from an IO object; this class can only parse individual strings.
10
- require 'strscan'
11
-
12
- class ScanError < StandardError ; end
13
-
14
- attr_reader :lineno
15
- attr_reader :filename
16
- attr_accessor :state
17
-
18
- def scan_setup(str)
19
- @ss = StringScanner.new(str)
20
- @lineno = 1
21
- @state = nil
22
- end
23
-
24
- def action
25
- yield
26
- end
27
-
28
- def scan_str(str)
29
- scan_setup(str)
30
- do_parse
31
- end
32
- alias :scan :scan_str
33
-
34
- def load_file( filename )
35
- @filename = filename
36
- open(filename, "r") do |f|
37
- scan_setup(f.read)
38
- end
39
- end
40
-
41
- def scan_file( filename )
42
- load_file(filename)
43
- do_parse
44
- end
45
-
46
-
47
- def next_token
48
- return if @ss.eos?
49
-
50
- # skips empty actions
51
- until token = _next_token or @ss.eos?; end
52
- token
53
- end
54
-
55
- def _next_token
56
- text = @ss.peek(1)
57
- @lineno += 1 if text == "\n"
58
- token = case @state
59
- when nil
60
- case
61
- when (text = @ss.scan(/\*[0-9A-F]{2}[\w\n\r]*/i))
62
- action { [:CSUM, text[1..2]] }
63
-
64
- when (text = @ss.scan(/\$/i))
65
- action { [:CASH, text] }
66
-
67
- when (text = @ss.scan(/!/i))
68
- action { [:BANG, text] }
69
-
70
- when (text = @ss.scan(/[^\*]+/i))
71
- action { [:DATA, text] }
72
-
73
- else
74
- text = @ss.string[@ss.pos .. -1]
75
- raise ScanError, "can not match: '" + text + "'"
76
- end # if
77
-
78
- else
79
- raise ScanError, "undefined state: '" + state.to_s + "'"
80
- end # case state
81
- token
82
- end # def _next_token
10
+ require 'strscan'
11
+
12
+ class ScanError < StandardError ; end
13
+
14
+ attr_reader :lineno
15
+ attr_reader :filename
16
+ attr_accessor :state
17
+
18
+ def scan_setup(str)
19
+ @ss = StringScanner.new(str)
20
+ @lineno = 1
21
+ @state = nil
22
+ end
23
+
24
+ def action
25
+ yield
26
+ end
27
+
28
+ def scan_str(str)
29
+ scan_setup(str)
30
+ do_parse
31
+ end
32
+ alias :scan :scan_str
33
+
34
+ def load_file( filename )
35
+ @filename = filename
36
+ File.open(filename, "r") do |f|
37
+ scan_setup(f.read)
38
+ end
39
+ end
40
+
41
+ def scan_file( filename )
42
+ load_file(filename)
43
+ do_parse
44
+ end
45
+
46
+
47
+ def next_token
48
+ return if @ss.eos?
49
+
50
+ # skips empty actions
51
+ until token = _next_token or @ss.eos?; end
52
+ token
53
+ end
54
+
55
+ def _next_token
56
+ text = @ss.peek(1)
57
+ @lineno += 1 if text == "\n"
58
+ token = case @state
59
+ when nil
60
+ case
61
+ when (text = @ss.scan(/\*[0-9A-F]{2}[\w\n\r]*/i))
62
+ action { [:CSUM, text[1..2]] }
63
+
64
+ when (text = @ss.scan(/\$/i))
65
+ action { [:CASH, text] }
66
+
67
+ when (text = @ss.scan(/!/i))
68
+ action { [:BANG, text] }
69
+
70
+ when (text = @ss.scan(/[^\*]+/i))
71
+ action { [:DATA, text] }
72
+
73
+
74
+ else
75
+ text = @ss.string[@ss.pos .. -1]
76
+ raise ScanError, "can not match: '" + text + "'"
77
+ end # if
78
+
79
+ else
80
+ raise ScanError, "undefined state: '" + state.to_s + "'"
81
+ end # case state
82
+ token
83
+ end # def _next_token
83
84
 
84
85
  def parse(input)
85
86
  @yydebug = true if ENV['DEBUG_RACC']
@@ -1,5 +1,4 @@
1
-
2
- require 'nmea_plus/message/base'
1
+ require "nmea_plus/message/base"
3
2
 
4
3
  module NMEAPlus
5
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/base_ais'
1
+ require "nmea_plus/message/ais/base_ais"
2
2
 
3
3
  =begin boilerplate for vdm payload objects
4
4
  require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
@@ -17,29 +17,29 @@ end
17
17
 
18
18
  =end
19
19
 
20
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg1'
21
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg2'
22
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg3'
23
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg4'
24
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg5'
25
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg6'
26
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg7'
27
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg8'
28
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg9'
29
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg10'
30
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg11'
31
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg12'
32
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg13'
33
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg14'
34
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg15'
35
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg16'
36
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg17'
37
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg18'
38
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg19'
39
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg20'
40
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg21'
41
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg24'
42
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg27'
20
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg1"
21
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg2"
22
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg3"
23
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg4"
24
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg5"
25
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg6"
26
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg7"
27
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg8"
28
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg9"
29
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg10"
30
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg11"
31
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg12"
32
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg13"
33
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg14"
34
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg15"
35
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg16"
36
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg17"
37
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg18"
38
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg19"
39
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg20"
40
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg21"
41
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg24"
42
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg27"
43
43
 
44
44
  module NMEAPlus
45
45
  module Message
@@ -76,8 +76,10 @@ module NMEAPlus
76
76
  ret = ""
77
77
  loop do
78
78
  break if ptr.raw_ais_payload.nil? # guard against rare instances of message corruption
79
+
79
80
  ret << ptr.raw_ais_payload
80
81
  break if ptr.next_part.nil? # stop when we run out of messages in the chain
82
+
81
83
  ptr = ptr.next_part
82
84
  end
83
85
  ret
@@ -104,17 +106,18 @@ module NMEAPlus
104
106
  loop do
105
107
  fill_bits = ptr.ais_payload_fill_bits
106
108
  break if ptr.next_part.nil?
109
+
107
110
  ptr = ptr.next_part
108
111
  end
109
112
  fill_bits.to_i
110
113
  end
111
114
 
112
115
  # perform the 6-bit to 8-bit conversion defined in the spec
113
- # @param c [String] a character
116
+ # @param char [String] a character
114
117
  # @param len [Integer] The number of bits to consider
115
118
  # @return [String] a binary encoded string
116
- def _dearmor6b(c, len = 6)
117
- val = c.ord
119
+ def _dearmor6b(char, len = 6)
120
+ val = char.ord
118
121
  ret = val - (val >= 96 ? 56 : 48) # Mapped to 2 separate contiguous blocks of ascii, so choose which
119
122
  ret.to_s(2).rjust(6, "0")[0..(len - 1)]
120
123
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module NMEAPlus
3
2
  module Message
4
3
  module AIS
@@ -22,7 +21,8 @@ module NMEAPlus
22
21
  # @!parse attr_reader :category
23
22
  # @return [Symbol] The symbol for the MMSI category
24
23
  def category
25
- case id.to_s.rjust(9, '0') # formatted as 9 digit string with leading 0s
24
+ # rubocop:disable Lint/DuplicateBranch
25
+ case id.to_s.rjust(9, "0") # formatted as 9 digit string with leading 0s
26
26
  when /[2-7]......../ then :individual_ship
27
27
  when /00...1.../ then :coast_station
28
28
  when /00...2.../ then :harbor_station
@@ -43,6 +43,7 @@ module NMEAPlus
43
43
  else
44
44
  :unknown_mmsi_category
45
45
  end
46
+ # rubocop:enable Lint/DuplicateBranch
46
47
  end
47
48
 
48
49
  # The MMSI category as defined by ITU-R M.585-7
@@ -76,6 +77,7 @@ module NMEAPlus
76
77
  # @!parse attr_reader :mid
77
78
  # @return [Integer] the MID
78
79
  def mid
80
+ # rubocop:disable Lint/DuplicateBranch
79
81
  range = case category
80
82
  when :individual_ship then 0..2
81
83
  when :coast_station, :harbor_station, :pilot_station, :ais_repeater_station then 2..4
@@ -85,8 +87,10 @@ module NMEAPlus
85
87
  when :handheld then 1..3
86
88
  when :sar_transmitter, :man_overboard, :epirb then 3..5
87
89
  end
90
+ # rubocop:enable Lint/DuplicateBranch
88
91
  return nil if range.nil?
89
- id.to_s.rjust(9, '0')[range].to_i
92
+
93
+ id.to_s.rjust(9, "0")[range].to_i
90
94
  end
91
95
 
92
96
  # The ISO 3166-1 country ID indicated by the MMSI Maritime Identification Digits (MID)
@@ -96,6 +100,7 @@ module NMEAPlus
96
100
  # https://github.com/S73417H/MIDs
97
101
  # https://github.com/alexrabarts/iso_country_codes
98
102
  # JSON.parse(IO.read("mids.json")).each {|k, v| puts "when #{k} then #{IsoCountryCodes.find(v[1]).numeric.to_i}" }
103
+ # rubocop:disable Lint/DuplicateBranch
99
104
  case mid
100
105
  when 201 then 8
101
106
  when 202 then 20
@@ -384,6 +389,7 @@ module NMEAPlus
384
389
  when 770 then 858
385
390
  when 775 then 862
386
391
  end
392
+ # rubocop:enable Lint/DuplicateBranch
387
393
  end
388
394
 
389
395
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module NMEAPlus
3
2
  module Message
4
3
  module AIS
@@ -67,6 +66,7 @@ module NMEAPlus
67
66
  def _access(start, length)
68
67
  part = @payload_bitstring[start, length]
69
68
  return nil if part.nil? || part.empty?
69
+
70
70
  block_given? ? (yield part) : part
71
71
  end
72
72
 
@@ -115,6 +115,7 @@ module NMEAPlus
115
115
  def _6b_unsigned_integer(start, length, equiv_nil = nil)
116
116
  ret = _access(start, length) { |bits| bits.to_i(2) }
117
117
  return nil if ret == equiv_nil
118
+
118
119
  ret
119
120
  end
120
121
 
@@ -133,6 +134,7 @@ module NMEAPlus
133
134
  # two's complement: flip bits, then add 1
134
135
  ret = _access(start, length) { |bits| (bits.tr("01", "10").to_i(2) + 1) * -1 }
135
136
  return nil if ret == equiv_nil
137
+
136
138
  ret
137
139
  end
138
140
  end
@@ -147,6 +149,7 @@ module NMEAPlus
147
149
  def _6b_integer_scaled(start, length, denominator, equiv_nil = nil)
148
150
  ret = _6b_integer(start, length, equiv_nil)
149
151
  return nil if ret.nil?
152
+
150
153
  ret.to_f / denominator
151
154
  end
152
155
 
@@ -160,6 +163,7 @@ module NMEAPlus
160
163
  def _6b_unsigned_integer_scaled(start, length, denominator, equiv_nil = nil)
161
164
  ret = _6b_unsigned_integer(start, length, equiv_nil)
162
165
  return nil if ret.nil?
166
+
163
167
  ret.to_f / denominator
164
168
  end
165
169
 
@@ -174,6 +178,7 @@ module NMEAPlus
174
178
  def _6b_integer_scaled_shifted(start, length, denominator, shift, equiv_nil = nil)
175
179
  ret = _6b_integer_scaled(start, length, denominator, equiv_nil)
176
180
  return nil if ret.nil?
181
+
177
182
  ret + shift
178
183
  end
179
184
 
@@ -188,6 +193,7 @@ module NMEAPlus
188
193
  def _6b_unsigned_integer_scaled_shifted(start, length, denominator, shift, equiv_nil = nil)
189
194
  ret = _6b_unsigned_integer_scaled(start, length, denominator, equiv_nil)
190
195
  return nil if ret.nil?
196
+
191
197
  ret + shift
192
198
  end
193
199
 
@@ -253,7 +259,7 @@ module NMEAPlus
253
259
  rollover = 0
254
260
  rollover = 1 if now.month > month
255
261
  rollover = -1 if now.month == 1 && month == 12
256
- Time.new(now.year + rollover, month, day, hour, minute, 0, '+00:00')
262
+ Time.new(now.year + rollover, month, day, hour, minute, 0, "+00:00")
257
263
  end
258
264
 
259
265
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module NMEAPlus
3
2
  module Message
4
3
  module AIS
@@ -40,8 +39,8 @@ module NMEAPlus
40
39
 
41
40
  # SubArea structure base type for a region anchored to a point
42
41
  class SubAreaAnchored < SubAreaScaled
43
- payload_reader :longitude, 5, 25, :_I, 60 * 10**3, 181
44
- payload_reader :latitude, 30, 24, :_I, 60 * 10**3, 91
42
+ payload_reader :longitude, 5, 25, :_I, 60 * (10**3), 181
43
+ payload_reader :latitude, 30, 24, :_I, 60 * (10**3), 91
45
44
  payload_reader :precision, 54, 3, :_u
46
45
  end
47
46
 
@@ -1,5 +1,5 @@
1
- require 'nmea_plus/message/ais/vdm_payload/payload'
2
- require 'nmea_plus/message/ais/vdm_payload/mmsi_info'
1
+ require "nmea_plus/message/ais/vdm_payload/payload"
2
+ require "nmea_plus/message/ais/vdm_payload/mmsi_info"
3
3
 
4
4
  module NMEAPlus
5
5
  module Message
@@ -98,6 +98,7 @@ module NMEAPlus
98
98
  # @return [String] Navigational status description
99
99
  def get_navigational_status_description(code)
100
100
  return nil if code.nil?
101
+
101
102
  case code
102
103
  when 0 then "Under way using engine"
103
104
  when 1 then "At anchor"
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_cnb'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_cnb"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_station_report'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_station_report"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_binary_acknowledgement'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_binary_acknowledgement"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_class_b_cs_position'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_class_b_cs_position"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_class_b_cs_position'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_class_b_cs_position"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_cnb'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_cnb"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -13,8 +13,8 @@ module NMEAPlus
13
13
  payload_reader :name, 43, 120, :_t
14
14
 
15
15
  payload_reader :position_10m_accuracy?, 163, 1, :_b
16
- payload_reader :longitude, 164, 28, :_I, 60 * 10**4, 181
17
- payload_reader :latitude, 192, 27, :_I, 60 * 10**4, 91
16
+ payload_reader :longitude, 164, 28, :_I, 60 * (10**4), 181
17
+ payload_reader :latitude, 192, 27, :_I, 60 * (10**4), 91
18
18
 
19
19
  payload_reader :ship_dimension_to_bow, 219, 9, :_u
20
20
  payload_reader :ship_dimension_to_stern, 228, 9, :_u
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_cnb'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_cnb"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message
@@ -1,4 +1,4 @@
1
- require 'nmea_plus/message/ais/vdm_payload/vdm_msg_station_report'
1
+ require "nmea_plus/message/ais/vdm_payload/vdm_msg_station_report"
2
2
 
3
3
  module NMEAPlus
4
4
  module Message