Overview
Comment: | string_escapes: new package with helper functions to escape strings |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e266afb5fe99d6c2301c0bd3e2c6aaa1 |
User & Date: | nat on 2016-10-08 15:38:30 |
Other Links: | manifest | tags |
Context
2016-10-09
| ||
17:49 | tools/smaz: add a statistics to the evaluation output check-in: 7b31b329d7 user: nat tags: trunk | |
2016-10-08
| ||
15:38 | string_escapes: new package with helper functions to escape strings check-in: e266afb5fe user: nat tags: trunk | |
2016-10-07
| ||
16:01 | tools/smaz: first draft of CLI interface for Evaluate_Dictionary check-in: a27f42e127 user: nat tags: trunk | |
Changes
Added src/natools-string_escapes.adb version [49b61ffb33].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | ------------------------------------------------------------------------------ -- Copyright (c) 2016, Natacha Porté -- -- -- -- Permission to use, copy, modify, and distribute this software for any -- -- purpose with or without fee is hereby granted, provided that the above -- -- copyright notice and this permission notice appear in all copies. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- -- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- -- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- -- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- ------------------------------------------------------------------------------ package body Natools.String_Escapes is subtype Hex_Digit is Natural range 0 .. 15; function C_Escape_Hex (C : Character) return String; -- Return the string representing C in C-style escaped strings function Image (N : Hex_Digit) return Character; -- Return upper-case hexadecimal image of a digit ------------------------------ -- Local Helper Subprograms -- ------------------------------ function C_Escape_Hex (C : Character) return String is begin case C is when Character'Val (0) => return "\0"; when Character'Val (8) => return "\b"; when Character'Val (9) => return "\t"; when Character'Val (10) => return "\n"; when Character'Val (11) => return "\f"; when Character'Val (12) => return "\v"; when Character'Val (13) => return "\r"; when Character'Val (34) => return "\"""; when Character'Val (32) | Character'Val (33) | Character'Val (35) .. Character'Val (126) => return String'(1 => C); when others => declare Code : constant Natural := Character'Pos (C); begin return "\x" & Image (Code / 16) & Image (Code mod 16); end; end case; end C_Escape_Hex; function Image (N : Hex_Digit) return Character is begin case N is when 0 .. 9 => return Character'Val (Character'Pos ('0') + N); when 10 .. 15 => return Character'Val (Character'Pos ('A') + N - 10); end case; end Image; ---------------------- -- Public Interface -- ---------------------- function C_Escape_Hex (S : String; Add_Quotes : Boolean := False) return String is Length : Natural := 0; O : Positive := 1; Sublength : Natural := 0; begin for I in S'Range loop case S (I) is when Character'Val (0) | '"' | Character'Val (8) .. Character'Val (13) => Length := Length + 2; when Character'Val (32) | Character'Val (33) | Character'Val (35) .. Character'Val (126) => Length := Length + 1; when others => Length := Length + 4; end case; end loop; if Add_Quotes then Length := Length + 2; end if; return Result : String (1 .. Length) do if Add_Quotes then O := O + 1; Result (Result'First) := '"'; Result (Result'Last) := '"'; end if; for I in S'Range loop O := O + Sublength; declare Img : constant String := C_Escape_Hex (S (I)); begin Sublength := Img'Length; Result (O .. O + Sublength - 1) := Img; end; end loop; end return; end C_Escape_Hex; end Natools.String_Escapes; |
Added src/natools-string_escapes.ads version [a3cb74363f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | ------------------------------------------------------------------------------ -- Copyright (c) 2016, Natacha Porté -- -- -- -- Permission to use, copy, modify, and distribute this software for any -- -- purpose with or without fee is hereby granted, provided that the above -- -- copyright notice and this permission notice appear in all copies. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- -- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- -- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- -- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Natools.String_Escapes provides escaping and unescaping for Strings in -- -- various formats. -- ------------------------------------------------------------------------------ package Natools.String_Escapes is pragma Pure; function C_Escape_Hex (S : String; Add_Quotes : Boolean := False) return String; -- Replace non-ASCII-printable characters of S with C-style escapes, -- either two-character (like "\n") or hexadecimal four-character -- (like "\xC3"). -- Add double quotes at the beginning and end if Add_Quotes. end Natools.String_Escapes; |