mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
The grand language renaming bonanza (#3278)
* Removing FORTRAN samples because OS X case-insensitive filesystems :-\ * Adding Fotran samples back * FORTRAN -> Fortran * Groff -> Roff * GAS -> Unix Assembly * Cucumber -> Gherkin * Nimrod -> Nim * Ragel in Ruby Host -> Ragel * Jade -> Pug * VimL -> Vim script
This commit is contained in:
committed by
Brandon Black
parent
9b941a34f0
commit
d8b91bd5c4
96
samples/Ragel/ephemeris_parser.rl
Normal file
96
samples/Ragel/ephemeris_parser.rl
Normal file
@@ -0,0 +1,96 @@
|
||||
=begin
|
||||
%%{
|
||||
|
||||
machine ephemeris_parser;
|
||||
|
||||
action mark { mark = p }
|
||||
|
||||
action parse_start_time {
|
||||
parser.start_time = data[mark..p].pack('c*')
|
||||
}
|
||||
|
||||
action parse_stop_time {
|
||||
parser.stop_time = data[mark..p].pack('c*')
|
||||
}
|
||||
|
||||
action parse_step_size {
|
||||
parser.step_size = data[mark..p].pack('c*')
|
||||
}
|
||||
|
||||
action parse_ephemeris_table {
|
||||
fhold;
|
||||
parser.ephemeris_table = data[mark..p].pack('c*')
|
||||
}
|
||||
|
||||
ws = [ \t\r\n];
|
||||
|
||||
adbc = ('A.D.'|'B.C.');
|
||||
year = digit{4};
|
||||
month = upper lower{2};
|
||||
date = digit{2};
|
||||
hours = digit{2};
|
||||
minutes = digit{2};
|
||||
seconds = digit{2} '.' digit{4};
|
||||
tz = 'UT';
|
||||
datetime = adbc ' ' year '-' month '-' date ' ' hours ':' minutes ':' seconds ' ' tz;
|
||||
|
||||
time_unit = ('minute' [s]? | 'calendar year' [s]?);
|
||||
|
||||
soe = '$$SOE' '\n';
|
||||
eoe = '$$EOE' '\n';
|
||||
ephemeris_table = (alnum | ws | [*-./:])*;
|
||||
|
||||
start_time = 'Start time' ' '* ':' ' ' datetime >mark %parse_start_time space* '\n';
|
||||
stop_time = 'Stop time' ' '* ':' ' ' datetime >mark %parse_stop_time space* '\n';
|
||||
step_size = 'Step-size' ' '* ':' ' ' (digit+ ' '* time_unit) >mark $parse_step_size '\n';
|
||||
|
||||
ephemeris = soe ephemeris_table >mark %parse_ephemeris_table eoe;
|
||||
|
||||
main := (
|
||||
any*
|
||||
start_time
|
||||
stop_time
|
||||
step_size
|
||||
any*
|
||||
ephemeris
|
||||
any*
|
||||
);
|
||||
|
||||
}%%
|
||||
=end
|
||||
|
||||
require 'date'
|
||||
|
||||
module Tengai
|
||||
EPHEMERIS_DATA = Struct.new(:start_time, :stop_time, :step_size, :ephemeris_table).freeze
|
||||
|
||||
class EphemerisParser < EPHEMERIS_DATA
|
||||
def self.parse(data)
|
||||
parser = new
|
||||
data = data.unpack('c*') if data.is_a? String
|
||||
eof = data.length
|
||||
|
||||
%% write init;
|
||||
%% write exec;
|
||||
|
||||
parser
|
||||
end
|
||||
|
||||
def start_time=(time)
|
||||
super parse_time(time)
|
||||
end
|
||||
|
||||
def stop_time=(time)
|
||||
super parse_time(time)
|
||||
end
|
||||
|
||||
%% write data;
|
||||
|
||||
# % fix syntax highlighting
|
||||
|
||||
private
|
||||
def parse_time(time)
|
||||
DateTime.parse(time)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user