@@ -2017,11 +2017,11 @@
2017 2017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** code file and nZ is its length in bytes. This routine appends that
2018 2018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** text to the HTTP reply with line numbering.
2019 2019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2020 2020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zName is the content's file name, if any (it may be NULL). If that
2021 2021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name contains a '.' then the part after the final '.' is used as
2022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the X part of a "language-X" CSS class on the generate CODE block.
2022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the X part of a "language-X" CSS class on the generated CODE block.
2023 2023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2024 2024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zLn is the ?ln= parameter for the HTTP query. If there is an argument,
2025 2025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then highlight that line number and scroll to it once the page loads.
2026 2026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If there are two line numbers, highlight the range of lines.
2027 2027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Multiple ranges can be highlighed by adding additional line numbers
@@ -2035,11 +2035,12 @@
2035 2035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
2036 2036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iStart, iEnd; /* Start and end of region to highlight */
2037 2037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = 0; /* Current line number */
2038 2038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i = 0; /* Loop index */
2039 2039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTop = 0; /* Scroll so that this line is on top of screen. */
2040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nLine = 0;
2040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLine = 0; /* content line count */
2041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSpans = 0; /* number of distinct zLn spans */
2041 2042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zExt = file_extension(zName);
2042 2043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
2043 2044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2044 2045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iStart = iEnd = atoi(zLn);
2045 2046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -2056,60 +2057,67 @@
2056 2057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( fossil_isdigit(zLn[i]) ) i++;
2057 2058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iEnd<iStart ) iEnd = iStart;
2058 2059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
2059 2060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"INSERT OR REPLACE INTO lnos VALUES(%d,%d)", iStart, iEnd
2060 2061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
2062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ++nSpans;
2061 2063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iStart = iEnd = atoi(&zLn[i++]);
2062 2064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( zLn[i] && iStart && iEnd );
2063 2065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_prepare(&q, "SELECT min(iStart), max(iEnd) FROM lnos");
2065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( db_step(&q)==SQLITE_ROW ){
2066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iStart = db_column_int(&q, 0);
2067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iEnd = db_column_int(&q, 1);
2068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iTop = iStart - 15 + (iEnd-iStart)/4;
2069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iTop>iStart - 2 ) iTop = iStart-2;
2070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_finalize(&q);
2072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CX("<table class='numbered-lines'><tbody><tr><td>");
2066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*cgi_printf("<!-- ln span count=%d -->", nSpans);*/
2067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_append_content("<table class='numbered-lines'><tbody>"
2068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "<tr><td class='line-numbers'>", -1);
2069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iStart = iEnd = 0;
2073 2070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
count_lines(z, nZ, &nLine);
2074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i < nLine; ++i){
2075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CX("<span>%6d</span>", i+1);
2071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( n=1 ; n<=nLine; ++n ){
2072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * zAttr = "";
2073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * zId = "";
2074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(nSpans>0 && iEnd==0){/*Grab the next range of zLn marking*/
2075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_prepare(&q, "SELECT iStart, iEnd FROM lnos "
2076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "WHERE iStart >= %d ORDER BY iStart", n);
2077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_step(&q)==SQLITE_ROW ){
2078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iStart = db_column_int(&q, 0);
2079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iEnd = db_column_int(&q, 1);
2080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!iTop){
2081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iTop = iStart - 15 + (iEnd-iStart)/4;
2082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iTop>iStart - 2 ) iTop = iStart-2;
2083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Note that overlapping multi-spans, e.g. 10-15+12-20,
2086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ can cause us to miss a row. */
2087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iStart = iEnd = 0;
2088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_finalize(&q);
2090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ --nSpans;
2091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*cgi_printf("<!-- iStart=%d, iEnd=%d -->", iStart, iEnd);*/
2092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(n==iTop) {
2094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zId = " id='scrollToMe'";
2095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(n==iStart){/*Figure out which CSS class(es) this line needs...*/
2097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(n==iEnd){
2098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAttr = " class='selected-line start end'";
2099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iEnd = 0;
2100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAttr = " class='selected-line start'";
2102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iStart = 0;
2104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if(n==iEnd){
2105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAttr = " class='selected-line end'";
2106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iEnd = 0;
2107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( n>iStart && n<iEnd ){
2108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAttr = " class='selected-line'";
2109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_printf("<span%s%s>%6d</span>", zId, zAttr, n);
2076 2111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CX("</td><td><pre>");
2112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_append_content("</td><td class='file-content'><pre>",-1);
2078 2113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(zExt && *zExt){
2079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CX("<code class='language-%h'>",zExt);
2114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_printf("<code class='language-%h'>",zExt);
2080 2115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CX("<code>");
2082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(!n);
2084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( z[0] ){
2085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n++;
2086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_prepare(&q,
2087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT min(iStart), max(iEnd) FROM lnos"
2088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE iStart <= %d AND iEnd >= %d", n, n);
2089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( db_step(&q)==SQLITE_ROW ){
2090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iStart = db_column_int(&q, 0);
2091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iEnd = db_column_int(&q, 1);
2092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_finalize(&q);
2094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; z[i] && z[i]!='\n'; i++){}
2095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n==iTop ) cgi_append_content("<span id=\"scrollToMe\">", -1);
2096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n==iStart ){
2097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_append_content("<div class=\"selectedText\">",-1);
2098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i>0 ){
2100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zHtml = htmlize(z, i);
2101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_append_content(zHtml, -1);
2102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zHtml);
2103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n==iTop ) cgi_append_content("</span>", -1);
2105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n==iEnd ) cgi_append_content("</div>", -1);
2106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else cgi_append_content("\n", 1);
2107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z += i;
2108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z[0]=='\n' ) z++;
2109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n<iEnd ) cgi_printf("</div>");
2116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_append_content("<code>", -1);
2117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_printf("%.*h", nZ, z);
2111 2119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CX("</code></pre></td></tr></tbody></table>\n");
2112 2120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_int(0, "SELECT EXISTS(SELECT 1 FROM lnos)") ){
2113 2121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
builtin_request_js("scroll.js");
2114 2122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2115 2123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
builtin_request_js("fossil.numbered-lines.js");
2116 2124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!