use std::cmp::max; use lazy_static::lazy_static; use regex::Regex; use crate::config; use crate::delta::State; use crate::features::hyperlinks; use crate::features::side_by_side::ansifill::{self, ODD_PAD_CHAR}; use crate::features::side_by_side::{Left, PanelSide, Right}; use crate::features::OptionValueFunction; use crate::format::{self, Align, Placeholder}; use crate::minusplus::*; use crate::style::Style; pub fn make_feature() -> Vec<(String, OptionValueFunction)> { builtin_feature!([ ( "line-numbers", bool, None, _opt => true ), ( "line-numbers-left-style", String, None, _opt => "blue" ), ( "line-numbers-right-style", String, None, _opt => "blue" ), ( "line-numbers-minus-style", String, None, opt => if opt.computed.is_light_mode { "red".to_string() } else { "88".to_string() } ), ( "line-numbers-zero-style", String, None, opt => if opt.computed.is_light_mode {"#dddddd"} else {"#444444"} ), ( "line-numbers-plus-style", String, None, opt => if opt.computed.is_light_mode { "green".to_string() } else { "28".to_string() } ) ]) } pub fn linenumbers_and_styles<'a>( line_numbers_data: &'a mut LineNumbersData, state: &State, config: &'a config::Config, increment: bool, ) -> Option<(MinusPlus>, MinusPlus