(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:dosay) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(which)} {(say)})]) left_token: <Left_Backtick '`'> spids: [12 16] ) (' --quality=127') ) } spids: [10] ) ] spids: [10] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:format) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(which)} {(fmt)})]) left_token: <Left_Backtick '`'> spids: [22 26] ) (' -w 70') ) } spids: [20] ) ] spids: [20] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:voice) op:Equal rhs:{(DQ )} spids:[31])] spids: [31] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:rate) op:Equal rhs:{(DQ )} spids:[38])] spids: [38] ) (FuncDef name: demovoices body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:voicelist) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(say)} {(-v)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\?'>)}) (C {(grep)} {(DQ (en_))}) (C {(cut)} {(-c1-12)}) (C {(sed)} {(SQ <'s/ /_/;s/ //g;s/_$//'>)}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [59 90] ) } spids: [58] ) ] spids: [58] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (list))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Pipeline children: [ (C {(echo)} {(Available)} {(voices) (Lit_Other ':')} { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$voicelist')}) (C {(sed)} {(SQ <'s/ /, /g;s/_/ /g'>)}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [122 134] ) } ) (C {($ VSub_Name '$format')}) ] negated: False ) (C {(echo)} { (DQ ('HANDY TIP: use ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (CommandSubPart command_list: (CommandList children: [(C {(basename)} {($ VSub_Number '$0')})] ) left_token: <Left_CommandSub '$('> spids: [146 150] ) (' demo') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' to hear all the voices') ) } ) (C {(exit)} {(0)}) ] spids: [-1 112] ) ] spids: [-1 162] ) (ForEach iter_name: name iter_words: [{($ VSub_Name '$voicelist')}] do_arg_iter: False body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:myname) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$name')}) (C {(sed)} {(SQ <'s/_/ /'>)}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [180 192] ) } spids: [179] ) ] spids: [179] ) (C {(echo)} {(DQ ('Voice: ') ($ VSub_Name '$myname'))}) (C {($ VSub_Name '$dosay')} {(-v)} {(DQ ($ VSub_Name '$myname'))} {(DQ ("Hello! I'm ") ($ VSub_Name '$myname') ('. This is what I sound like.'))} ) ] spids: [176 218] ) spids: [171 174] ) (C {(exit)} {(0)}) ] spids: [50] ) spids: [46 49] ) (FuncDef name: usage body: (BraceGroup children: [ (C {(echo)} {(DQ ('Usage: sayit [-v voice] [-r rate] [-f file] phrase'))}) (C {(echo)} {(DQ (' or: sayit demo'))}) (C {(exit)} {(0)}) ] spids: [233] ) spids: [229 232] ) (While cond: [(Sentence child:(C {(getopts)} {(DQ ('df:r:v:'))} {(opt)}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$opt')} arms: [ (case_arm pat_list: [{(d)}] action: [(C {(demovoices)} {(list)})] spids: [278 280 286 -1] ) (case_arm pat_list: [{(f)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ ($ VSub_Name '$OPTARG'))} spids: [293] ) ] spids: [293] ) ] spids: [289 291 298 -1] ) (case_arm pat_list: [{(r)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:rate) op: Equal rhs: {(DQ ('-r ') ($ VSub_Name '$OPTARG'))} spids: [305] ) ] spids: [305] ) ] spids: [301 303 311 -1] ) (case_arm pat_list: [{(v)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:voice) op: Equal rhs: {(DQ ($ VSub_Name '$OPTARG'))} spids: [318] ) ] spids: [318] ) ] spids: [314 316 323 -1] ) ] spids: [271 275 326] ) ] spids: [268 328] ) ) (C {(shift)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name '$OPTIND')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [333 340] ) } ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-eq)} {(0)} {(-a)} {(-z)} {(DQ ($ VSub_Name '$input'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {($ VSub_Name '$dosay')} {(DQ ("Dude! You haven't given me any parameters to work with."))} ) (C {(echo)} {(DQ ('Error: no parameters specified. Specify a file or phrase'))}) (C {(exit)} {(0)}) ] spids: [-1 365] ) ] spids: [-1 386] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (demo))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(demovoices)})] spids: [-1 407] ) ] spids: [-1 412] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} {(DQ ($ VSub_Name '$input'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {($ VSub_Name '$dosay')} {($ VSub_Name '$rate')} {(-v)} {(DQ ($ VSub_Name '$voice'))} {(-f)} {($ VSub_Name '$input')} ) ] spids: [-1 431] ) ] else_action: [ (C {($ VSub_Name '$dosay')} {($ VSub_Name '$rate')} {(-v)} {(DQ ($ VSub_Name '$voice'))} {(DQ ($ VSub_Star '$*'))} ) ] spids: [448 465] ) (C {(exit)} {(0)}) ] )