Skip to content

Commit 5d44914

Browse files
committed
Add script for dumping source code into a single text block.
1 parent 21d0e9e commit 5d44914

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

scripts/dumpsrc.sh

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/bin/bash
2+
# Copyright 2025 Google LLC
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
# Print a formatted list of source files from specific directories.
17+
# Suggested usage: dumpsrc.sh <path1> [path2] [path3] [...] | pbcopy
18+
19+
included_files=(
20+
'*.swig'
21+
'*.i'
22+
'*.c'
23+
'*.cc'
24+
'*.cpp'
25+
'*.cs'
26+
'*.cmake'
27+
'*.fbs'
28+
'*.gradle'
29+
'*.h'
30+
'*.hh'
31+
'*.java'
32+
'*.js'
33+
'*.json'
34+
'*.md'
35+
'*.m'
36+
'*.mm'
37+
'CMakeLists.txt'
38+
'Podfile'
39+
)
40+
41+
get_markdown_language_for_file() {
42+
local filename="$1"
43+
local base="$(basename "$filename")"
44+
local ext="${base##*.}"
45+
if [[ "$base" == "$ext" && "$base" != .* ]]; then
46+
ext="" # No extension
47+
fi
48+
49+
# Handle special filename case first
50+
if [[ "$base" == "CMakeLists.txt" ]]; then
51+
echo "cmake"
52+
return 0
53+
fi
54+
55+
# Main logic using case based on extension
56+
case "$ext" in
57+
c) echo "c" ;;
58+
cc) echo "cpp" ;;
59+
cs) echo "csharp" ;;
60+
hh) echo "cpp" ;;
61+
m) echo "objectivec" ;;
62+
mm) echo "objectivec" ;;
63+
sh) echo "bash" ;;
64+
py) echo "python" ;;
65+
md) echo "markdown" ;;
66+
json) echo "js" ;;
67+
h)
68+
if grep -qE "\@interface|\#import" "$filename"; then
69+
echo "objectivec";
70+
else
71+
echo "cpp";
72+
fi
73+
;;
74+
"") # Explicitly handle no extension (after CMakeLists.txt check)
75+
: # Output nothing
76+
;;
77+
*) # Default case for any other non-empty extension
78+
echo "$ext"
79+
;;
80+
esac
81+
return 0
82+
}
83+
84+
85+
if [[ -z "$1" ]]; then
86+
echo "Usage: $0 <path1> [path2] [path3] ..."
87+
exit 1
88+
fi
89+
90+
find_cmd_args=('-name' 'UNUSED')
91+
92+
for pattern in "${included_files[@]}"; do
93+
if [[ -n "${pattern}" ]]; then
94+
find_cmd_args+=('-or' '-name' "$pattern")
95+
fi
96+
done
97+
98+
for f in `find $* -type f -and "${find_cmd_args[@]}"`; do
99+
echo "*** BEGIN CONTENTS OF FILE '$f' ***";
100+
echo '```'$(get_markdown_language_for_file "$f");
101+
cat "$f";
102+
echo '```';
103+
echo "*** END CONTENTS OF FILE '$f' ***";
104+
echo
105+
done

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy