summary refs log tree commit diff stats
path: root/TODO
blob: bb125775ff23bbe02befd34045a4cdd519dbfa9b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Console

   (X) #0   09/12/06  console commands
   (X) #1   09/12/06  quick find
   (X) #2   09/12/06  open with
   (X) #4   09/12/06  history for console
   (X) #13  09/12/27  display docstring of a command


General

   (X) #5   09/12/06  move code from fm into objects
   (X) #6   09/12/06  move main to __init__
   (X) #7   09/12/06  cooler titlebar
   (X) #8   09/12/17  Add operations to modify files/directories
   (X) #9   09/12/24  add a widget for managing running operations
   (X) #10  09/12/24  sorting
   (X) #11  09/12/27  filter
   (X) #12  09/12/27  jump through the list in a specific order
   (X) #14  09/12/29  make filelists inherit from pagers
   (X) #15  09/12/29  better way of running processes!!~
   (X) #16  10/01/01  list of bookmarks
   (X) #21  10/01/01  write help!
   (X) #22  10/01/03  add getopt options to change flags/mode
   (X) #29  10/01/06  add chmod command
   (X) #30  10/01/06  add a way to create symlinks
   (X) #32  10/01/08  place the (hidden) cursor to a meaningful position
   (X) #34  10/01/09  display free disk space
   (X) #35  10/01/09  display disk usage of files in current directory
   ( ) #36  10/01/11  help coloring is terribly inefficient
   (X) #37  10/01/13  better tab completion for OpenConsole
   ( ) #38  10/01/16  searching in pager
   (X) #39  10/01/17  flushinput not always good
   (X) #42  10/01/17  memorize directory for `` when using :cd
   (X) #43  10/01/18  internally treat the bookmarks ` and ' the same
   ( ) #44  10/01/18  more error messages :P
   (X) #47  10/01/19  less restricive auto preview
   (X) #48  10/01/19  abbreviate commands with first unambiguous substring
   ( ) #50  10/01/19  add more unit tests
   ( ) #51  10/01/21  remove directory.marked_items ?
   (X) #55  10/01/24  allow change of filename when pasting
          you're given the choice between overwriting or appending a "_"
   ( ) #56  10/01/30  warn before deleting mount points
   ( ) #57  10/01/30  warn before deleting unseen marked files
   (X) #58  10/02/04  change the title of the terminal
   (X) #61  10/02/09  show sum of size of marked files
   (X) #63  10/02/15  limit filesize in previews
   ( ) #64  10/02/25  scroll in previews
   (X) #66  10/02/28  explain how colorschemes work
   (X) #70  10/03/14  mouse handler for titlebar
   (X) #71  10/03/21  previews: black/whitelist + read file


Bugs

   (X) #17  10/01/01  why do bookmarks disappear sometimes?
   (X) #18  10/01/01  fix notify widget (by adding a LogView?)
   (X) #19  10/01/01  resizing after pressing g
   (X) #23  10/01/04  stop dir loading with ^C -> wont load anymore
   (X) #25  10/01/06  directories sometimes dont reload correctly
   (X) #26  10/01/06  :delete on symlinks of directories fails
   (X) #31  10/01/06  ^C breaks cd-after-exit by stopping sourced shell script
   (X) #40  10/01/17  freeze with unavailable sshfs
          Not rangers fault (?)
   (X) #41  10/01/17  capital file extensions are not recognized
   (X) #46  10/01/19  old username displayed after using su
   (X) #49  10/01/19  fix unit tests :'(
   (X) #52  10/01/23  special characters in tab completion
   (X) #54  10/01/23  max_dirsize_for_autopreview not working
   ( ) #60  10/02/05  utf support improvable
   (X) #62  10/02/15  curs_set can raise an exception
   (X) #65  10/02/16  "source ranger ranger some/file.txt" shouldn't cd after exit
   (X) #67  10/03/08  terminal title in tty
   (X) #69  10/03/11  tab-completion breaks with Apps subclass
   (X) #73  10/03/21  when clicking on the first column, it goes 1x down
   (X) #74  10/03/21  console doesn't scroll


Ideas

   ( ) #20  10/01/01  use inotify to monitor filesystem changes
   ( ) #24  10/01/06  progress bar
   (X) #27  10/01/06  hide bookmarks in list which contain hidden dir
   (X) #28  10/01/06  use regexp instead of string for searching
   ( ) #33  10/01/08  accelerate mousewheel speed
   ( ) #45  10/01/18  hooks for events like setting changes
   ( ) #53  10/01/23  merge fm and environment
   ( ) #68  10/03/10  threads, to seperate ui and loading
   ( ) #72  10/03/21  ranger daemon which does the slow io tasks
   ( ) #75  10/03/28  navigate in history
   (X) #76  10/03/28  save history between sessions
   (X) #77  10/03/28  colorscheme overlay in options.py
mmitter Kartik Agaram <vc@akkartik.com> 2018-12-01 14:13:33 -0800 4814' href='/akkartik/mu/commit/html/016dilated_reagent.cc.html?h=main&id=e4ac3c9e6e5464a0fc0f8fd3763a572e0e180c04'>e4ac3c9e ^
a654e4ec ^
204dae92 ^





201458e3 ^
204dae92 ^




201458e3 ^
c762564b ^
204dae92 ^




201458e3 ^
204dae92 ^





201458e3 ^
204dae92 ^





5fe060d5 ^
204dae92 ^
201458e3 ^
204dae92 ^
201458e3 ^

204dae92 ^



201458e3 ^
5fe060d5 ^
204dae92 ^










201458e3 ^
204dae92 ^



805d58c6 ^


e4ac3c9e ^
805d58c6 ^







e4ac3c9e ^
805d58c6 ^






e4ac3c9e ^
805d58c6 ^





204dae92 ^
5fe060d5 ^
204dae92 ^



2c678a4e ^
204dae92 ^



201458e3 ^
204dae92 ^
e4ac3c9e ^
805d58c6 ^
204dae92 ^

e4ac3c9e ^
805d58c6 ^
204dae92 ^

5fe060d5 ^
805d58c6 ^

e4ac3c9e ^
805d58c6 ^



5fe060d5 ^
805d58c6 ^
204dae92 ^
4a48bedc ^
805d58c6 ^


5fe060d5 ^
805d58c6 ^

e4ac3c9e ^
805d58c6 ^




204dae92 ^




201458e3 ^
5fe060d5 ^
204dae92 ^
805d58c6 ^
e4ac3c9e ^
805d58c6 ^
204dae92 ^

805d58c6 ^
204dae92 ^
805d58c6 ^
204dae92 ^

76755b28 ^


a654e4ec ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217



                                                                                          
                                         
                                         
                                                
                                  
                                                                                                               
                                                 

                       

                                                                                                 
                    
                                     
                                                                          

                             
                             




                                                                           
                             
                                  

        



                               






















                                                                                 

         
       
                             
                                                                                                                                               
                         





                                                                                                                                                  
                                                                                                                           




                                                                                                                                                                                                                                                                   
                                                                                                                            
                                                                                                           




                                                                                                                
                                                                                                                            





                                                                                                                                                                                                                                                                                                                 
                                                                                                                            





                                                                                                                                                                                                                                                                                
                                                                                                                                                            
                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                        
                                                                                                                                   

                                                                                                                                                                                                                                                



                                                                                                                                                
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                 










                                                                                                                                                             
                                                                                                                                                                                                                                   



                                                                                                                                                                                           


                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                 







                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                 






                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                 





                                                                                                                                                                                                                                                                      
                                                                           
                                                                                                                                                                                             



                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                    



                                                                                                                                                                   
                                                                                                                                                                             
                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                
                                                                                                                    

                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                       
                                                                                                                    

                                                                            
                                                                                                                                                                        

                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                   



                                                                                                                                                                                     
                                                                                                                                                                                             
                                                                                                                           
                                                                            
                                                                                                                                                                                                                                                             


                                                                                                                                                                                                                                                                        
                                                                                                                                                                        

                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                   




                                                                                                                                                                                                                                                                                                           




                                                                                                                  
                                                                                                                                                                                                                        
                                                                                                                                                                           
                                                                                                                                                                                                                         
                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                 
                                                                                                                           

                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                     

                                                                                                                         


       
                                     
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 016dilated_reagent.cc</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.Error { color: #ffffff; background-color: #ff6060; padding-bottom: 1px; }
.LineNr { }
.Constant { color: #008787; }
.muRecipe { color: #ff8700; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.cSpecial { color: #008000; }
.traceContains { color: #005f00; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/016dilated_reagent.cc'>https://github.com/akkartik/mu/blob/master/016dilated_reagent.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="Comment">//: An alternative syntax for reagents that permits whitespace in properties,</span>
<span id="L2" class="LineNr">  2 </span><span class="Comment">//: grouped by brackets. We'll use this ability in the next layer, when we</span>
<span id="L3" class="LineNr">  3 </span><span class="Comment">//: generalize types from lists to trees of properties.</span>
<span id="L4" class="LineNr">  4 </span>
<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(scenarios load)</span>
<span id="L6" class="LineNr">  6 </span><span class="Delimiter">:(scenario dilated_reagent)</span>
<span id="L7" class="LineNr">  7 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L8" class="LineNr">  8 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: number<span class="Delimiter">,</span> foo: bar<span class="Delimiter">}</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
<span id="L9" class="LineNr">  9 </span>]
<span id="L10" class="LineNr"> 10 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;, &quot;foo&quot;: &quot;bar&quot;}</span>
<span id="L11" class="LineNr"> 11 </span>
<span id="L12" class="LineNr"> 12 </span><span class="Delimiter">:(scenario load_trailing_space_after_curly_bracket)</span>
<span id="L13" class="LineNr"> 13 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L14" class="LineNr"> 14 </span>  <span class="Comment"># line below has a space at the end</span>
<span id="L15" class="LineNr"> 15 </span>  <span class="Delimiter">{</span><span class="Error"> </span>
<span id="L16" class="LineNr"> 16 </span>]
<span id="L17" class="LineNr"> 17 </span><span class="Comment"># successfully parsed</span>
<span id="L18" class="LineNr"> 18 </span>
<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(scenario dilated_reagent_with_comment)</span>
<span id="L20" class="LineNr"> 20 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L21" class="LineNr"> 21 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: number<span class="Delimiter">,</span> foo: bar<span class="Delimiter">}</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>  <span class="Comment"># test comment</span>
<span id="L22" class="LineNr"> 22 </span>]
<span id="L23" class="LineNr"> 23 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;, &quot;foo&quot;: &quot;bar&quot;}</span>
<span id="L24" class="LineNr"> 24 </span>$error: <span class="Constant">0</span>
<span id="L25" class="LineNr"> 25 </span>
<span id="L26" class="LineNr"> 26 </span><span class="Delimiter">:(scenario dilated_reagent_with_comment_immediately_following)</span>
<span id="L27" class="LineNr"> 27 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L28" class="LineNr"> 28 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Delimiter">{</span><span class="Constant">34</span>: literal<span class="Delimiter">}</span>  <span class="Comment"># test comment</span>
<span id="L29" class="LineNr"> 29 </span>]
<span id="L30" class="LineNr"> 30 </span>$error: <span class="Constant">0</span>
<span id="L31" class="LineNr"> 31 </span>
<span id="L32" class="LineNr"> 32 </span><span class="Comment">//: First augment next_word to group balanced brackets together.</span>
<span id="L33" class="LineNr"> 33 </span>
<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(before &quot;End <a href='011load.cc.html#L169'>next_word</a> Special-cases&quot;)</span>
<span id="L35" class="LineNr"> 35 </span><span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'('</span><span class="Delimiter">)</span>
<span id="L36" class="LineNr"> 36 </span>  <span class="Identifier">return</span> <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L37" class="LineNr"> 37 </span><span class="Comment">// treat curlies mostly like parens, but don't mess up labels</span>
<span id="L38" class="LineNr"> 38 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='016dilated_reagent.cc.html#L44'>start_of_dilated_reagent</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span>
<span id="L39" class="LineNr"> 39 </span>  <span class="Identifier">return</span> <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L40" class="LineNr"> 40 </span>
<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(code)</span>
<span id="L42" class="LineNr"> 42 </span><span class="Comment">// A curly is considered a label if it's the last thing on a line. Dilated</span>
<span id="L43" class="LineNr"> 43 </span><span class="Comment">// reagents should remain all on one line.</span>
<span id="L44" class="LineNr"> 44 </span><span class="Normal">bool</span> <a href='016dilated_reagent.cc.html#L44'>start_of_dilated_reagent</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'{'</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">int</span> pos = in<span class="Delimiter">.</span>tellg<span class="Delimiter">();</span>
<span id="L47" class="LineNr"> 47 </span>  in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// slurp '{'</span>
<span id="L48" class="LineNr"> 48 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">char</span> next = in<span class="Delimiter">.</span>peek<span class="Delimiter">();</span>
<span id="L50" class="LineNr"> 50 </span>  in<span class="Delimiter">.</span>seekg<span class="Delimiter">(</span>pos<span class="Delimiter">);</span>
<span id="L51" class="LineNr"> 51 </span>  <span class="Identifier">return</span> next != <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">}</span>
<span id="L53" class="LineNr"> 53 </span>
<span id="L54" class="LineNr"> 54 </span><span class="Comment">// Assume the first letter is an open bracket, and read everything until the</span>
<span id="L55" class="LineNr"> 55 </span><span class="Comment">// matching close bracket.</span>
<span id="L56" class="LineNr"> 56 </span><span class="Comment">// We balance {} () and [].</span>
<span id="L57" class="LineNr"> 57 </span>string <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L58" class="LineNr"> 58 </span>  ostringstream result<span class="Delimiter">;</span>
<span id="L59" class="LineNr"> 59 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
<span id="L60" class="LineNr"> 60 </span>  list&lt;<span class="Normal">char</span>&gt; open_brackets<span class="Delimiter">;</span>
<span id="L61" class="LineNr"> 61 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L62" class="LineNr"> 62 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'('</span><span class="Delimiter">)</span> open_brackets<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
<span id="L63" class="LineNr"> 63 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">')'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L64" class="LineNr"> 64 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> != <span class="Constant">'('</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L65" class="LineNr"> 65 </span>        <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced ')'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L66" class="LineNr"> 66 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L67" class="LineNr"> 67 </span>      <span class="Delimiter">}</span>
<span id="L68" class="LineNr"> 68 </span>      assert<span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> == <span class="Constant">'('</span><span class="Delimiter">);</span>
<span id="L69" class="LineNr"> 69 </span>      open_brackets<span class="Delimiter">.</span>pop_back<span class="Delimiter">();</span>
<span id="L70" class="LineNr"> 70 </span>    <span class="Delimiter">}</span>
<span id="L71" class="LineNr"> 71 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'['</span><span class="Delimiter">)</span> open_brackets<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
<span id="L72" class="LineNr"> 72 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L73" class="LineNr"> 73 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L74" class="LineNr"> 74 </span>        <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced ']'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L75" class="LineNr"> 75 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L76" class="LineNr"> 76 </span>      <span class="Delimiter">}</span>
<span id="L77" class="LineNr"> 77 </span>      open_brackets<span class="Delimiter">.</span>pop_back<span class="Delimiter">();</span>
<span id="L78" class="LineNr"> 78 </span>    <span class="Delimiter">}</span>
<span id="L79" class="LineNr"> 79 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'{'</span><span class="Delimiter">)</span> open_brackets<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
<span id="L80" class="LineNr"> 80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'}'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L81" class="LineNr"> 81 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> != <span class="Constant">'{'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L82" class="LineNr"> 82 </span>        <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '}'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L83" class="LineNr"> 83 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L84" class="LineNr"> 84 </span>      <span class="Delimiter">}</span>
<span id="L85" class="LineNr"> 85 </span>      open_brackets<span class="Delimiter">.</span>pop_back<span class="Delimiter">();</span>
<span id="L86" class="LineNr"> 86 </span>    <span class="Delimiter">}</span>
<span id="L87" class="LineNr"> 87 </span>    result &lt;&lt; c<span class="Delimiter">;</span>
<span id="L88" class="LineNr"> 88 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L89" class="LineNr"> 89 </span>  <span class="Delimiter">}</span>
<span id="L90" class="LineNr"> 90 </span>  <a href='011load.cc.html#L222'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L91" class="LineNr"> 91 </span>  <span class="Identifier">return</span> result<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
<span id="L93" class="LineNr"> 93 </span>
<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">:(after &quot;Parsing reagent(string s)&quot;)</span>
<span id="L95" class="LineNr"> 95 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>s<span class="Delimiter">,</span> <span class="Constant">&quot;{&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L96" class="LineNr"> 96 </span>  assert<span class="Delimiter">(</span>properties<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
<span id="L97" class="LineNr"> 97 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
<span id="L98" class="LineNr"> 98 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
<span id="L99" class="LineNr"> 99 </span>  in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// skip '{'</span>
<span id="L100" class="LineNr">100 </span>  name = <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L102" class="LineNr">102 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid reagent '&quot;</span> &lt;&lt; s &lt;&lt; <span class="Constant">&quot;' without a name\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L103" class="LineNr">103 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L104" class="LineNr">104 </span>  <span class="Delimiter">}</span>
<span id="L105" class="LineNr">105 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid empty reagent '&quot;</span> &lt;&lt; s &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L107" class="LineNr">107 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L108" class="LineNr">108 </span>  <span class="Delimiter">}</span>
<span id="L109" class="LineNr">109 </span>  <span class="Delimiter">{</span>
<span id="L110" class="LineNr">110 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L111" class="LineNr">111 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L112" class="LineNr">112 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L113" class="LineNr">113 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L225'>end</a> of file (0)\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L114" class="LineNr">114 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L115" class="LineNr">115 </span>    <span class="Delimiter">}</span>
<span id="L116" class="LineNr">116 </span>    string_tree* type_names = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
<span id="L117" class="LineNr">117 </span>    <span class="Comment">// End Parsing Dilated Reagent Type Property(type_names)</span>
<span id="L118" class="LineNr">118 </span>    type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
<span id="L119" class="LineNr">119 </span>    <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
<span id="L120" class="LineNr">120 </span>  <span class="Delimiter">}</span>
<span id="L121" class="LineNr">121 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L122" class="LineNr">122 </span>    string key = <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L123" class="LineNr">123 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>key<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>key == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L125" class="LineNr">125 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L126" class="LineNr">126 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L127" class="LineNr">127 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L128" class="LineNr">128 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L225'>end</a> of file (1)\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L129" class="LineNr">129 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L130" class="LineNr">130 </span>    <span class="Delimiter">}</span>
<span id="L131" class="LineNr">131 </span>    string_tree* value = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
<span id="L132" class="LineNr">132 </span>    <span class="Comment">// End Parsing Dilated Reagent Property(value)</span>
<span id="L133" class="LineNr">133 </span>    properties<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span>key<span class="Delimiter">,</span> value<span class="Delimiter">));</span>
<span id="L134" class="LineNr">134 </span>  <span class="Delimiter">}</span>
<span id="L135" class="LineNr">135 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L136" class="LineNr">136 </span><span class="Delimiter">}</span>
<span id="L137" class="LineNr">137 </span>
<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(code)</span>
<span id="L139" class="LineNr">139 </span>string <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L140" class="LineNr">140 </span>  string result = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L141" class="LineNr">141 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L142" class="LineNr">142 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L143" class="LineNr">143 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L225'>end</a> of file (2)\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L144" class="LineNr">144 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
<span id="L146" class="LineNr">146 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>!result<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; *result<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">)</span>
<span id="L147" class="LineNr">147 </span>    <a href='014literal_string.cc.html#L144'>strip_last</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
<span id="L148" class="LineNr">148 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> || in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">)</span>
<span id="L149" class="LineNr">149 </span>    in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
<span id="L150" class="LineNr">150 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L151" class="LineNr">151 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->