hexo/node_modules/highlight.js/es/languages/fortran.js

574 lines
9.6 KiB
JavaScript
Raw Normal View History

2023-10-03 11:14:36 +08:00
/*
Language: Fortran
Author: Anthony Scemama <scemama@irsamc.ups-tlse.fr>
Website: https://en.wikipedia.org/wiki/Fortran
Category: scientific
*/
/** @type LanguageFn */
function fortran(hljs) {
const regex = hljs.regex;
const PARAMS = {
className: 'params',
begin: '\\(',
end: '\\)'
};
const COMMENT = { variants: [
hljs.COMMENT('!', '$', { relevance: 0 }),
// allow FORTRAN 77 style comments
hljs.COMMENT('^C[ ]', '$', { relevance: 0 }),
hljs.COMMENT('^C$', '$', { relevance: 0 })
] };
// regex in both fortran and irpf90 should match
const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\d]+)?/;
const OPTIONAL_NUMBER_EXP = /([de][+-]?\d+)?/;
const NUMBER = {
className: 'number',
variants: [
{ begin: regex.concat(/\b\d+/, /\.(\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },
{ begin: regex.concat(/\b\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },
{ begin: regex.concat(/\.\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }
],
relevance: 0
};
const FUNCTION_DEF = {
className: 'function',
beginKeywords: 'subroutine function program',
illegal: '[${=\\n]',
contains: [
hljs.UNDERSCORE_TITLE_MODE,
PARAMS
]
};
const STRING = {
className: 'string',
relevance: 0,
variants: [
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE
]
};
const KEYWORDS = [
"kind",
"do",
"concurrent",
"local",
"shared",
"while",
"private",
"call",
"intrinsic",
"where",
"elsewhere",
"type",
"endtype",
"endmodule",
"endselect",
"endinterface",
"end",
"enddo",
"endif",
"if",
"forall",
"endforall",
"only",
"contains",
"default",
"return",
"stop",
"then",
"block",
"endblock",
"endassociate",
"public",
"subroutine|10",
"function",
"program",
".and.",
".or.",
".not.",
".le.",
".eq.",
".ge.",
".gt.",
".lt.",
"goto",
"save",
"else",
"use",
"module",
"select",
"case",
"access",
"blank",
"direct",
"exist",
"file",
"fmt",
"form",
"formatted",
"iostat",
"name",
"named",
"nextrec",
"number",
"opened",
"rec",
"recl",
"sequential",
"status",
"unformatted",
"unit",
"continue",
"format",
"pause",
"cycle",
"exit",
"c_null_char",
"c_alert",
"c_backspace",
"c_form_feed",
"flush",
"wait",
"decimal",
"round",
"iomsg",
"synchronous",
"nopass",
"non_overridable",
"pass",
"protected",
"volatile",
"abstract",
"extends",
"import",
"non_intrinsic",
"value",
"deferred",
"generic",
"final",
"enumerator",
"class",
"associate",
"bind",
"enum",
"c_int",
"c_short",
"c_long",
"c_long_long",
"c_signed_char",
"c_size_t",
"c_int8_t",
"c_int16_t",
"c_int32_t",
"c_int64_t",
"c_int_least8_t",
"c_int_least16_t",
"c_int_least32_t",
"c_int_least64_t",
"c_int_fast8_t",
"c_int_fast16_t",
"c_int_fast32_t",
"c_int_fast64_t",
"c_intmax_t",
"C_intptr_t",
"c_float",
"c_double",
"c_long_double",
"c_float_complex",
"c_double_complex",
"c_long_double_complex",
"c_bool",
"c_char",
"c_null_ptr",
"c_null_funptr",
"c_new_line",
"c_carriage_return",
"c_horizontal_tab",
"c_vertical_tab",
"iso_c_binding",
"c_loc",
"c_funloc",
"c_associated",
"c_f_pointer",
"c_ptr",
"c_funptr",
"iso_fortran_env",
"character_storage_size",
"error_unit",
"file_storage_size",
"input_unit",
"iostat_end",
"iostat_eor",
"numeric_storage_size",
"output_unit",
"c_f_procpointer",
"ieee_arithmetic",
"ieee_support_underflow_control",
"ieee_get_underflow_mode",
"ieee_set_underflow_mode",
"newunit",
"contiguous",
"recursive",
"pad",
"position",
"action",
"delim",
"readwrite",
"eor",
"advance",
"nml",
"interface",
"procedure",
"namelist",
"include",
"sequence",
"elemental",
"pure",
"impure",
"integer",
"real",
"character",
"complex",
"logical",
"codimension",
"dimension",
"allocatable|10",
"parameter",
"external",
"implicit|10",
"none",
"double",
"precision",
"assign",
"intent",
"optional",
"pointer",
"target",
"in",
"out",
"common",
"equivalence",
"data"
];
const LITERALS = [
".False.",
".True."
];
const BUILT_INS = [
"alog",
"alog10",
"amax0",
"amax1",
"amin0",
"amin1",
"amod",
"cabs",
"ccos",
"cexp",
"clog",
"csin",
"csqrt",
"dabs",
"dacos",
"dasin",
"datan",
"datan2",
"dcos",
"dcosh",
"ddim",
"dexp",
"dint",
"dlog",
"dlog10",
"dmax1",
"dmin1",
"dmod",
"dnint",
"dsign",
"dsin",
"dsinh",
"dsqrt",
"dtan",
"dtanh",
"float",
"iabs",
"idim",
"idint",
"idnint",
"ifix",
"isign",
"max0",
"max1",
"min0",
"min1",
"sngl",
"algama",
"cdabs",
"cdcos",
"cdexp",
"cdlog",
"cdsin",
"cdsqrt",
"cqabs",
"cqcos",
"cqexp",
"cqlog",
"cqsin",
"cqsqrt",
"dcmplx",
"dconjg",
"derf",
"derfc",
"dfloat",
"dgamma",
"dimag",
"dlgama",
"iqint",
"qabs",
"qacos",
"qasin",
"qatan",
"qatan2",
"qcmplx",
"qconjg",
"qcos",
"qcosh",
"qdim",
"qerf",
"qerfc",
"qexp",
"qgamma",
"qimag",
"qlgama",
"qlog",
"qlog10",
"qmax1",
"qmin1",
"qmod",
"qnint",
"qsign",
"qsin",
"qsinh",
"qsqrt",
"qtan",
"qtanh",
"abs",
"acos",
"aimag",
"aint",
"anint",
"asin",
"atan",
"atan2",
"char",
"cmplx",
"conjg",
"cos",
"cosh",
"exp",
"ichar",
"index",
"int",
"log",
"log10",
"max",
"min",
"nint",
"sign",
"sin",
"sinh",
"sqrt",
"tan",
"tanh",
"print",
"write",
"dim",
"lge",
"lgt",
"lle",
"llt",
"mod",
"nullify",
"allocate",
"deallocate",
"adjustl",
"adjustr",
"all",
"allocated",
"any",
"associated",
"bit_size",
"btest",
"ceiling",
"count",
"cshift",
"date_and_time",
"digits",
"dot_product",
"eoshift",
"epsilon",
"exponent",
"floor",
"fraction",
"huge",
"iand",
"ibclr",
"ibits",
"ibset",
"ieor",
"ior",
"ishft",
"ishftc",
"lbound",
"len_trim",
"matmul",
"maxexponent",
"maxloc",
"maxval",
"merge",
"minexponent",
"minloc",
"minval",
"modulo",
"mvbits",
"nearest",
"pack",
"present",
"product",
"radix",
"random_number",
"random_seed",
"range",
"repeat",
"reshape",
"rrspacing",
"scale",
"scan",
"selected_int_kind",
"selected_real_kind",
"set_exponent",
"shape",
"size",
"spacing",
"spread",
"sum",
"system_clock",
"tiny",
"transpose",
"trim",
"ubound",
"unpack",
"verify",
"achar",
"iachar",
"transfer",
"dble",
"entry",
"dprod",
"cpu_time",
"command_argument_count",
"get_command",
"get_command_argument",
"get_environment_variable",
"is_iostat_end",
"ieee_arithmetic",
"ieee_support_underflow_control",
"ieee_get_underflow_mode",
"ieee_set_underflow_mode",
"is_iostat_eor",
"move_alloc",
"new_line",
"selected_char_kind",
"same_type_as",
"extends_type_of",
"acosh",
"asinh",
"atanh",
"bessel_j0",
"bessel_j1",
"bessel_jn",
"bessel_y0",
"bessel_y1",
"bessel_yn",
"erf",
"erfc",
"erfc_scaled",
"gamma",
"log_gamma",
"hypot",
"norm2",
"atomic_define",
"atomic_ref",
"execute_command_line",
"leadz",
"trailz",
"storage_size",
"merge_bits",
"bge",
"bgt",
"ble",
"blt",
"dshiftl",
"dshiftr",
"findloc",
"iall",
"iany",
"iparity",
"image_index",
"lcobound",
"ucobound",
"maskl",
"maskr",
"num_images",
"parity",
"popcnt",
"poppar",
"shifta",
"shiftl",
"shiftr",
"this_image",
"sync",
"change",
"team",
"co_broadcast",
"co_max",
"co_min",
"co_sum",
"co_reduce"
];
return {
name: 'Fortran',
case_insensitive: true,
aliases: [
'f90',
'f95'
],
keywords: {
keyword: KEYWORDS,
literal: LITERALS,
built_in: BUILT_INS
},
illegal: /\/\*/,
contains: [
STRING,
FUNCTION_DEF,
// allow `C = value` for assignments so they aren't misdetected
// as Fortran 77 style comments
{
begin: /^C\s*=(?!=)/,
relevance: 0
},
COMMENT,
NUMBER
]
};
}
export { fortran as default };