(command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<gawk>} {<--version>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <--version>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<printf>} {(SQ <'0.23\\n'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) ] spids: [119 136] ) ] ) (command.ShFunction name: usage body: (BraceGroup children: [ (command.Simple words: [ {<printf>} {(SQ <'%s\\n'>)} { (SQ <'This utility converts ANSI codes in data passed to stdin\n'> <'It has 4 optional parameters:\n'> <'--bg=dark --palette=linux|solarized|tango|xterm --css-only|--body-only\n'> <'E.g.: ls -l --color=always | ansi2html.sh --bg=dark > ls.html'> ) } ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <--help>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<usage>})] spids: [181 198] ) ] ) (command.ShFunction name: processArg body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <'--bg=dark'>)} {<Id.Lit_RBracket ']'>} ) (BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dark_bg) op: assign_op.Equal rhs: {<yes>} spids: [231] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <--css-only>)} {<Id.Lit_RBracket ']'>} ) (BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:css_only) op: assign_op.Equal rhs: {<yes>} spids: [259] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <--body-only>)} {<Id.Lit_RBracket ']'>} ) (BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:body_only) op: assign_op.Equal rhs: {<yes>} spids: [287] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <'--palette=solarized'>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P0) op: assign_op.Equal rhs: {<073642>} spids: [321] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P1) op: assign_op.Equal rhs: {<D30102>} spids: [325] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P2) op: assign_op.Equal rhs: {<859900>} spids: [329] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P3) op: assign_op.Equal rhs: {<B58900>} spids: [333] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P4) op: assign_op.Equal rhs: {<268BD2>} spids: [338] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P5) op: assign_op.Equal rhs: {<D33682>} spids: [342] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P6) op: assign_op.Equal rhs: {<2AA198>} spids: [346] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P7) op: assign_op.Equal rhs: {<EEE8D5>} spids: [350] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P8) op: assign_op.Equal rhs: {<002B36>} spids: [355] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P9) op: assign_op.Equal rhs: {<CB4B16>} spids: [359] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P10) op: assign_op.Equal rhs: {<586E75>} spids: [363] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P11) op: assign_op.Equal rhs: {<657B83>} spids: [367] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P12) op: assign_op.Equal rhs: {<839496>} spids: [372] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P13) op: assign_op.Equal rhs: {<6C71C4>} spids: [376] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P14) op: assign_op.Equal rhs: {<93A1A1>} spids: [380] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P15) op: assign_op.Equal rhs: {<FDF6E3>} spids: [384] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] spids: [297 314] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <'--palette=solarized-xterm'>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P0) op: assign_op.Equal rhs: {<262626>} spids: [417] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P1) op: assign_op.Equal rhs: {<AF0000>} spids: [421] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P2) op: assign_op.Equal rhs: {<5F8700>} spids: [425] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P3) op: assign_op.Equal rhs: {<AF8700>} spids: [429] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P4) op: assign_op.Equal rhs: {<0087FF>} spids: [434] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P5) op: assign_op.Equal rhs: {<AF005F>} spids: [438] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P6) op: assign_op.Equal rhs: {<00AFAF>} spids: [442] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P7) op: assign_op.Equal rhs: {<E4E4E4>} spids: [446] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P8) op: assign_op.Equal rhs: {<1C1C1C>} spids: [451] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P9) op: assign_op.Equal rhs: {<D75F00>} spids: [455] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P10) op: assign_op.Equal rhs: {<585858>} spids: [459] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P11) op: assign_op.Equal rhs: {<626262>} spids: [463] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P12) op: assign_op.Equal rhs: {<808080>} spids: [468] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P13) op: assign_op.Equal rhs: {<5F5FAF>} spids: [472] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P14) op: assign_op.Equal rhs: {<8A8A8A>} spids: [476] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P15) op: assign_op.Equal rhs: {<FFFFD7>} spids: [480] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] spids: [393 410] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <'--palette=tango'>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P0) op: assign_op.Equal rhs: {<000000>} spids: [513] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P1) op: assign_op.Equal rhs: {<CC0000>} spids: [517] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P2) op: assign_op.Equal rhs: {<4E9A06>} spids: [521] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P3) op: assign_op.Equal rhs: {<C4A000>} spids: [525] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P4) op: assign_op.Equal rhs: {<3465A4>} spids: [530] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P5) op: assign_op.Equal rhs: {<75507B>} spids: [534] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P6) op: assign_op.Equal rhs: {<06989A>} spids: [538] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P7) op: assign_op.Equal rhs: {<D3D7CF>} spids: [542] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P8) op: assign_op.Equal rhs: {<555753>} spids: [547] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P9) op: assign_op.Equal rhs: {<EF2929>} spids: [551] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P10) op: assign_op.Equal rhs: {<8AE234>} spids: [555] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P11) op: assign_op.Equal rhs: {<FCE94F>} spids: [559] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P12) op: assign_op.Equal rhs: {<729FCF>} spids: [564] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P13) op: assign_op.Equal rhs: {<AD7FA8>} spids: [568] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P14) op: assign_op.Equal rhs: {<34E2E2>} spids: [572] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P15) op: assign_op.Equal rhs: {<EEEEEC>} spids: [576] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] spids: [489 506] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <'--palette=xterm'>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P0) op: assign_op.Equal rhs: {<000000>} spids: [605] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P1) op: assign_op.Equal rhs: {<CD0000>} spids: [609] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P2) op: assign_op.Equal rhs: {<00CD00>} spids: [613] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P3) op: assign_op.Equal rhs: {<CDCD00>} spids: [617] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P4) op: assign_op.Equal rhs: {<0000EE>} spids: [622] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P5) op: assign_op.Equal rhs: {<CD00CD>} spids: [626] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P6) op: assign_op.Equal rhs: {<00CDCD>} spids: [630] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P7) op: assign_op.Equal rhs: {<E5E5E5>} spids: [634] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P8) op: assign_op.Equal rhs: {<7F7F7F>} spids: [639] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P9) op: assign_op.Equal rhs: {<FF0000>} spids: [643] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P10) op: assign_op.Equal rhs: {<00FF00>} spids: [647] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P11) op: assign_op.Equal rhs: {<FFFF00>} spids: [651] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P12) op: assign_op.Equal rhs: {<5C5CFF>} spids: [656] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P13) op: assign_op.Equal rhs: {<FF00FF>} spids: [660] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P14) op: assign_op.Equal rhs: {<00FFFF>} spids: [664] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P15) op: assign_op.Equal rhs: {<FFFFFF>} spids: [668] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return>) terminator: <Id.Op_Semi _> ) ] spids: [585 602] ) ] else_action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P0) op: assign_op.Equal rhs: {<000000>} spids: [683] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P1) op: assign_op.Equal rhs: {<AA0000>} spids: [687] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P2) op: assign_op.Equal rhs: {<00AA00>} spids: [691] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P3) op: assign_op.Equal rhs: {<AA5500>} spids: [695] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P4) op: assign_op.Equal rhs: {<0000AA>} spids: [700] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P5) op: assign_op.Equal rhs: {<AA00AA>} spids: [704] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P6) op: assign_op.Equal rhs: {<00AAAA>} spids: [708] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P7) op: assign_op.Equal rhs: {<AAAAAA>} spids: [712] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P8) op: assign_op.Equal rhs: {<555555>} spids: [717] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P9) op: assign_op.Equal rhs: {<FF5555>} spids: [721] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P10) op: assign_op.Equal rhs: {<55FF55>} spids: [725] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P11) op: assign_op.Equal rhs: {<FFFF55>} spids: [729] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P12) op: assign_op.Equal rhs: {<5555FF>} spids: [734] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P13) op: assign_op.Equal rhs: {<FF55FF>} spids: [738] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P14) op: assign_op.Equal rhs: {<55FFFF>} spids: [742] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P15) op: assign_op.Equal rhs: {<FFFFFF>} spids: [746] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <'--palette=linux'>)} {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token: <Id.ControlFlow_Return return> ) ] ) terminator: <Id.Op_Semi _> ) ] ) ] ) ) (C {<processArg>}) (command.ForEach iter_name: var iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (C {<processArg>} {($ Id.VSub_DollarName '$var')}) terminator: <Id.Op_Semi _> ) ] ) ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$css_only'))} {<Id.Lit_RBracket ']'>}) (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<usage>}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<sed>} {<--version>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple words: [{<gsed>} {<--version>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<alias>} {<Id.Lit_VarLike 'sed='> <gsed>})] spids: [848 861] ) ] else_action: [ (command.Simple words: [{<echo>} {(DQ <'Error, can\'t find an acceptable GNU sed.'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ] spids: [830 845] ) ] ) (command.AndOr ops: [Id.Op_DPipe Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$css_only'))} {<Id.Lit_RBracket ']'>}) (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<printf>} {(SQ <'%s'>)} { (DQ <'<html>\n'> <'<head>\n'> <'<meta http-equiv='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <Content-Type> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' content='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'text/html; charset=utf-8'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'/>\n'> <'<style type='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'text/css'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>\n'> ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<printf>} { (DQ <'.ef0,.f0 { color: #'> ($ Id.VSub_DollarName '$P0') <'; } .eb0,.b0 { background-color: #'> ($ Id.VSub_DollarName '$P0') <'; }\n'> <'.ef1,.f1 { color: #'> ($ Id.VSub_DollarName '$P1') <'; } .eb1,.b1 { background-color: #'> ($ Id.VSub_DollarName '$P1') <'; }\n'> <'.ef2,.f2 { color: #'> ($ Id.VSub_DollarName '$P2') <'; } .eb2,.b2 { background-color: #'> ($ Id.VSub_DollarName '$P2') <'; }\n'> <'.ef3,.f3 { color: #'> ($ Id.VSub_DollarName '$P3') <'; } .eb3,.b3 { background-color: #'> ($ Id.VSub_DollarName '$P3') <'; }\n'> <'.ef4,.f4 { color: #'> ($ Id.VSub_DollarName '$P4') <'; } .eb4,.b4 { background-color: #'> ($ Id.VSub_DollarName '$P4') <'; }\n'> <'.ef5,.f5 { color: #'> ($ Id.VSub_DollarName '$P5') <'; } .eb5,.b5 { background-color: #'> ($ Id.VSub_DollarName '$P5') <'; }\n'> <'.ef6,.f6 { color: #'> ($ Id.VSub_DollarName '$P6') <'; } .eb6,.b6 { background-color: #'> ($ Id.VSub_DollarName '$P6') <'; }\n'> <'.ef7,.f7 { color: #'> ($ Id.VSub_DollarName '$P7') <'; } .eb7,.b7 { background-color: #'> ($ Id.VSub_DollarName '$P7') <'; }\n'> <'.ef8, .f0 > .bold,.bold > .f0 { color: #'> ($ Id.VSub_DollarName '$P8') <'; font-weight: normal; }\n'> <'.ef9, .f1 > .bold,.bold > .f1 { color: #'> ($ Id.VSub_DollarName '$P9') <'; font-weight: normal; }\n'> <'.ef10,.f2 > .bold,.bold > .f2 { color: #'> ($ Id.VSub_DollarName '$P10') <'; font-weight: normal; }\n'> <'.ef11,.f3 > .bold,.bold > .f3 { color: #'> ($ Id.VSub_DollarName '$P11') <'; font-weight: normal; }\n'> <'.ef12,.f4 > .bold,.bold > .f4 { color: #'> ($ Id.VSub_DollarName '$P12') <'; font-weight: normal; }\n'> <'.ef13,.f5 > .bold,.bold > .f5 { color: #'> ($ Id.VSub_DollarName '$P13') <'; font-weight: normal; }\n'> <'.ef14,.f6 > .bold,.bold > .f6 { color: #'> ($ Id.VSub_DollarName '$P14') <'; font-weight: normal; }\n'> <'.ef15,.f7 > .bold,.bold > .f7 { color: #'> ($ Id.VSub_DollarName '$P15') <'; font-weight: normal; }\n'> <'.eb8 { background-color: #'> ($ Id.VSub_DollarName '$P8') <'; }\n'> <'.eb9 { background-color: #'> ($ Id.VSub_DollarName '$P9') <'; }\n'> <'.eb10 { background-color: #'> ($ Id.VSub_DollarName '$P10') <'; }\n'> <'.eb11 { background-color: #'> ($ Id.VSub_DollarName '$P11') <'; }\n'> <'.eb12 { background-color: #'> ($ Id.VSub_DollarName '$P12') <'; }\n'> <'.eb13 { background-color: #'> ($ Id.VSub_DollarName '$P13') <'; }\n'> <'.eb14 { background-color: #'> ($ Id.VSub_DollarName '$P14') <'; }\n'> <'.eb15 { background-color: #'> ($ Id.VSub_DollarName '$P15') <'; }\n'> ) } ) ] ) (command.ForEach iter_name: red iter_words: [{<0>} {<1>} {<2>} {<3>} {<4>} {<5>}] do_arg_iter: F body: (command.DoGroup children: [ (command.ForEach iter_name: green iter_words: [{<0>} {<1>} {<2>} {<3>} {<4>} {<5>}] do_arg_iter: F body: (command.DoGroup children: [ (command.ForEach iter_name: blue iter_words: [{<0>} {<1>} {<2>} {<3>} {<4>} {<5>}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:c) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Plus left: {<Id.Lit_Digits 16>} right: (arith_expr.Binary op_id: Id.Arith_Star left: {($ Id.VSub_DollarName '$red')} right: {<Id.Lit_Digits 36>} ) ) right: (arith_expr.Binary op_id: Id.Arith_Star left: {($ Id.VSub_DollarName '$green')} right: {<Id.Lit_Digits 6>} ) ) right: {($ Id.VSub_DollarName '$blue')} ) ) } spids: [1113] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Star left: {($ Id.VSub_DollarName '$red')} right: {<Id.Lit_Digits 40>} ) right: {<Id.Lit_Digits 55>} ) right: (arith_expr.Binary op_id: Id.Arith_Great left: {($ Id.VSub_DollarName '$red')} right: {<Id.Lit_Digits 0>} ) ) ) } spids: [1144] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:g) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Star left: {($ Id.VSub_DollarName '$green')} right: {<Id.Lit_Digits 40>} ) right: {<Id.Lit_Digits 55>} ) right: (arith_expr.Binary op_id: Id.Arith_Great left: {($ Id.VSub_DollarName '$green')} right: {<Id.Lit_Digits 0>} ) ) ) } spids: [1171] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Star left: {($ Id.VSub_DollarName '$blue')} right: {<Id.Lit_Digits 40>} ) right: {<Id.Lit_Digits 55>} ) right: (arith_expr.Binary op_id: Id.Arith_Great left: {($ Id.VSub_DollarName '$blue')} right: {<Id.Lit_Digits 0>} ) ) ) } spids: [1198] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} {(DQ <'.ef%d { color: #%2.2x%2.2x%2.2x; } '>)} {($ Id.VSub_DollarName '$c')} {($ Id.VSub_DollarName '$r')} {($ Id.VSub_DollarName '$g')} {($ Id.VSub_DollarName '$b')} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} { (DQ <'.eb%d { background-color: #%2.2x%2.2x%2.2x; }'> <Id.Lit_BadBackslash '\\'> <n> ) } {($ Id.VSub_DollarName '$c')} {($ Id.VSub_DollarName '$r')} {($ Id.VSub_DollarName '$g')} {($ Id.VSub_DollarName '$b')} ) ] ) ] ) ) ] ) ) ] ) ) (command.ForEach iter_name: gray iter_words: [{(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<seq>} {<0>} {<23>}))}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:c) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName '$gray')} right: {<Id.Lit_Digits 232>} ) ) } spids: [1302] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:l) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Star left: {($ Id.VSub_DollarName '$gray')} right: {<Id.Lit_Digits 10>} ) right: {<Id.Lit_Digits 8>} ) ) } spids: [1311] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} {(DQ <'.ef%d { color: #%2.2x%2.2x%2.2x; } '>)} {($ Id.VSub_DollarName '$c')} {($ Id.VSub_DollarName '$l')} {($ Id.VSub_DollarName '$l')} {($ Id.VSub_DollarName '$l')} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} { (DQ <'.eb%d { background-color: #%2.2x%2.2x%2.2x; }'> <Id.Lit_BadBackslash '\\'> <n> ) } {($ Id.VSub_DollarName '$c')} {($ Id.VSub_DollarName '$l')} {($ Id.VSub_DollarName '$l')} {($ Id.VSub_DollarName '$l')} ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<printf>} {(SQ <'%s'>)} {(SQ <'\n'> <'.f9 { color: '>) (command_sub left_token: <Id.Left_Backtick '`'> child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dark_bg'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} {(DQ <'#'> ($ Id.VSub_DollarName '$P7') <';'>)}) (C {<printf>} {(DQ <'#'> ($ Id.VSub_DollarName '$P0') <';'>)}) ] ) ) (SQ <' }\n'> <'.b9 { background-color: #'>) (command_sub left_token: <Id.Left_Backtick '`'> child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dark_bg'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} {($ Id.VSub_DollarName '$P0')}) (C {<printf>} {($ Id.VSub_DollarName '$P15')}) ] ) ) (SQ <'; }\n'> <'.f9 > .bold,.bold > .f9, body.f9 > pre > .bold {\n'> <' /* Bold is heavy black on white, or bright white\n'> <' depending on the default background */\n'> <' color: '> ) (command_sub left_token: <Id.Left_Backtick '`'> child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dark_bg'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} {(DQ <'#'> ($ Id.VSub_DollarName '$P15') <';'>)}) (C {<printf>} {(DQ <'#'> ($ Id.VSub_DollarName '$P0') <';'>)}) ] ) ) (SQ <'\n'> <' font-weight: '>) (command_sub left_token: <Id.Left_Backtick '`'> child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dark_bg'))} {<Id.Lit_RBracket ']'>} ) (C {<printf>} {(SQ <'normal;'>)}) (C {<printf>} {(SQ <'bold;'>)}) ] ) ) (SQ <'\n'> <'}\n'> <'.reverse {\n'> <' /* CSS does not support swapping fg and bg colours unfortunately,\n'> <' so just hardcode something that will look OK on all backgrounds. */\n'> <' '> ) (DQ <'color: #'> ($ Id.VSub_DollarName '$P0') <'; background-color: #'> ($ Id.VSub_DollarName '$P7') <';'> ) (SQ <'\n'> <'}\n'> <'.underline { text-decoration: underline; }\n'> <'.line-through { text-decoration: line-through; }\n'> <'.blink { text-decoration: blink; }\n'> <'\n'> <'/* Avoid pixels between adjacent span elements.\n'> <' Note this only works for lines less than 80 chars\n'> <' where we close span elements on the same line.\n'> <'span { display: inline-block; }\n'> <'*/\n'> ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$css_only'))} {<Id.Lit_RBracket ']'>}) (command.Simple words: [ {<printf>} {(SQ <'%s\\n'>)} {(SQ <'To use the css generated from --css-only, do: '>) (SQ <'<head><link rel="stylesheet" type="text/css" href="style.css"></head>'>) } ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$css_only'))} {<Id.Lit_RBracket ']'>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<printf>} {(SQ <'%s'>)} {(SQ <'</style>\n'> <'</head>\n'> <'\n'> <'<body class="f9 b9">\n'> <'<pre>\n'>)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (command.Simple words: [{<printf>} {(SQ <'%s\\n'>)} {(SQ <'Be sure to use <body class="f9 b9"> and <pre>'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:p) op: assign_op.Equal rhs: {(SQ <'\\x1b\\['>)} spids: [1652] ) ] ) (command.Pipeline children: [ (C {<sed>} { (DQ <'\n'> <'# escape ampersand and quote\n'> <'s#&#'> <Id.Lit_BadBackslash '\\'> <'&#g; s#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'#'> <Id.Lit_BadBackslash '\\'> <'"#g;\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x1b[^'> <Id.Lit_BadBackslash '\\'> <'x1b]*'> <Id.Lit_BadBackslash '\\'> <x1b> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <Id.Lit_BadBackslash '\\'> <'##g # strip anything between '> <Id.Lit_BadBackslash '\\'> <'e and ST\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x1b][0-9]*;[^'> <Id.Lit_BadBackslash '\\'> <'a]*'> <Id.Lit_BadBackslash '\\'> <'a##g # strip any OSC (xterm title etc.)\n'> <'\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <r> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'## # strip trailing '> <Id.Lit_BadBackslash '\\'> <'r\n'> <'\n'> <'# strip other non SGR escape sequences\n'> <'s#['> <Id.Lit_BadBackslash '\\'> <'x07]##g\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x1b[]>='> <Id.Lit_BadBackslash '\\'> <'][0-9;]*##g\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x1bP+.'> <Id.Lit_BadBackslash '\\'> <'{5'> <Id.Lit_BadBackslash '\\'> <'}##g\n'> <'# Mark cursor positioning codes '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'Jr;c;\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,2'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')G#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'J;'> <Id.Lit_BadBackslash '\\'> <'1;#g\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,2'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <');'> <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,2'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')H#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <J> <Id.Lit_BadBackslash '\\'> <'1;'> <Id.Lit_BadBackslash '\\'> <'2;#g\n'> <'\n'> <'# Mark clear as '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'Cn where n=1 is screen and n=0 is to end-of-line\n'> <'s#'> (${ Id.VSub_Name p) <'H#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'C1;#g\n'> <'s#'> (${ Id.VSub_Name p) <'K#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'C0;#g\n'> <'# Mark Cursor move columns as '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'Mn where n is +ve for right, -ve for left\n'> <'s#'> (${ Id.VSub_Name p) <'C#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'M1;#g\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')C#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <M> <Id.Lit_BadBackslash '\\'> <'1;#g\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')D#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <M-> <Id.Lit_BadBackslash '\\'> <'1;#g\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')P#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <X> <Id.Lit_BadBackslash '\\'> <'1;#g\n'> <'\n'> <'s#'> (${ Id.VSub_Name p) <'[0-9;?]*[^0-9;?m]##g\n'> <'\n'> ) } ) (C {<sed>} { (DQ <'\n'> <'# escape HTML (ampersand and quote done above)\n'> <'s#>#'> <Id.Lit_BadBackslash '\\'> <'>#g; s#<#'> <Id.Lit_BadBackslash '\\'> <'<#g;\n'> <'\n'> <'# normalize SGR codes a little\n'> <'\n'> <'# split 256 colors out and mark so that they\'re not\n'> <'# recognised by the following \'split combined\' line\n'> <':e\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9;]'> <Id.Lit_BadBackslash '\\'> <'{1,'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <');'> <Id.Lit_BadBackslash '\\'> <'([34]8;5;[0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,3'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <1m> (${ Id.VSub_Name p) <'¬'> <Id.Lit_BadBackslash '\\'> <'2m#g; t e\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([34]8;5;[0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,3'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <'¬'> <Id.Lit_BadBackslash '\\'> <'1m#g;\n'> <'\n'> <':c\n'> <'s#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <');'> <Id.Lit_BadBackslash '\\'> <'([0-9;]'> <Id.Lit_BadBackslash '\\'> <'{1,'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <1m> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'2m#g; t c # split combined\n'> <'s#'> (${ Id.VSub_Name p) <0> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'1#g #strip leading 0\n'> <'s#'> (${ Id.VSub_Name p) <1m> <Id.Lit_BadBackslash '\\'> <'('> <Id.Lit_BadBackslash '\\'> <'('> (${ Id.VSub_Name p) <'[4579]m'> <Id.Lit_BadBackslash '\\'> <')*'> <Id.Lit_BadBackslash '\\'> <')#'> <Id.Lit_BadBackslash '\\'> <1> (${ Id.VSub_Name p) <'1m#g #bold last (with clr)\n'> <'s#'> (${ Id.VSub_Name p) <'m#'> (${ Id.VSub_Name p) <'0m#g #add leading 0 to norm\n'> <'\n'> <'# undo any 256 color marking\n'> <'s#'> (${ Id.VSub_Name p) <'¬'> <Id.Lit_BadBackslash '\\'> <'([34]8;5;[0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,3'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <Id.Lit_BadBackslash '\\'> <'1m#g;\n'> <'\n'> <'# map 16 color codes to color + bold\n'> <'s#'> (${ Id.VSub_Name p) <9> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <3> <Id.Lit_BadBackslash '\\'> <1m> (${ Id.VSub_Name p) <'1m#g;\n'> <'s#'> (${ Id.VSub_Name p) <10> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <4> <Id.Lit_BadBackslash '\\'> <1m> (${ Id.VSub_Name p) <'1m#g;\n'> <'\n'> <'# change \'reset\' code to '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'R\n'> <'s#'> (${ Id.VSub_Name p) <'0m#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'R;#g\n'> ) } ) (C {<sed>} { (DQ <'\n'> <'# common combinations to minimise html (optional)\n'> <':f\n'> <'s#'> (${ Id.VSub_Name p) <'3[0-7]m'> (${ Id.VSub_Name p) <3> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <3> <Id.Lit_BadBackslash '\\'> <'1m#g; t f\n'> <':b\n'> <'s#'> (${ Id.VSub_Name p) <'4[0-7]m'> (${ Id.VSub_Name p) <4> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m#'> (${ Id.VSub_Name p) <4> <Id.Lit_BadBackslash '\\'> <'1m#g; t b\n'> <'s#'> (${ Id.VSub_Name p) <3> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m'> (${ Id.VSub_Name p) <4> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <f> <Id.Lit_BadBackslash '\\'> <'1 b'> <Id.Lit_BadBackslash '\\'> <2> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <4> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m'> (${ Id.VSub_Name p) <3> <Id.Lit_BadBackslash '\\'> <'([0-7]'> <Id.Lit_BadBackslash '\\'> <')m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <f> <Id.Lit_BadBackslash '\\'> <'2 b'> <Id.Lit_BadBackslash '\\'> <1> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'\n'> <'s#'> (${ Id.VSub_Name p) <'1m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <bold> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <'4m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <underline> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <'5m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <blink> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <'7m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <reverse> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <'9m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <line-through> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <3> <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <')m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <f> <Id.Lit_BadBackslash '\\'> <1> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <4> <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <')m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <b> <Id.Lit_BadBackslash '\\'> <1> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'\n'> <'s#'> (${ Id.VSub_Name p) <'38;5;'> <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,3'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <ef> <Id.Lit_BadBackslash '\\'> <1> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'s#'> (${ Id.VSub_Name p) <'48;5;'> <Id.Lit_BadBackslash '\\'> <'([0-9]'> <Id.Lit_BadBackslash '\\'> <'{1,3'> <Id.Lit_BadBackslash '\\'> <'}'> <Id.Lit_BadBackslash '\\'> <')m#<span class='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <eb> <Id.Lit_BadBackslash '\\'> <1> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'>#g\n'> <'\n'> <'s#'> (${ Id.VSub_Name p) <'[0-9;]*m##g # strip unhandled codes\n'> ) } ) (C {<sed>} { (DQ <'\n'> <'# change \'smacs\' and \'rmacs\' to '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'T1 and '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'T0 to simplify matching.\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x1b(0#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'T1;#g;\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x0E#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'T1;#g;\n'> <'\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x1b(B#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'T0;#g\n'> <'s#'> <Id.Lit_BadBackslash '\\'> <'x0F#'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'T0;#g\n'> ) } ) (command.Subshell child: (C {<gawk>} { (SQ <'\n'> <'function dump_line(l,del,c,blanks,ret) {\n'> <' for(c=1;c<maxX;c++) {\n'> <' if ((c SUBSEP l) in attr || length(cur)) {\n'> <' ret = ret blanks fixas(cur,attr[c,l])\n'> <' if(del) delete attr[c,l]\n'> <' blanks=""\n'> <' }\n'> <' if ((c SUBSEP l) in dump) {\n'> <' ret=ret blanks dump[c,l]\n'> <' if(del) delete dump[c,l]\n'> <' blanks=""\n'> <' } else blanks=blanks " "\n'> <' }\n'> <' if(length(cur)) ret=ret blanks\n'> <' return ret\n'> <'}\n'> <'\n'> <'function dump_screen(l,ret) {\n'> <' for(l=1;l<=maxY;l++)\n'> <' ret=ret dump_line(l,0) "\\n"\n'> <' return ret fixas(cur, "")\n'> <'}\n'> <'\n'> <'function atos(a,i,ret) {\n'> <' for(i=1;i<=length(a);i++) if(i in a) ret=ret a[i]\n'> <' return ret\n'> <'}\n'> <'\n'> <'function fixas(a,s,spc,i,attr,rm,ret) {\n'> <' spc=length(a)\n'> <' l=split(s,attr,">")\n'> <' for(i=1;i<=spc;i++) {\n'> <' rm=rm?rm:(a[i]!=attr[i]">")\n'> <' if(rm) {\n'> <' ret=ret "</span>"\n'> <' delete a[i];\n'> <' }\n'> <' }\n'> <' for(i=1;i<l;i++) {\n'> <' attr[i]=attr[i]">"\n'> <' if(a[i]!=attr[i]) {\n'> <' a[i]=attr[i]\n'> <' ret = ret attr[i]\n'> <' }\n'> <' }\n'> <' return ret\n'> <'}\n'> <'\n'> <'function encode(string,start,end,i,ret,pos,sc,buf) {\n'> <' if(!end) end=length(string);\n'> <' if(!start) start=1;\n'> <' state=3\n'> <' for(i=1;i<=length(string);i++) {\n'> <' c=substr(string,i,1)\n'> <' if(state==2) {\n'> <' sc=sc c\n'> <' if(c==";") {\n'> <' c=sc\n'> <' state=last_mode\n'> <' } else continue\n'> <' } else {\n'> <' if(c=="\\r") { x=1; continue }\n'> <' if(c=="<") {\n'> <' # Change attributes - store current active\n'> <' # attributes in span array\n'> <' split(substr(string,i),cord,">");\n'> <' i+=length(cord[1])\n'> <' span[++spc]=cord[1] ">"\n'> <' continue\n'> <' }\n'> <' else if(c=="&") {\n'> <' # All goes to single position till we see a semicolon\n'> <' sc=c\n'> <' state=2\n'> <' continue\n'> <' }\n'> <' else if(c=="\\b") {\n'> <' # backspace move insertion point back 1\n'> <' if(spc) attr[x,y]=atos(span)\n'> <' x=x>1?x-1:1\n'> <' continue\n'> <' }\n'> <' else if(c=="\\"") {\n'> <' split(substr(string,i+2),cord,";")\n'> <' cc=substr(string,i+1,1);\n'> <' if(cc=="T") {\n'> <' # Transliterate on/off\n'> <' if(cord[1]==1&&state==3) last_mode=state=4\n'> <' if(cord[1]==0&&state==4) last_mode=state=3\n'> <' }\n'> <' else if(cc=="C") {\n'> <' # Clear\n'> <' if(cord[1]+0) {\n'> <' # Screen - if Recording dump screen\n'> <' if(dumpStatus==dsActive) ret=ret dump_screen()\n'> <' dumpStatus=dsActive\n'> <' delete dump\n'> <' delete attr\n'> <' x=y=1\n'> <' } else {\n'> <' # To end of line\n'> <' for(pos=x;pos<maxX;pos++) {\n'> <' dump[pos,y]=" "\n'> <' if (!spc) delete attr[pos,y]\n'> <' else attr[pos,y]=atos(span)\n'> <' }\n'> <' }\n'> <' }\n'> <' else if(cc=="J") {\n'> <' # Jump to x,y\n'> <' i+=length(cord[2])+1\n'> <' # If line is higher - dump previous screen\n'> <' if(dumpStatus==dsActive&&cord[1]<y) {\n'> <' ret=ret dump_screen();\n'> <' dumpStatus=dsNew;\n'> <' }\n'> <' x=cord[2]\n'> <' if(length(cord[1]) && y!=cord[1]){\n'> <' y=cord[1]\n'> <' if(y>maxY) maxY=y\n'> <' # Change y - start recording\n'> <' dumpStatus=dumpStatus?dumpStatus:dsReset\n'> <' }\n'> <' }\n'> <' else if(cc=="M") {\n'> <' # Move left/right on current line\n'> <' x+=cord[1]\n'> <' }\n'> <' else if(cc=="X") {\n'> <' # delete on right\n'> <' for(pos=x;pos<=maxX;pos++) {\n'> <' nx=pos+cord[1]\n'> <' if(nx<maxX) {\n'> <' if((nx SUBSEP y) in attr) attr[pos,y] = attr[nx,y]\n'> <' else delete attr[pos,y]\n'> <' if((nx SUBSEP y) in dump) dump[pos,y] = dump[nx,y]\n'> <' else delete dump[pos,y]\n'> <' } else if(spc) {\n'> <' attr[pos,y]=atos(span)\n'> <' dump[pos,y]=" "\n'> <' }\n'> <' }\n'> <' }\n'> <' else if(cc=="R") {\n'> <' # Reset attributes\n'> <' while(spc) delete span[spc--]\n'> <' }\n'> <' i+=length(cord[1])+2\n'> <' continue\n'> <' }\n'> <' else if(state==4&&i>=start&&i<=end&&c in Trans) c=Trans[c]\n'> <' }\n'> <' if(dumpStatus==dsReset) {\n'> <' delete dump\n'> <' delete attr\n'> <' ret=ret"\\n"\n'> <' dumpStatus=dsActive\n'> <' }\n'> <' if(dumpStatus==dsNew) {\n'> <' # After moving/clearing we are now ready to write\n'> <' # somthing to the screen so start recording now\n'> <' ret=ret"\\n"\n'> <' dumpStatus=dsActive\n'> <' }\n'> <' if(dumpStatus==dsActive||dumpStatus==dsOff) {\n'> <' dump[x,y] = c\n'> <' if(!spc) delete attr[x,y]\n'> <' else attr[x,y] = atos(span)\n'> <' if(++x>maxX) maxX=x;\n'> <' }\n'> <' }\n'> <' # End of line if dumping increment y and set x back to first col\n'> <' x=1\n'> <' if(!dumpStatus) return ret dump_line(y,1);\n'> <' else if(++y>maxY) maxY=y;\n'> <' return ret\n'> <'}\n'> <'BEGIN{\n'> <' OFS=FS\n'> <' # dump screen status\n'> <' dsOff=0 # Not dumping screen contents just write output direct\n'> <' dsNew=1 # Just after move/clear waiting for activity to start recording\n'> <' dsReset=2 # Screen cleared build new empty buffer and record\n'> <' dsActive=3 # Currently recording\n'> <' F="abcdefghijklmnopqrstuvwxyz{}`~"\n'> < ' T="▒␉␌␍␊°±␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π£◆·"\n' > <' maxX=80\n'> <' delete cur;\n'> <' x=y=1\n'> <' for(i=1;i<=length(F);i++)Trans[substr(F,i,1)]=substr(T,i,1);\n'> <'}\n'> <'\n'> <'{ $0=encode($0) }\n'> <'1\n'> <'END {\n'> <' if(dumpStatus) {\n'> <' print dump_screen();\n'> <' }\n'> <'}'> ) } ) ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$body_only'))} {<Id.Lit_RBracket ']'>}) (C {<printf>} {(SQ <'</pre>\n'> <'</body>\n'> <'</html>\\n'>)}) ] ) ] )