<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>70181</bug_id>
          
          <creation_ts>2011-10-15 14:11:27 -0700</creation_ts>
          <short_desc>Web Inspector: Unindent edited text by pressing Shift + Tab</short_desc>
          <delta_ts>2011-11-06 00:23:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69986</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">me</reporter>
          <assigned_to name="Nikita Vasilyev">me</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>mathias</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484637</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-10-15 14:11:27 -0700</bug_when>
    <thetext>Would be nice if Shift + Tab unindent a current edited line. Currently, it does nothing http://www.screenr.com/Vy0s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492447</commentid>
    <comment_count>1</comment_count>
      <attachid>112862</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-10-28 07:47:52 -0700</bug_when>
    <thetext>Created attachment 112862
First try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493290</commentid>
    <comment_count>2</comment_count>
      <attachid>112862</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-31 06:53:30 -0700</bug_when>
    <thetext>Comment on attachment 112862
First try

View in context: https://bugs.webkit.org/attachment.cgi?id=112862&amp;action=review

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1062
&gt; +            range.startColumn -= WebInspector.settings.textEditorIndent.get().length;

This can go negative, no?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1063
&gt; +            var newRange = this._setText(range, &quot;&quot;);

Unindent should only be available for indented line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496630</commentid>
    <comment_count>3</comment_count>
      <attachid>113751</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-11-04 22:27:21 -0700</bug_when>
    <thetext>Created attachment 113751
Indent/unindent multiple lines

It should fix https://bugs.webkit.org/show_bug.cgi?id=70182 as well.

Screencast: http://www.screenr.com/KgZs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496633</commentid>
    <comment_count>4</comment_count>
      <attachid>113751</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-11-04 22:44:43 -0700</bug_when>
    <thetext>Comment on attachment 113751
Indent/unindent multiple lines

&gt;+                lineIndentLength = line.match(new RegExp(&quot;^ {1,&quot; + indent.length +&quot;}&quot;))[0].length;

I should have moved the regexp out of the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496664</commentid>
    <comment_count>5</comment_count>
      <attachid>113751</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-05 08:58:14 -0700</bug_when>
    <thetext>Comment on attachment 113751
Indent/unindent multiple lines

View in context: https://bugs.webkit.org/attachment.cgi?id=113751&amp;action=review

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1065
&gt; +            if (range.isEmpty()) {

Lets apply indent when there is multiline selection only (Eclipse model). I.e.
if (range.linesCount())
    newRange = this.indentLines(range);
else
    ...

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1079
&gt; +    indentLines: function(range)

Should be called _indentLines (since is private to this file).

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1083
&gt; +        if (this._lastEditedRange)

It looks like you should set lastEditedRange to the newRange in the end of this method.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1096
&gt; +    unindentLines: function(range)

_unindentLines

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1099
&gt; +            this._textModel.markUndoableState();

Same comment on the undoable state, should set lastEditedRange in the end.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1105
&gt; +        for (var lineNumber = range.startLine; lineNumber &lt;= range.endLine; lineNumber++) {

Again, I would use Eclipse model here: go through lines, check whether line starts with indent. If all lines do, trim them. Otherwise do nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496684</commentid>
    <comment_count>6</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-11-05 10:55:08 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 113751 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113751&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/TextViewer.js:1065
&gt; &gt; +            if (range.isEmpty()) {
&gt; 
&gt; Lets apply indent when there is multiline selection only (Eclipse model). I.e.

I&apos;ve implemented a model used by IntelliJ IDEA. I prefer it over Eclipse one. I indent a line very often, but I can hardly imagine a need to insert an indent in the middle of the line.

Also, Eclipse does indent a single line when, and only when, its fully selected. Otherwise it replaces selected text with an indent. I&apos;ve found it a bit confusing.

&gt; &gt; Source/WebCore/inspector/front-end/TextViewer.js:1105
&gt; &gt; +        for (var lineNumber = range.startLine; lineNumber &lt;= range.endLine; lineNumber++) {
&gt; 
&gt; Again, I would use Eclipse model here: go through lines, check whether line starts with indent. If all lines do, trim them. Otherwise do nothing.

Seems like only Eclipse does that. I have nothing agains it though, so I can do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496687</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-05 11:22:26 -0700</bug_when>
    <thetext>&gt; Seems like only Eclipse does that. I have nothing agains it though, so I can do it.

I have no strong preference for Eclipse over IDEA, I just want us to be consistent and to stick to either of them. I just checked Cloud 9 and they seem to do what you suggest. Let me go through your change once again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496688</commentid>
    <comment_count>8</comment_count>
      <attachid>113751</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-05 11:32:14 -0700</bug_when>
    <thetext>Comment on attachment 113751
Indent/unindent multiple lines

View in context: https://bugs.webkit.org/attachment.cgi?id=113751&amp;action=review

&gt;&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1065
&gt;&gt;&gt; +            if (range.isEmpty()) {
&gt;&gt; 
&gt;&gt; Lets apply indent when there is multiline selection only (Eclipse model). I.e.
&gt;&gt; if (range.linesCount())
&gt;&gt;     newRange = this.indentLines(range);
&gt;&gt; else
&gt;&gt;     ...
&gt; 
&gt; I&apos;ve implemented a model used by IntelliJ IDEA. I prefer it over Eclipse one. I indent a line very often, but I can hardly imagine a need to insert an indent in the middle of the line.
&gt; 
&gt; Also, Eclipse does indent a single line when, and only when, its fully selected. Otherwise it replaces selected text with an indent. I&apos;ve found it a bit confusing.

Sounds good, lets keep it isEmpty

&gt;&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1105
&gt;&gt;&gt; +        for (var lineNumber = range.startLine; lineNumber &lt;= range.endLine; lineNumber++) {
&gt;&gt; 
&gt;&gt; Again, I would use Eclipse model here: go through lines, check whether line starts with indent. If all lines do, trim them. Otherwise do nothing.
&gt; 
&gt; Seems like only Eclipse does that. I have nothing agains it though, so I can do it.

Again, sounds good, lets leave the behavior you suggest.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1111
&gt; +                lineIndentLength = line.match(new RegExp(&quot;^ {1,&quot; + indent.length +&quot;}&quot;))[0].length;

Consider the following case:
WebInspector.settings.textEditorIndent === &quot;\t&quot; -&gt; indent.length === 1

Following line is selected:
\s\s\s\s\tFoo

You&apos;ll remove just one space from the first line. It sounds like we need to define tab size for that. I am fine with setting it to 4 for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496695</commentid>
    <comment_count>9</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-11-05 13:12:48 -0700</bug_when>
    <thetext>&gt; &gt;&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1105
&gt; &gt;&gt;&gt; +        for (var lineNumber = range.startLine; lineNumber &lt;= range.endLine; lineNumber++) {
&gt; &gt;&gt; 
&gt; &gt;&gt; Again, I would use Eclipse model here: go through lines, check whether line starts with indent. If all lines do, trim them. Otherwise do nothing.
&gt; &gt; 
&gt; &gt; Seems like only Eclipse does that. I have nothing agains it though, so I can do it.
&gt; 
&gt; Again, sounds good, lets leave the behavior you suggest.

I&apos;m not clear on this one. Both solutions are fine to me. Should we keep the behavior I&apos;ve already implemented or &quot;go through lines, check whether line starts with indent. If all lines do, trim them. Otherwise do nothing.&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496699</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-05 13:52:21 -0700</bug_when>
    <thetext>&gt; I&apos;m not clear on this one. Both solutions are fine to me. Should we keep the behavior I&apos;ve already implemented or &quot;go through lines, check whether line starts with indent. If all lines do, trim them. Otherwise do nothing.&quot;?

Go ahead and attach it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496711</commentid>
    <comment_count>11</comment_count>
      <attachid>113762</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-11-05 15:01:38 -0700</bug_when>
    <thetext>Created attachment 113762
Here it is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496785</commentid>
    <comment_count>12</comment_count>
      <attachid>113762</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-06 00:23:33 -0700</bug_when>
    <thetext>Comment on attachment 113762
Here it is

Clearing flags on attachment: 113762

Committed r99372: &lt;http://trac.webkit.org/changeset/99372&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496786</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-06 00:23:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112862</attachid>
            <date>2011-10-28 07:47:52 -0700</date>
            <delta_ts>2011-11-04 22:27:21 -0700</delta_ts>
            <desc>First try</desc>
            <filename>unindent.patch</filename>
            <type>text/plain</type>
            <size>1809</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjN2E0YmVmLi4xNjMxMDNkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTEtMTAtMjggIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IHVuaW5kZW50IGVkaXRlZCB0ZXh0IGJ5IHByZXNzaW5nIFNoaWZ0ICsg
VGFiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzOgorCiAyMDExLTEwLTI3ICBIZWxkZXIgQ29y
cmVpYSAgPGhlbGRlci5jb3JyZWlhQHBhbG0uY29tPgogCiAgICAgICAgIFtRdF0gRmFpbHVyZSB0
byBidWlsZCB3aGVuIFFUX05PX0NVUlNPUiBkZWZpbmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKaW5kZXggMzIxNDBlNy4uNjczOGEwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2Vy
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5q
cwpAQCAtMTA1MSw5ICsxMDUxLDYgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBpZiAoc2hpZnRLZXkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQogICAgICAgICB0aGlzLmJlZ2luVXBkYXRlcygpOwogICAgICAgICB0aGlzLl9lbnRlclRl
eHRDaGFuZ2VNb2RlKCk7CiAKQEAgLTEwNjEsNyArMTA1OCwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChyYW5nZS5zdGFydExp
bmUgPiByYW5nZS5lbmRMaW5lIHx8IChyYW5nZS5zdGFydExpbmUgPT09IHJhbmdlLmVuZExpbmUg
JiYgcmFuZ2Uuc3RhcnRDb2x1bW4gPiByYW5nZS5lbmRDb2x1bW4pKQogICAgICAgICAgICAgcmFu
Z2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRD
b2x1bW4sIHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwogCi0gICAgICAgIHZh
ciBuZXdSYW5nZSA9IHRoaXMuX3NldFRleHQocmFuZ2UsIFdlYkluc3BlY3Rvci5zZXR0aW5ncy50
ZXh0RWRpdG9ySW5kZW50LmdldCgpKTsKKyAgICAgICAgaWYgKHNoaWZ0S2V5KSB7CisgICAgICAg
ICAgICByYW5nZS5zdGFydENvbHVtbiAtPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRv
ckluZGVudC5nZXQoKS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl9z
ZXRUZXh0KHJhbmdlLCAiIik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdmFyIG5ld1Jh
bmdlID0gdGhpcy5fc2V0VGV4dChyYW5nZSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0
b3JJbmRlbnQuZ2V0KCkpOwogCiAgICAgICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZShyYW5n
ZSwgbmV3UmFuZ2UpOwogICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsK
</data>
<flag name="review"
          id="111041"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113751</attachid>
            <date>2011-11-04 22:27:21 -0700</date>
            <delta_ts>2011-11-05 15:01:38 -0700</delta_ts>
            <desc>Indent/unindent multiple lines</desc>
            <filename>unindent.patch</filename>
            <type>text/plain</type>
            <size>4269</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MmU5YzUyLi4xYmRmOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMTEtMDQgIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFVuaW5kZW50IGVkaXRlZCB0ZXh0IGJ5IHByZXNzaW5nIFNoaWZ0ICsg
VGFiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4
MQorCisgICAgICAgIEluZGVudCBhbmQgdW5pbmRlbnQgdGV4dCBpbiBhbGwgc2VsZWN0ZWQgbGlu
ZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUudW5pbmRlbnRMaW5lcy5nZXQgdmFyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS51bmluZGVu
dExpbmVzKToKKwogMjAxMS0xMS0wNCAgQmVuIFdlbGxzICA8YmVud2VsbHNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIENhbnZhcyBkcmF3SW1hZ2UoY2FudmFzKSB3aXRoIFNvdXJjZUluLCBEZXN0
aW5hdGlvbkluLCBTb3VyY2VPdXQsIERlc3RpbmF0aW9uQXRvcCBhbmQgQ29weSBoYXZlIGVycm9y
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmll
d2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpz
CmluZGV4IDMyMTQwZTcuLmY1ZmRlYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKQEAgLTEwNTEsOSArMTA1MSw2IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFzZWxl
Y3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHNoaWZ0S2V5
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMo
KTsKICAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOwogCkBAIC0xMDYxLDE1ICsx
MDU4LDc0IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0TGluZSA+IHJhbmdlLmVuZExpbmUgfHwgKHJhbmdlLnN0
YXJ0TGluZSA9PT0gcmFuZ2UuZW5kTGluZSAmJiByYW5nZS5zdGFydENvbHVtbiA+IHJhbmdlLmVu
ZENvbHVtbikpCiAgICAgICAgICAgICByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
KHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbiwgcmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5z
dGFydENvbHVtbik7CiAKLSAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fc2V0VGV4dChyYW5n
ZSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCkpOworICAgICAg
ICB2YXIgbmV3UmFuZ2U7CisgICAgICAgIGlmIChzaGlmdEtleSkKKyAgICAgICAgICAgIG5ld1Jh
bmdlID0gdGhpcy51bmluZGVudExpbmVzKHJhbmdlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbmV3UmFuZ2UgPSB0
aGlzLl9zZXRUZXh0KHJhbmdlLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVu
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gPSBuZXdSYW5n
ZS5lbmRDb2x1bW47CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBuZXdSYW5n
ZSA9IHRoaXMuaW5kZW50TGluZXMocmFuZ2UpOworCisgICAgICAgIH0KIAogICAgICAgICB0aGlz
Ll9leGl0VGV4dENoYW5nZU1vZGUocmFuZ2UsIG5ld1JhbmdlKTsKICAgICAgICAgdGhpcy5lbmRV
cGRhdGVzKCk7Ci0KLSAgICAgICAgdGhpcy5fc2V0Q2FyZXRMb2NhdGlvbihuZXdSYW5nZS5lbmRM
aW5lLCBuZXdSYW5nZS5lbmRDb2x1bW4sIHRydWUpOworICAgICAgICB0aGlzLl9yZXN0b3JlU2Vs
ZWN0aW9uKG5ld1JhbmdlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIAor
ICAgIGluZGVudExpbmVzOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIHZhciBpbmRl
bnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKKworICAg
ICAgICBpZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlKQorICAgICAgICAgICAgdGhpcy5fdGV4dE1v
ZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciA9
IHJhbmdlLnN0YXJ0TGluZTsgbGluZU51bWJlciA8PSByYW5nZS5lbmRMaW5lOyBsaW5lTnVtYmVy
KyspCisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShsaW5lTnVtYmVyLCAwLCBsaW5lTnVtYmVyLCAwKSwgaW5kZW50KTsKKworICAg
ICAgICB2YXIgbmV3UmFuZ2UgPSByYW5nZS5jbG9uZSgpOworICAgICAgICBuZXdSYW5nZS5zdGFy
dENvbHVtbiArPSBpbmRlbnQubGVuZ3RoOworICAgICAgICBuZXdSYW5nZS5lbmRDb2x1bW4gKz0g
aW5kZW50Lmxlbmd0aDsKKworICAgICAgICByZXR1cm4gbmV3UmFuZ2U7CisgICAgfSwKKworICAg
IHVuaW5kZW50TGluZXM6IGZ1bmN0aW9uKHJhbmdlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X2xhc3RFZGl0ZWRSYW5nZSkKKyAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2Fi
bGVTdGF0ZSgpOworCisgICAgICAgIHZhciBpbmRlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
dGV4dEVkaXRvckluZGVudC5nZXQoKTsKKyAgICAgICAgdmFyIGZpcnN0SW5kZW50Q2hhcmFjdGVy
ID0gaW5kZW50LmNoYXJBdCgwKTsKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gcmFuZ2UuY2xvbmUo
KTsKKworICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gcmFuZ2Uuc3RhcnRMaW5lOyBsaW5l
TnVtYmVyIDw9IHJhbmdlLmVuZExpbmU7IGxpbmVOdW1iZXIrKykgeworICAgICAgICAgICAgdmFy
IGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHZh
ciBmaXJzdENoYXJhY3RlciA9IGxpbmUuY2hhckF0KDApOworICAgICAgICAgICAgdmFyIGxpbmVJ
bmRlbnRMZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiAiKQor
ICAgICAgICAgICAgICAgIGxpbmVJbmRlbnRMZW5ndGggPSBsaW5lLm1hdGNoKG5ldyBSZWdFeHAo
Il4gezEsIiArIGluZGVudC5sZW5ndGggKyJ9IikpWzBdLmxlbmd0aDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAiXHQiKQorICAgICAgICAgICAgICAgIGxpbmVJbmRl
bnRMZW5ndGggPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShsaW5lTnVtYmVyLCAwLCBsaW5lTnVtYmVyLCBsaW5lSW5kZW50TGVuZ3RoKSwg
IiIpOworCisgICAgICAgICAgICBpZiAobGluZU51bWJlciA9PT0gcmFuZ2Uuc3RhcnRMaW5lKQor
ICAgICAgICAgICAgICAgIG5ld1JhbmdlLnN0YXJ0Q29sdW1uID0gTWF0aC5tYXgoMCwgbmV3UmFu
Z2Uuc3RhcnRDb2x1bW4gLSBsaW5lSW5kZW50TGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsaW5lSW5kZW50TGVuZ3RoKQorICAgICAgICAgICAgbmV3UmFuZ2UuZW5kQ29sdW1uID0g
TWF0aC5tYXgoMCwgbmV3UmFuZ2UuZW5kQ29sdW1uIC0gbGluZUluZGVudExlbmd0aCk7CisKKyAg
ICAgICAgcmV0dXJuIG5ld1JhbmdlOworICAgIH0sCisKICAgICBfc3BsaXRDaHVua09uQUxpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuaykKICAg
ICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsK
</data>
<flag name="review"
          id="112227"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113762</attachid>
            <date>2011-11-05 15:01:38 -0700</date>
            <delta_ts>2011-11-06 00:23:32 -0700</delta_ts>
            <desc>Here it is</desc>
            <filename>unindent.patch</filename>
            <type>text/plain</type>
            <size>4464</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MmU5YzUyLi4xYmRmOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMTEtMDQgIE5pa2l0YSBWYXNpbHlldiAgPG1lQGVsdjFzLnJ1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFVuaW5kZW50IGVkaXRlZCB0ZXh0IGJ5IHByZXNzaW5nIFNoaWZ0ICsg
VGFiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4
MQorCisgICAgICAgIEluZGVudCBhbmQgdW5pbmRlbnQgdGV4dCBpbiBhbGwgc2VsZWN0ZWQgbGlu
ZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUudW5pbmRlbnRMaW5lcy5nZXQgdmFyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS51bmluZGVu
dExpbmVzKToKKwogMjAxMS0xMS0wNCAgQmVuIFdlbGxzICA8YmVud2VsbHNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIENhbnZhcyBkcmF3SW1hZ2UoY2FudmFzKSB3aXRoIFNvdXJjZUluLCBEZXN0
aW5hdGlvbkluLCBTb3VyY2VPdXQsIERlc3RpbmF0aW9uQXRvcCBhbmQgQ29weSBoYXZlIGVycm9y
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmll
d2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpz
CmluZGV4IDMyMTQwZTcuLjAzOThmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKQEAgLTEwNTEsOSArMTA1MSw2IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFzZWxl
Y3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHNoaWZ0S2V5
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMo
KTsKICAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOwogCkBAIC0xMDYxLDE1ICsx
MDU4LDc4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0TGluZSA+IHJhbmdlLmVuZExpbmUgfHwgKHJhbmdlLnN0
YXJ0TGluZSA9PT0gcmFuZ2UuZW5kTGluZSAmJiByYW5nZS5zdGFydENvbHVtbiA+IHJhbmdlLmVu
ZENvbHVtbikpCiAgICAgICAgICAgICByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
KHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbiwgcmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5z
dGFydENvbHVtbik7CiAKLSAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fc2V0VGV4dChyYW5n
ZSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCkpOworICAgICAg
ICB2YXIgbmV3UmFuZ2U7CisgICAgICAgIGlmIChzaGlmdEtleSkKKyAgICAgICAgICAgIG5ld1Jh
bmdlID0gdGhpcy5fdW5pbmRlbnRMaW5lcyhyYW5nZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG5ld1JhbmdlID0g
dGhpcy5fc2V0VGV4dChyYW5nZSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJbmRl
bnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIG5ld1JhbmdlLnN0YXJ0Q29sdW1uID0gbmV3UmFu
Z2UuZW5kQ29sdW1uOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbmV3UmFu
Z2UgPSB0aGlzLl9pbmRlbnRMaW5lcyhyYW5nZSk7CisKKyAgICAgICAgfQogCiAgICAgICAgIHRo
aXMuX2V4aXRUZXh0Q2hhbmdlTW9kZShyYW5nZSwgbmV3UmFuZ2UpOwogICAgICAgICB0aGlzLmVu
ZFVwZGF0ZXMoKTsKLQotICAgICAgICB0aGlzLl9zZXRDYXJldExvY2F0aW9uKG5ld1JhbmdlLmVu
ZExpbmUsIG5ld1JhbmdlLmVuZENvbHVtbiwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX3Jlc3RvcmVT
ZWxlY3Rpb24obmV3UmFuZ2UsIHRydWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAog
CisgICAgX2luZGVudExpbmVzOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIHZhciBp
bmRlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKKwor
ICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlKQorICAgICAgICAgICAgdGhpcy5fdGV4
dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJl
ciA9IHJhbmdlLnN0YXJ0TGluZTsgbGluZU51bWJlciA8PSByYW5nZS5lbmRMaW5lOyBsaW5lTnVt
YmVyKyspCisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChuZXcgV2ViSW5zcGVj
dG9yLlRleHRSYW5nZShsaW5lTnVtYmVyLCAwLCBsaW5lTnVtYmVyLCAwKSwgaW5kZW50KTsKKwor
ICAgICAgICB2YXIgbmV3UmFuZ2UgPSByYW5nZS5jbG9uZSgpOworICAgICAgICBuZXdSYW5nZS5z
dGFydENvbHVtbiArPSBpbmRlbnQubGVuZ3RoOworICAgICAgICBuZXdSYW5nZS5lbmRDb2x1bW4g
Kz0gaW5kZW50Lmxlbmd0aDsKKyAgICAgICAgdGhpcy5fbGFzdEVkaXRlZFJhbmdlID0gbmV3UmFu
Z2U7CisKKyAgICAgICAgcmV0dXJuIG5ld1JhbmdlOworICAgIH0sCisKKyAgICBfdW5pbmRlbnRM
aW5lczogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRl
ZFJhbmdlKQorICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7
CisKKyAgICAgICAgdmFyIGluZGVudCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy50ZXh0RWRpdG9y
SW5kZW50LmdldCgpOworICAgICAgICB2YXIgaW5kZW50TGVuZ3RoID0gaW5kZW50ID09PSBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLkluZGVudC5UYWJDaGFyYWN0ZXIgPyA0IDogaW5kZW50
Lmxlbmd0aDsKKyAgICAgICAgdmFyIGxpbmVJbmRlbnRSZWdleCA9IG5ldyBSZWdFeHAoIl4gezEs
IiArIGluZGVudExlbmd0aCArICJ9Iik7CisgICAgICAgIHZhciBuZXdSYW5nZSA9IHJhbmdlLmNs
b25lKCk7CisKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciA9IHJhbmdlLnN0YXJ0TGluZTsg
bGluZU51bWJlciA8PSByYW5nZS5lbmRMaW5lOyBsaW5lTnVtYmVyKyspIHsKKyAgICAgICAgICAg
IHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7CisgICAgICAgICAg
ICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBsaW5lLmNoYXJBdCgwKTsKKyAgICAgICAgICAgIHZhciBs
aW5lSW5kZW50TGVuZ3RoOworCisgICAgICAgICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICIg
IikKKyAgICAgICAgICAgICAgICBsaW5lSW5kZW50TGVuZ3RoID0gbGluZS5tYXRjaChsaW5lSW5k
ZW50UmVnZXgpWzBdLmxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0Q2hhcmFjdGVy
ID09PSAiXHQiKQorICAgICAgICAgICAgICAgIGxpbmVJbmRlbnRMZW5ndGggPSAxOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aGlz
Ll90ZXh0TW9kZWwuc2V0VGV4dChuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShsaW5lTnVtYmVy
LCAwLCBsaW5lTnVtYmVyLCBsaW5lSW5kZW50TGVuZ3RoKSwgIiIpOworCisgICAgICAgICAgICBp
ZiAobGluZU51bWJlciA9PT0gcmFuZ2Uuc3RhcnRMaW5lKQorICAgICAgICAgICAgICAgIG5ld1Jh
bmdlLnN0YXJ0Q29sdW1uID0gTWF0aC5tYXgoMCwgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gLSBsaW5l
SW5kZW50TGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lSW5kZW50TGVuZ3Ro
KQorICAgICAgICAgICAgbmV3UmFuZ2UuZW5kQ29sdW1uID0gTWF0aC5tYXgoMCwgbmV3UmFuZ2Uu
ZW5kQ29sdW1uIC0gbGluZUluZGVudExlbmd0aCk7CisKKyAgICAgICAgdGhpcy5fbGFzdEVkaXRl
ZFJhbmdlID0gbmV3UmFuZ2U7CisKKyAgICAgICAgcmV0dXJuIG5ld1JhbmdlOworICAgIH0sCisK
ICAgICBfc3BsaXRDaHVua09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVy
LCBjcmVhdGVTdWZmaXhDaHVuaykKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlz
Ll9nZXRTZWxlY3Rpb24oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>